This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
properly restore PL_rsfp_filters after require
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu Oct 22 10:24:53 EET DST 1998 [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_pthread_yield=''
413 d_sched_yield=''
414 sched_yield=''
415 d_pthreads_created_joinable=''
416 d_readdir=''
417 d_rewinddir=''
418 d_seekdir=''
419 d_telldir=''
420 d_readlink=''
421 d_rename=''
422 d_rmdir=''
423 d_safebcpy=''
424 d_safemcpy=''
425 d_sanemcmp=''
426 d_select=''
427 d_sem=''
428 d_semctl=''
429 d_semget=''
430 d_semop=''
431 d_setegid=''
432 d_seteuid=''
433 d_setgrent=''
434 d_setgrps=''
435 d_sethent=''
436 d_setlinebuf=''
437 d_setlocale=''
438 d_setnent=''
439 d_setpent=''
440 d_setpgid=''
441 d_setpgrp2=''
442 d_bsdsetpgrp=''
443 d_setpgrp=''
444 d_setprior=''
445 d_setpwent=''
446 d_setregid=''
447 d_setresgid=''
448 d_setresuid=''
449 d_setreuid=''
450 d_setrgid=''
451 d_setruid=''
452 d_setsent=''
453 d_setsid=''
454 d_setvbuf=''
455 d_sfio=''
456 usesfio=''
457 d_shm=''
458 d_shmat=''
459 d_shmatprototype=''
460 shmattype=''
461 d_shmctl=''
462 d_shmdt=''
463 d_shmget=''
464 d_sigaction=''
465 d_sigsetjmp=''
466 d_oldsock=''
467 d_socket=''
468 d_sockpair=''
469 sockethdr=''
470 socketlib=''
471 d_statblks=''
472 d_stdio_cnt_lval=''
473 d_stdio_ptr_lval=''
474 d_stdiobase=''
475 d_stdstdio=''
476 stdio_base=''
477 stdio_bufsiz=''
478 stdio_cnt=''
479 stdio_filbuf=''
480 stdio_ptr=''
481 d_index=''
482 d_strchr=''
483 d_strcoll=''
484 d_strctcpy=''
485 d_strerrm=''
486 d_strerror=''
487 d_sysernlst=''
488 d_syserrlst=''
489 d_strtod=''
490 d_strtol=''
491 d_strtoul=''
492 d_strxfrm=''
493 d_symlink=''
494 d_syscall=''
495 d_sysconf=''
496 d_system=''
497 d_tcgetpgrp=''
498 d_tcsetpgrp=''
499 d_time=''
500 timetype=''
501 clocktype=''
502 d_times=''
503 d_truncate=''
504 d_tzname=''
505 d_umask=''
506 d_semctl_semid_ds=''
507 d_semctl_semun=''
508 d_union_semun=''
509 d_vfork=''
510 usevfork=''
511 d_voidsig=''
512 signal_t=''
513 d_volatile=''
514 d_charvspr=''
515 d_vprintf=''
516 d_wait4=''
517 d_waitpid=''
518 d_wcstombs=''
519 d_wctomb=''
520 d_dbmclose64=''
521 d_dbminit64=''
522 d_delete64=''
523 d_fetch64=''
524 d_firstkey64=''
525 d_nextkey64=''
526 d_store64=''
527 dlext=''
528 cccdlflags=''
529 ccdlflags=''
530 dlsrc=''
531 ld=''
532 lddlflags=''
533 usedl=''
534 doublesize=''
535 ebcdic=''
536 fpostype=''
537 gidtype=''
538 groupstype=''
539 h_fcntl=''
540 h_sysfile=''
541 i_arpainet=''
542 db_hashtype=''
543 db_prefixtype=''
544 i_db=''
545 i_dbm=''
546 i_rpcsvcdbm=''
547 d_dirnamlen=''
548 direntrytype=''
549 i_dirent=''
550 i_dld=''
551 i_dlfcn=''
552 i_fcntl=''
553 i_float=''
554 i_gdbm=''
555 d_grpasswd=''
556 i_grp=''
557 d_int64t=''
558 i_inttypes=''
559 i_limits=''
560 i_locale=''
561 i_malloc=''
562 i_math=''
563 i_memory=''
564 i_ndbm=''
565 i_netdb=''
566 i_neterrno=''
567 i_niin=''
568 i_sysin=''
569 d_pwage=''
570 d_pwchange=''
571 d_pwclass=''
572 d_pwcomment=''
573 d_pwexpire=''
574 d_pwgecos=''
575 d_pwpasswd=''
576 d_pwquota=''
577 i_pwd=''
578 i_sfio=''
579 i_stddef=''
580 i_stdlib=''
581 i_string=''
582 strings=''
583 i_sysaccess=''
584 i_sysdir=''
585 i_sysfile=''
586 d_voidtty=''
587 i_bsdioctl=''
588 i_sysfilio=''
589 i_sysioctl=''
590 i_syssockio=''
591 i_sysndir=''
592 i_sysparam=''
593 i_sysresrc=''
594 i_syssecrt=''
595 i_sysselct=''
596 i_sysstat=''
597 i_systimes=''
598 i_systypes=''
599 i_sysun=''
600 i_syswait=''
601 i_sgtty=''
602 i_termio=''
603 i_termios=''
604 i_systime=''
605 i_systimek=''
606 i_time=''
607 timeincl=''
608 i_unistd=''
609 i_utime=''
610 i_values=''
611 i_stdarg=''
612 i_varargs=''
613 i_varhdr=''
614 i_vfork=''
615 intsize=''
616 longsize=''
617 shortsize=''
618 d_dirent64s=''
619 d_flock64s=''
620 d_fstat64=''
621 d_ftruncate64=''
622 d_ino64t=''
623 d_lockf64=''
624 d_lseek64=''
625 d_lstat64=''
626 d_off64t=''
627 d_open64=''
628 d_opendir64=''
629 d_readdir64=''
630 d_seekdir64=''
631 d_stat64=''
632 d_telldir64=''
633 d_truncate64=''
634 libc=''
635 libperl=''
636 shrpenv=''
637 useshrplib=''
638 glibpth=''
639 libpth=''
640 loclibpth=''
641 plibpth=''
642 xlibpth=''
643 ignore_versioned_solibs=''
644 libs=''
645 lns=''
646 lseeksize=''
647 lseektype=''
648 make_set_make=''
649 d_mymalloc=''
650 freetype=''
651 mallocobj=''
652 mallocsrc=''
653 malloctype=''
654 usemymalloc=''
655 installman1dir=''
656 man1dir=''
657 man1direxp=''
658 man1ext=''
659 installman3dir=''
660 man3dir=''
661 man3direxp=''
662 man3ext=''
663 huge=''
664 large=''
665 medium=''
666 models=''
667 small=''
668 split=''
669 modetype=''
670 mydomain=''
671 myhostname=''
672 phostname=''
673 c=''
674 n=''
675 d_eofnblk=''
676 eagain=''
677 o_nonblock=''
678 rd_nodata=''
679 netdb_hlen_type=''
680 netdb_host_type=''
681 netdb_name_type=''
682 netdb_net_type=''
683 groupcat=''
684 hostcat=''
685 passcat=''
686 orderlib=''
687 ranlib=''
688 package=''
689 spackage=''
690 pager=''
691 apiversion=''
692 patchlevel=''
693 subversion=''
694 version=''
695 perladmin=''
696 perlpath=''
697 pidtype=''
698 prefix=''
699 prefixexp=''
700 installprivlib=''
701 privlib=''
702 privlibexp=''
703 prototype=''
704 ptrsize=''
705 drand01=''
706 randbits=''
707 randfunc=''
708 randseedtype=''
709 seedfunc=''
710 installscript=''
711 scriptdir=''
712 scriptdirexp=''
713 selectminbits=''
714 selecttype=''
715 sh=''
716 sig_name=''
717 sig_name_init=''
718 sig_num=''
719 installsitearch=''
720 sitearch=''
721 sitearchexp=''
722 installsitelib=''
723 sitelib=''
724 sitelibexp=''
725 sizetype=''
726 so=''
727 sharpbang=''
728 shsharp=''
729 spitshell=''
730 src=''
731 ssizetype=''
732 startperl=''
733 startsh=''
734 stdchar=''
735 d_fgetpos64=''
736 d_fopen64=''
737 d_freopen64=''
738 d_fseek64=''
739 d_fseeko64=''
740 d_fsetpos64=''
741 d_ftell64=''
742 d_ftello64=''
743 d_tmpfile64=''
744 sysman=''
745 trnl=''
746 uidtype=''
747 archname64=''
748 use64bits=''
749 usemultiplicity=''
750 nm_opt=''
751 nm_so_opt=''
752 runnm=''
753 usenm=''
754 useperlio=''
755 d_oldpthreads=''
756 usethreads=''
757 incpath=''
758 mips=''
759 mips_type=''
760 usrinc=''
761 defvoidused=''
762 voidflags=''
763 CONFIG=''
764
765 define='define'
766 undef='undef'
767 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
768 rmlist=''
769
770 : We must find out about Eunice early
771 eunicefix=':'
772 if test -f /etc/unixtovms; then
773         eunicefix=/etc/unixtovms
774 fi
775 if test -f /etc/unixtovms.exe; then
776         eunicefix=/etc/unixtovms.exe
777 fi
778
779 i_whoami=''
780 : change the next line if compiling for Xenix/286 on Xenix/386
781 xlibpth='/usr/lib/386 /lib/386'
782
783 : Possible local library directories to search.
784 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
785 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
786
787 : general looking path for locating libraries
788 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
789 glibpth="$glibpth /lib /usr/lib $xlibpth"
790 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
791 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
792
793 : Private path used by Configure to find libraries.  Its value
794 : is prepended to libpth. This variable takes care of special
795 : machines, like the mips.  Usually, it should be empty.
796 plibpth=''
797
798 : Possible local include directories to search.
799 : Set locincpth to "" in a hint file to defeat local include searches.
800 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
801 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
802 :
803 : no include file wanted by default
804 inclwanted=''
805
806 : list of known cpp symbols, sorted alphabetically
807 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
808 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
809 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
810 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
811 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
812 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
813 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
814 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
815 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
816 al="$al VMS Xenix286"
817 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
818 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
819 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
820 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
821 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
822 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
823 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
824 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
825 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
826 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
827 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
828 al="$al __SVR4_2__ __UMAXV__"
829 al="$al ____386BSD____ __alpha __alpha__ __amiga"
830 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
831 al="$al __host_mips__"
832 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
833 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
834 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
835 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
836 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
837 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
838 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
839 al="$al __mc88100 __mc88100__ __mips __mips__"
840 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
841 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
842 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
843 al="$al _host_mips _mips _unix"
844 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
845 al="$al apollo ardent att386 att3b"
846 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
847 al="$al cadmus clipper concurrent convex cray ctix"
848 al="$al dmert encore gcos gcx gimpel gould"
849 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
850 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
851 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
852 al="$al i186 i286 i386 i486 i8086"
853 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
854 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
855 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
856 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
857 al="$al mc88000 mc88100 merlin mert mips mvs n16"
858 al="$al ncl_el ncl_mr"
859 al="$al news1500 news1700 news1800 news1900 news3700"
860 al="$al news700 news800 news900 ns16000 ns32000"
861 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
862 al="$al parisc pc532 pdp11 plexus posix pyr"
863 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
864 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
865 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
866 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
867 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
868 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
869 al="$al xenix z8000"
870
871 : Trailing extension.  Override this in a hint file, if needed.
872 _exe=''
873 : Extra object files, if any, needed on this platform.
874 archobjs=''
875 groupstype=''
876 : default library list
877 libswanted=''
878 ignore_versioned_solibs=''
879 : full support for void wanted by default
880 defvoidused=15
881
882 : set useposix=false in your hint file to disable the POSIX extension.
883 useposix=true
884 : set useopcode=false in your hint file to disable the Opcode extension.
885 useopcode=true
886 : set usemultiplicity on the Configure command line to enable multiplicity.
887 : set usethreads on the Configure command line to enable threads.
888 : List of libraries we want.
889 : If anyone needs -lnet, put it in a hint file.
890 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
891 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
892 libswanted="$libswanted ucb bsd BSD PW x"
893 : We probably want to search /usr/shlib before most other libraries.
894 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
895 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
896 glibpth="/usr/shlib $glibpth"
897 : Do not use vfork unless overridden by a hint file.
898 usevfork=false
899
900 : Find the basic shell for Bourne shell scripts
901 case "$sh" in
902 '')
903         case "$SYSTYPE" in
904         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
905         *) xxx='/bin/sh';;
906         esac
907         if test -f "$xxx"; then
908                 sh="$xxx"
909         else
910                 : Build up a list and do a single loop so we can 'break' out.
911                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
912                 for xxx in sh bash ksh pdksh ash; do
913                         for p in $pth; do
914                                 try="$try ${p}/${xxx}"
915                         done
916                 done
917                 for xxx in $try; do
918                         if test -f "$xxx"; then
919                                 sh="$xxx";
920                                 break
921                         elif test -f "$xxx.exe"; then
922                                 sh="$xxx";
923                                 break
924                         fi
925                 done
926         fi
927         ;;
928 esac
929
930 case "$sh" in
931 '')     cat <<EOM >&2
932 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
933
934 Usually it's in /bin/sh.  How did you even get this far?
935 Please contact me (Jarkko Hietaniemi) at jhi@iki.fi and 
936 we'll try to straighten this all out.
937 EOM
938         exit 1
939         ;;
940 esac
941
942 : see if sh knows # comments
943 if `$sh -c '#' >/dev/null 2>&1`; then
944         shsharp=true
945         spitshell=cat
946         xcat=/bin/cat
947         test -f $xcat || xcat=/usr/bin/cat
948         echo "#!$xcat" >try
949         $eunicefix try
950         chmod +x try
951         ./try > today
952         if test -s today; then
953                 sharpbang='#!'
954         else
955                 echo "#! $xcat" > try
956                 $eunicefix try
957                 chmod +x try
958                 ./try > today
959                 if test -s today; then
960                         sharpbang='#! '
961                 else
962                         sharpbang=': use '
963                 fi
964         fi
965 else
966         echo " "
967         echo "Your $sh doesn't grok # comments--I will strip them later on."
968         shsharp=false
969         cd ..
970         echo "exec grep -v '^[  ]*#'" >spitshell
971         chmod +x spitshell
972         $eunicefix spitshell
973         spitshell=`pwd`/spitshell
974         cd UU
975         echo "I presume that if # doesn't work, #! won't work either!"
976         sharpbang=': use '
977 fi
978 rm -f try today
979
980 : figure out how to guarantee sh startup
981 case "$startsh" in
982 '') startsh=${sharpbang}${sh} ;;
983 *)
984 esac
985 cat >try <<EOSS
986 $startsh
987 set abc
988 test "$?abc" != 1
989 EOSS
990
991 chmod +x try
992 $eunicefix try
993 if ./try; then
994         : echo "Yup, it does."
995 else
996         echo "Hmm... '$startsh' does not guarantee sh startup..."
997         echo "You may have to fix up the shell scripts to make sure $sh runs them."
998 fi
999 rm -f try
1000
1001
1002 : Save command line options in file UU/cmdline.opt for later use in
1003 : generating config.sh.
1004 cat > cmdline.opt <<EOSH
1005 # Configure command line arguments.
1006 config_arg0='$0'
1007 config_args='$*'
1008 config_argc=$#
1009 EOSH
1010 argn=1
1011 for arg in "$@"; do
1012         cat >>cmdline.opt <<EOSH
1013 config_arg$argn='$arg'
1014 EOSH
1015         argn=`expr $argn + 1`
1016 done
1017
1018 : produce awk script to parse command line options
1019 cat >options.awk <<'EOF'
1020 BEGIN {
1021         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1022
1023         len = length(optstr);
1024         for (i = 1; i <= len; i++) {
1025                 c = substr(optstr, i, 1);
1026                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1027                 if (a == ":") {
1028                         arg[c] = 1;
1029                         i++;
1030                 }
1031                 opt[c] = 1;
1032         }
1033 }
1034 {
1035         expect = 0;
1036         str = $0;
1037         if (substr(str, 1, 1) != "-") {
1038                 printf("'%s'\n", str);
1039                 next;
1040         }
1041         len = length($0);
1042         for (i = 2; i <= len; i++) {
1043                 c = substr(str, i, 1);
1044                 if (!opt[c]) {
1045                         printf("-%s\n", substr(str, i));
1046                         next;
1047                 }
1048                 printf("-%s\n", c);
1049                 if (arg[c]) {
1050                         if (i < len)
1051                                 printf("'%s'\n", substr(str, i + 1));
1052                         else
1053                                 expect = 1;
1054                         next;
1055                 }
1056         }
1057 }
1058 END {
1059         if (expect)
1060                 print "?";
1061 }
1062 EOF
1063
1064 : process the command line options
1065 set X `for arg in "$@"; do echo "X$arg"; done |
1066         sed -e s/X// | awk -f options.awk`
1067 eval "set $*"
1068 shift
1069 rm -f options.awk
1070
1071 : set up default values
1072 fastread=''
1073 reuseval=false
1074 config_sh=''
1075 alldone=''
1076 error=''
1077 silent=''
1078 extractsh=''
1079 override=''
1080 knowitall=''
1081 rm -f optdef.sh
1082 cat >optdef.sh <<EOS
1083 $startsh
1084 EOS
1085
1086
1087 : option parsing
1088 while test $# -gt 0; do
1089         case "$1" in
1090         -d) shift; fastread=yes;;
1091         -e) shift; alldone=cont;;
1092         -f)
1093                 shift
1094                 cd ..
1095                 if test -r "$1"; then
1096                         config_sh="$1"
1097                 else
1098                         echo "$me: cannot read config file $1." >&2
1099                         error=true
1100                 fi
1101                 cd UU
1102                 shift;;
1103         -h) shift; error=true;;
1104         -r) shift; reuseval=true;;
1105         -s) shift; silent=true; realsilent=true;;
1106         -E) shift; alldone=exit;;
1107         -K) shift; knowitall=true;;
1108         -O) shift; override=true;;
1109         -S) shift; silent=true; extractsh=true;;
1110         -D)
1111                 shift
1112                 case "$1" in
1113                 *=)
1114                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1115                         echo "$me: ignoring -D $1" >&2
1116                         ;;
1117                 *=*) echo "$1" | \
1118                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1119                 *) echo "$1='define'" >> optdef.sh;;
1120                 esac
1121                 shift
1122                 ;;
1123         -U)
1124                 shift
1125                 case "$1" in
1126                 *=) echo "$1" >> optdef.sh;;
1127                 *=*)
1128                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1129                         echo "$me: ignoring -U $1" >&2
1130                         ;;
1131                 *) echo "$1='undef'" >> optdef.sh;;
1132                 esac
1133                 shift
1134                 ;;
1135         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1136                 exit 0;;
1137         --) break;;
1138         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1139         *) break;;
1140         esac
1141 done
1142
1143 case "$error" in
1144 true)
1145         cat >&2 <<EOM
1146 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1147                  [-U symbol] [-U symbol=]
1148   -d : use defaults for all answers.
1149   -e : go on without questioning past the production of config.sh.
1150   -f : specify an alternate default configuration file.
1151   -h : print this help message and exit (with an error status).
1152   -r : reuse C symbols value if possible (skips costly nm extraction).
1153   -s : silent mode, only echoes questions and essential information.
1154   -D : define symbol to have some value:
1155          -D symbol         symbol gets the value 'define'
1156          -D symbol=value   symbol gets the value 'value'
1157   -E : stop at the end of questions, after having produced config.sh.
1158   -K : do not use unless you know what you are doing.
1159   -O : let -D and -U override definitions from loaded configuration file.
1160   -S : perform variable substitutions on all .SH files (can mix with -f)
1161   -U : undefine symbol:
1162          -U symbol    symbol gets the value 'undef'
1163          -U symbol=   symbol gets completely empty
1164   -V : print version number and exit (with a zero status).
1165 EOM
1166         exit 1
1167         ;;
1168 esac
1169
1170 : Sanity checks
1171 case "$fastread$alldone" in
1172 yescont|yesexit) ;;
1173 *)
1174         if test ! -t 0; then
1175                 echo "Say 'sh Configure', not 'sh <Configure'"
1176                 exit 1
1177         fi
1178         ;;
1179 esac
1180
1181 exec 4>&1
1182 case "$silent" in
1183 true) exec 1>/dev/null;;
1184 esac
1185
1186 : run the defines and the undefines, if any, but leave the file out there...
1187 touch optdef.sh
1188 . ./optdef.sh
1189
1190 : set package name
1191 package=perl5
1192 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1193 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1194 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1195 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1196 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1197 esac
1198
1199 : Some greps do not return status, grrr.
1200 echo "grimblepritz" >grimble
1201 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1202         contains=contains
1203 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1204         contains=grep
1205 else
1206         contains=contains
1207 fi
1208 rm -f grimble
1209 : the following should work in any shell
1210 case "$contains" in
1211 contains*)
1212         echo " "
1213         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1214         cat >contains <<'EOSS'
1215 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1216 EOSS
1217 chmod +x contains
1218 esac
1219
1220 : Find the path to the source tree
1221 case "$src" in
1222 '') case "$0" in
1223     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1224     *)   src='.';;
1225     esac;;
1226 esac
1227 case "$src" in
1228 '')     src=/
1229         rsrc=/
1230         ;;
1231 /*) rsrc="$src";;
1232 *) rsrc="../$src";;
1233 esac
1234 if test -f $rsrc/Configure && \
1235         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1236 then
1237    : found it, so we are ok.
1238 else
1239         rsrc=''
1240         for src in . .. ../.. ../../.. ../../../..; do
1241                 if test -f ../$src/Configure && \
1242                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1243                 then
1244                         rsrc=../$src
1245                         break
1246                 fi
1247         done
1248 fi
1249 case "$rsrc" in
1250 '')
1251         cat <<EOM >&4
1252
1253 Sorry, I can't seem to locate the source dir for $package.  Please start
1254 Configure with an explicit path -- i.e. /some/path/Configure.
1255
1256 EOM
1257         exit 1
1258         ;;
1259 ../.)   rsrc='..';;
1260 *)
1261         echo " "
1262         echo "Sources for $package found in \"$src\"." >&4
1263         ;;
1264 esac
1265
1266 : script used to extract .SH files with variable substitutions
1267 cat >extract <<'EOS'
1268 CONFIG=true
1269 echo "Doing variable substitutions on .SH files..."
1270 if test -f $src/MANIFEST; then
1271         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1272 else
1273         echo "(Looking for .SH files under the source directory.)"
1274         set x `(cd $src; find . -name "*.SH" -print)`
1275 fi
1276 shift
1277 case $# in
1278 0) set x `(cd $src; echo *.SH)`; shift;;
1279 esac
1280 if test ! -f $src/$1; then
1281         shift
1282 fi
1283 mkdir_p='
1284 name=$1;
1285 create="";
1286 while test $name; do
1287         if test ! -d "$name"; then
1288                 create="$name $create";
1289                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1290                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1291         else
1292                 name="";
1293         fi;
1294 done;
1295 for file in $create; do
1296         mkdir $file;
1297 done
1298 '
1299 for file in $*; do
1300         case "$src" in
1301         ".")
1302                 case "$file" in
1303                 */*)
1304                         dir=`expr X$file : 'X\(.*\)/'`
1305                         file=`expr X$file : 'X.*/\(.*\)'`
1306                         (cd $dir && . ./$file)
1307                         ;;
1308                 *)
1309                         . ./$file
1310                         ;;
1311                 esac
1312                 ;;
1313         *)
1314                 case "$file" in
1315                 */*)
1316                         dir=`expr X$file : 'X\(.*\)/'`
1317                         file=`expr X$file : 'X.*/\(.*\)'`
1318                         (set x $dir; shift; eval $mkdir_p)
1319                         sh <$src/$dir/$file
1320                         ;;
1321                 *)
1322                         sh <$src/$file
1323                         ;;
1324                 esac
1325                 ;;
1326         esac
1327 done
1328 if test -f $src/config_h.SH; then
1329         if test ! -f config.h; then
1330         : oops, they left it out of MANIFEST, probably, so do it anyway.
1331         . $src/config_h.SH
1332         fi
1333 fi
1334 EOS
1335
1336 : extract files and exit if asked to do so
1337 case "$extractsh" in
1338 true)
1339         case "$realsilent" in
1340         true) ;;
1341         *) exec 1>&4;;
1342         esac
1343         case "$config_sh" in
1344         '') config_sh='config.sh';;
1345         esac
1346         echo " "
1347         echo "Fetching answers from $config_sh..."
1348         cd ..
1349         . $config_sh
1350         test "$override" && . ./optdef.sh
1351         echo " "
1352         . UU/extract
1353         rm -rf UU
1354         echo "Done."
1355         exit 0
1356         ;;
1357 esac
1358
1359 : Eunice requires " " instead of "", can you believe it
1360 echo " "
1361 : Here we go...
1362 echo "Beginning of configuration questions for $package."
1363
1364 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1365
1366 : first determine how to suppress newline on echo command
1367 echo " "
1368 echo "Checking echo to see how to suppress newlines..."
1369 (echo "hi there\c" ; echo " ") >.echotmp
1370 if $contains c .echotmp >/dev/null 2>&1 ; then
1371         echo "...using -n."
1372         n='-n'
1373         c=''
1374 else
1375         cat <<'EOM'
1376 ...using \c
1377 EOM
1378         n=''
1379         c='\c'
1380 fi
1381 echo $n "The star should be here-->$c"
1382 echo '*'
1383 rm -f .echotmp
1384
1385 : Now test for existence of everything in MANIFEST
1386 echo " "
1387 if test -f $rsrc/MANIFEST; then
1388         echo "First let's make sure your kit is complete.  Checking..." >&4
1389         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1390         rm -f missing
1391         tmppwd=`pwd`
1392         for filelist in x??; do
1393                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1394         done
1395         if test -s missing; then
1396                 cat missing >&4
1397                 cat >&4 <<'EOM'
1398
1399 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1400
1401 You have the option of continuing the configuration process, despite the
1402 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1403 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1404 and contact the author (jhi@iki.fi).
1405
1406 EOM
1407                 echo $n "Continue? [n] $c" >&4
1408                 read ans
1409                 case "$ans" in
1410                 y*)
1411                         echo "Continuing..." >&4
1412                         rm -f missing
1413                         ;;
1414                 *)
1415                         echo "ABORTING..." >&4
1416                         kill $$
1417                         ;;
1418                 esac
1419         else
1420                 echo "Looks good..."
1421         fi
1422 else
1423         echo "There is no MANIFEST file.  I hope your kit is complete !"
1424 fi
1425 rm -f missing x??
1426
1427 echo " "
1428 : Find the appropriate value for a newline for tr
1429 if test -n "$DJGPP"; then
1430        trnl='\012'
1431 fi
1432 if test X"$trnl" = X; then
1433         case "`echo foo|tr '\n' x 2>/dev/null`" in
1434         foox) trnl='\n' ;;
1435         esac
1436 fi
1437 if test X"$trnl" = X; then
1438         case "`echo foo|tr '\012' x 2>/dev/null`" in
1439         foox) trnl='\012' ;;
1440         esac
1441 fi
1442 if test X"$trnl" = X; then
1443         cat <<EOM >&2
1444
1445 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1446
1447 EOM
1448         exit 1
1449 fi
1450
1451 : compute the number of columns on the terminal for proper question formatting
1452 case "$COLUMNS" in
1453 '') COLUMNS='80';;
1454 esac
1455
1456 : set up the echo used in my read
1457 myecho="case \"\$xxxm\" in
1458 '') echo $n \"\$rp $c\" >&4;;
1459 *) case \"\$rp\" in
1460         '') echo $n \"[\$xxxm] $c\";;
1461         *)
1462                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1463                         echo \"\$rp\" >&4
1464                         echo $n \"[\$xxxm] $c\" >&4
1465                 else
1466                         echo $n \"\$rp [\$xxxm] $c\" >&4
1467                 fi
1468                 ;;
1469         esac;;
1470 esac"
1471
1472 : now set up to do reads with possible shell escape and default assignment
1473 cat <<EOSC >myread
1474 $startsh
1475 xxxm=\$dflt
1476 $myecho
1477 ans='!'
1478 case "\$fastread" in
1479 yes) case "\$dflt" in
1480         '') ;;
1481         *) ans='';
1482                 case "\$silent-\$rp" in
1483                 true-) ;;
1484                 *) echo " " >&4;;
1485                 esac;;
1486         esac;;
1487 *) case "\$silent" in
1488         true) case "\$rp" in
1489                 '') ans='';;
1490                 esac;;
1491         esac;;
1492 esac
1493 while expr "X\$ans" : "X!" >/dev/null; do
1494         read answ
1495         set x \$xxxm
1496         shift
1497         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1498         case  "\$answ" in
1499         "!")
1500                 sh 1>&4
1501                 echo " "
1502                 $myecho
1503                 ;;
1504         !*)
1505                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1506                 shift
1507                 sh 1>&4 -c "\$*"
1508                 echo " "
1509                 $myecho
1510                 ;;
1511         "\$ans")
1512                 case "\$ans" in
1513                 \\&*)
1514                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1515                         shift
1516                         case "\$1" in
1517                         -d)
1518                                 fastread=yes
1519                                 echo "(OK, I'll run with -d after this question.)" >&4
1520                                 ;;
1521                         -*)
1522                                 echo "*** Sorry, \$1 not supported yet." >&4
1523                                 ;;
1524                         esac
1525                         $myecho
1526                         ans=!
1527                         ;;
1528                 esac;;
1529         *)
1530                 case "\$aok" in
1531                 y)
1532                         echo "*** Substitution done -- please confirm."
1533                         xxxm="\$ans"
1534                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1535                         xxxm="\$ans"
1536                         ans=!
1537                         ;;
1538                 *)
1539                         echo "*** Error -- try again."
1540                         ans=!
1541                         ;;
1542                 esac
1543                 $myecho
1544                 ;;
1545         esac
1546         case "\$ans\$xxxm\$nostick" in
1547         '')
1548                 ans=!
1549                 $myecho
1550                 ;;
1551         esac
1552 done
1553 case "\$ans" in
1554 '') ans="\$xxxm";;
1555 esac
1556 EOSC
1557
1558 : create .config dir to save info across Configure sessions
1559 test -d ../.config || mkdir ../.config
1560 cat >../.config/README <<EOF
1561 This directory created by Configure to save information that should
1562 persist across sessions for $package.
1563
1564 You may safely delete it if you wish.
1565 EOF
1566
1567 : general instructions
1568 needman=true
1569 firsttime=true
1570 user=`(logname) 2>/dev/null`
1571 case "$user" in
1572 '') user=`whoami 2>&1`;;
1573 esac
1574 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1575         firsttime=false
1576         echo " "
1577         rp='Would you like to see the instructions?'
1578         dflt=n
1579         . ./myread
1580         case "$ans" in
1581         [yY]*) ;;
1582         *) needman=false;;
1583         esac
1584 fi
1585 if $needman; then
1586         cat <<EOH
1587
1588 This installation shell script will examine your system and ask you questions
1589 to determine how the perl5 package should be installed. If you get
1590 stuck on a question, you may use a ! shell escape to start a subshell or
1591 execute a command.  Many of the questions will have default answers in square
1592 brackets; typing carriage return will give you the default.
1593
1594 On some of the questions which ask for file or directory names you are allowed
1595 to use the ~name construct to specify the login directory belonging to "name",
1596 even if you don't have a shell which knows about that.  Questions where this is
1597 allowed will be marked "(~name ok)".
1598
1599 EOH
1600         rp=''
1601         dflt='Type carriage return to continue'
1602         . ./myread
1603         cat <<'EOH'
1604
1605 The prompter used in this script allows you to use shell variables and
1606 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1607 in the default answer, as if the default line was a set of arguments given to a
1608 script shell.  This means you may also use $* to repeat the whole default line,
1609 so you do not have to re-type everything to add something to the default.
1610
1611 Everytime there is a substitution, you will have to confirm.  If there is an
1612 error (e.g. an unmatched backtick), the default answer will remain unchanged
1613 and you will be prompted again.
1614
1615 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1616 the questions and use the computed defaults (or the previous answers if there
1617 was already a config.sh file). Type 'Configure -h' for a list of options.
1618 You may also start interactively and then answer '& -d' at any prompt to turn
1619 on the non-interactive behaviour for the remainder of the execution.
1620
1621 EOH
1622         . ./myread
1623         cat <<EOH
1624
1625 Much effort has been expended to ensure that this shell script will run on any
1626 Unix system.  If despite that it blows up on yours, your best bet is to edit
1627 Configure and run it again.  If you can't run Configure for some reason,
1628 you'll have to generate a config.sh file by hand.  Whatever problems you
1629 have, let me (jhi@iki.fi) know how I blew it.
1630
1631 This installation script affects things in two ways:
1632
1633 1) it may do direct variable substitutions on some of the files included
1634    in this kit.
1635 2) it builds a config.h file for inclusion in C programs.  You may edit
1636    any of these files as the need arises after running this script.
1637
1638 If you make a mistake on a question, there is no easy way to back up to it
1639 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1640 files.  Configure will offer to let you do this before it runs the SH files.
1641
1642 EOH
1643         dflt='Type carriage return to continue'
1644         . ./myread
1645         case "$firsttime" in
1646         true) echo $user >>../.config/instruct;;
1647         esac
1648 fi
1649
1650 : find out where common programs are
1651 echo " "
1652 echo "Locating common programs..." >&4
1653 cat <<EOSC >loc
1654 $startsh
1655 case \$# in
1656 0) exit 1;;
1657 esac
1658 thing=\$1
1659 shift
1660 dflt=\$1
1661 shift
1662 for dir in \$*; do
1663         case "\$thing" in
1664         .)
1665         if test -d \$dir/\$thing; then
1666                 echo \$dir
1667                 exit 0
1668         fi
1669         ;;
1670         *)
1671         for thisthing in \$dir/\$thing; do
1672                 : just loop through to pick last item
1673         done
1674         if test -f \$thisthing; then
1675                 echo \$thisthing
1676                 exit 0
1677         elif test -f \$dir/\$thing.exe; then
1678                 if test -n "$DJGPP"; then
1679                         echo \$dir/\$thing.exe
1680                 else
1681                         : on Eunice apparently
1682                         echo \$dir/\$thing
1683                 fi
1684                 exit 0
1685         fi
1686         ;;
1687         esac
1688 done
1689 echo \$dflt
1690 exit 1
1691 EOSC
1692 chmod +x loc
1693 $eunicefix loc
1694 loclist="
1695 awk
1696 cat
1697 comm
1698 cp
1699 echo
1700 expr
1701 grep
1702 ls
1703 make
1704 mkdir
1705 rm
1706 sed
1707 sort
1708 touch
1709 tr
1710 uniq
1711 "
1712 trylist="
1713 Mcc
1714 ar
1715 byacc
1716 cpp
1717 csh
1718 date
1719 egrep
1720 gzip
1721 less
1722 ln
1723 more
1724 nm
1725 nroff
1726 pg
1727 tee
1728 test
1729 uname
1730 zip
1731 "
1732 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1733 pth="$pth /lib /usr/lib"
1734 for file in $loclist; do
1735         eval xxx=\$$file
1736         case "$xxx" in
1737         /*|?:[\\/]*)
1738                 if test -f "$xxx"; then
1739                         : ok
1740                 else
1741                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1742                         xxx=`./loc $file $file $pth`
1743                 fi
1744                 ;;
1745         '') xxx=`./loc $file $file $pth`;;
1746         *) xxx=`./loc $xxx $xxx $pth`;;
1747         esac
1748         eval $file=$xxx
1749         eval _$file=$xxx
1750         case "$xxx" in
1751         /*)
1752                 echo $file is in $xxx.
1753                 ;;
1754         ?:[\\/]*)
1755                 echo $file is in $xxx.
1756                 ;;
1757         *)
1758                 echo "I don't know where '$file' is, and my life depends on it." >&4
1759                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1760                 exit 1
1761                 ;;
1762         esac
1763 done
1764 echo " "
1765 echo "Don't worry if any of the following aren't found..."
1766 say=offhand
1767 for file in $trylist; do
1768         eval xxx=\$$file
1769         case "$xxx" in
1770         /*|?:[\\/]*)
1771                 if test -f "$xxx"; then
1772                         : ok
1773                 else
1774                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1775                         xxx=`./loc $file $file $pth`
1776                 fi
1777                 ;;
1778         '') xxx=`./loc $file $file $pth`;;
1779         *) xxx=`./loc $xxx $xxx $pth`;;
1780         esac
1781         eval $file=$xxx
1782         eval _$file=$xxx
1783         case "$xxx" in
1784         /*)
1785                 echo $file is in $xxx.
1786                 ;;
1787         ?:[\\/]*)
1788                 echo $file is in $xxx.
1789                 ;;
1790         *)
1791                 echo "I don't see $file out there, $say."
1792                 say=either
1793                 ;;
1794         esac
1795 done
1796 case "$egrep" in
1797 egrep)
1798         echo "Substituting grep for egrep."
1799         egrep=$grep
1800         ;;
1801 esac
1802 case "$ln" in
1803 ln)
1804         echo "Substituting cp for ln."
1805         ln=$cp
1806         ;;
1807 esac
1808 case "$test" in
1809 test)
1810         echo "Hopefully test is built into your sh."
1811         ;;
1812 *)
1813         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1814                 echo "Using the test built into your sh."
1815                 test=test
1816                 _test=test
1817         fi
1818         ;;
1819 esac
1820 case "$echo" in
1821 echo)
1822         echo "Hopefully echo is built into your sh."
1823         ;;
1824 '') ;;
1825 *)
1826         echo " "
1827 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1828         $echo $n "hi there$c" >foo1
1829         echo $n "hi there$c" >foo2
1830         if cmp foo1 foo2 >/dev/null 2>&1; then
1831                 echo "They are compatible.  In fact, they may be identical."
1832         else
1833                 case "$n" in
1834                 '-n') n='' c='\c';;
1835                 *) n='-n' c='';;
1836                 esac
1837                 cat <<FOO
1838 They are not compatible!  You are probably running ksh on a non-USG system.
1839 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1840 have echo built in and we may have to run some Bourne shell scripts.  That
1841 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1842
1843 FOO
1844                 $echo $n "The star should be here-->$c"
1845                 $echo "*"
1846         fi
1847         $rm -f foo1 foo2
1848         ;;
1849 esac
1850
1851 : determine whether symbolic links are supported
1852 echo " "
1853 $touch blurfl
1854 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1855         echo "Symbolic links are supported." >&4
1856         lns="$ln -s"
1857 else
1858         echo "Symbolic links are NOT supported." >&4
1859         lns="$ln"
1860 fi
1861 $rm -f blurfl sym
1862
1863 : see whether [:lower:] and [:upper:] are supported character classes
1864 echo " "
1865 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1866 ABYZ)
1867         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1868         up='[:upper:]'
1869         low='[:lower:]'
1870         ;;
1871 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1872         # (0xc9 and 0xd1), therefore that is a nice testing point.
1873         if test "X$up" = X -o "X$low" = X; then
1874             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1875             ij) up='[A-Z]'
1876                 low='[a-z]'
1877                 ;;
1878             esac
1879         fi
1880         if test "X$up" = X -o "X$low" = X; then
1881             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1882             ij) up='A-Z'
1883                 low='a-z'
1884                 ;;
1885             esac
1886         fi
1887         if test "X$up" = X -o "X$low" = X; then
1888             case "`echo IJ | od -x 2>/dev/null`" in
1889             *C9D1*|*c9d1*)
1890                 echo "Hey, this might be EBCDIC." >&4
1891                 if test "X$up" = X -o "X$low" = X; then
1892                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1893                     ij) up='[A-IJ-RS-Z]'
1894                         low='[a-ij-rs-z]'
1895                         ;;
1896                     esac
1897                 fi
1898                 if test "X$up" = X -o "X$low" = X; then
1899                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1900                     ij) up='A-IJ-RS-Z'
1901                         low='a-ij-rs-z'
1902                         ;;
1903                     esac
1904                 fi
1905                 ;;
1906             esac
1907         fi
1908 esac
1909 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1910 ij)
1911     echo "Using $up and $low to convert case." >&4
1912     ;;
1913 *)
1914     echo "I don't know how to translate letters from upper to lower case." >&4
1915     echo "Your tr is not acting any way I know of." >&4
1916     exit 1
1917     ;;
1918 esac
1919 : set up the translation script tr, must be called with ./tr of course
1920 cat >tr <<EOSC
1921 $startsh
1922 case "\$1\$2" in
1923 '[A-Z][a-z]') exec $tr '$up' '$low';;
1924 '[a-z][A-Z]') exec $tr '$low' '$up';;
1925 esac
1926 exec $tr "\$@"
1927 EOSC
1928 chmod +x tr
1929 $eunicefix tr
1930
1931 : Try to determine whether config.sh was made on this system
1932 case "$config_sh" in
1933 '')
1934 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1935 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1936 # because the A-Z/a-z are not consecutive.
1937 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1938         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1939 newmyuname="$myuname"
1940 dflt=n
1941 case "$knowitall" in
1942 '')
1943         if test -f ../config.sh; then
1944                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1945                         eval "`grep myuname= ../config.sh`"
1946                 fi
1947                 if test "X$myuname" = "X$newmyuname"; then
1948                         dflt=y
1949                 fi
1950         fi
1951         ;;
1952 *) dflt=y;;
1953 esac
1954
1955 : Get old answers from old config file if Configure was run on the
1956 : same system, otherwise use the hints.
1957 hint=default
1958 cd ..
1959 if test -f config.sh; then
1960         echo " "
1961         rp="I see a config.sh file.  Shall I use it to set the defaults?"
1962         . UU/myread
1963         case "$ans" in
1964         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1965         *)  echo "Fetching default answers from your old config.sh file..." >&4
1966                 tmp_n="$n"
1967                 tmp_c="$c"
1968                 tmp_sh="$sh"
1969                 . ./config.sh
1970                 cp config.sh UU
1971                 n="$tmp_n"
1972                 c="$tmp_c"
1973                 : Older versions did not always set $sh.  Catch re-use of such
1974                 : an old config.sh.
1975                 case "$sh" in
1976                 '') sh="$tmp_sh" ;;
1977                 esac
1978                 hint=previous
1979                 ;;
1980         esac
1981 fi
1982 if test ! -f config.sh; then
1983         $cat <<EOM
1984
1985 First time through, eh?  I have some defaults handy for some systems
1986 that need some extra help getting the Configure answers right:
1987
1988 EOM
1989         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
1990         dflt=''
1991         : Half the following guesses are probably wrong... If you have better
1992         : tests or hints, please send them to jhi@iki.fi
1993         : The metaconfig authors would also appreciate a copy...
1994         $test -f /irix && osname=irix
1995         $test -f /xenix && osname=sco_xenix
1996         $test -f /dynix && osname=dynix
1997         $test -f /dnix && osname=dnix
1998         $test -f /lynx.os && osname=lynxos
1999         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2000         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2001         $test -f /bin/mips && /bin/mips && osname=mips
2002         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2003                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2004         $test -d /usr/apollo/bin && osname=apollo
2005         $test -f /etc/saf/_sactab && osname=svr4
2006         $test -d /usr/include/minix && osname=minix
2007         if $test -d /MachTen -o -d /MachTen_Folder; then
2008                 osname=machten
2009                 if $test -x /sbin/version; then
2010                         osvers=`/sbin/version | $awk '{print $2}' |
2011                         $sed -e 's/[A-Za-z]$//'`
2012                 elif $test -x /usr/etc/version; then
2013                         osvers=`/usr/etc/version | $awk '{print $2}' |
2014                         $sed -e 's/[A-Za-z]$//'`
2015                 else
2016                         osvers="$2.$3"
2017                 fi
2018         fi
2019        $test -f /sys/posix.dll &&
2020                $test -f /usr/bin/what &&
2021                set X `/usr/bin/what /sys/posix.dll` &&
2022                $test "$3" = UWIN &&
2023                osname=uwin &&
2024                osvers="$5"
2025         if $test -f $uname; then
2026                 set X $myuname
2027                 shift
2028
2029                 case "$5" in
2030                 fps*) osname=fps ;;
2031                 mips*)
2032                         case "$4" in
2033                         umips) osname=umips ;;
2034                         *) osname=mips ;;
2035                         esac;;
2036                 [23]100) osname=mips ;;
2037                 next*) osname=next ;;
2038                 i386*)
2039                         if $test -f /etc/kconfig; then
2040                                 osname=isc
2041                                 if test "$lns" = "ln -s"; then
2042                                         osvers=4
2043                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2044                                         osvers=3
2045                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2046                                         osvers=2
2047                                 fi
2048                         fi
2049                         ;;
2050                 pc*)
2051                         if test -n "$DJGPP"; then
2052                                 osname=dos
2053                                 osvers=djgpp
2054                         fi
2055                         ;;
2056                 esac
2057
2058                 case "$1" in
2059                 aix) osname=aix
2060                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2061                         case "$tmp" in
2062                         'not found') osvers="$4"."$3" ;;
2063                         '<3240'|'<>3240') osvers=3.2.0 ;;
2064                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2065                         '=3250'|'>3250') osvers=3.2.5 ;;
2066                         *) osvers=$tmp;;
2067                         esac
2068                         ;;
2069                 *dc.osx) osname=dcosx
2070                         osvers="$3"
2071                         ;;
2072                 dnix) osname=dnix
2073                         osvers="$3"
2074                         ;;
2075                 domainos) osname=apollo
2076                         osvers="$3"
2077                         ;;
2078                 dgux) osname=dgux 
2079                         osvers="$3"
2080                         ;;
2081                 dynixptx*) osname=dynixptx
2082                         osvers="$3"
2083                         ;;
2084                 freebsd) osname=freebsd 
2085                         osvers="$3" ;;
2086                 genix) osname=genix ;;
2087                 hp*) osname=hpux 
2088                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2089                         ;;
2090                 irix*) osname=irix
2091                         case "$3" in
2092                         4*) osvers=4 ;;
2093                         5*) osvers=5 ;;
2094                         *)      osvers="$3" ;;
2095                         esac
2096                         ;;
2097                 linux) osname=linux
2098                         case "$3" in
2099                         *)      osvers="$3" ;;
2100                         esac
2101                         ;;
2102                 MiNT) osname=mint
2103                         ;;
2104                 netbsd*) osname=netbsd
2105                         osvers="$3"
2106                         ;;
2107                 news-os) osvers="$3"
2108                         case "$3" in
2109                         4*) osname=newsos4 ;;
2110                         *) osname=newsos ;;
2111                         esac
2112                         ;;
2113                 bsd386) osname=bsd386
2114                         osvers=`$uname -r`
2115                         ;;
2116                 POSIX-BC | posix-bc ) osname=posix-bc
2117                         osvers="$3"
2118                         ;;
2119                 powerux | power_ux | powermax_os | powermaxos | \
2120                 powerunix | power_unix) osname=powerux
2121                         osvers="$3"
2122                         ;;
2123                 next*) osname=next ;;
2124                 solaris) osname=solaris
2125                         case "$3" in
2126                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2127                         *)      osvers="$3" ;;
2128                         esac
2129                         ;;
2130                 sunos) osname=sunos
2131                         case "$3" in
2132                         5*) osname=solaris
2133                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2134                         *)      osvers="$3" ;;
2135                         esac
2136                         ;;
2137                 titanos) osname=titanos
2138                         case "$3" in
2139                         1*) osvers=1 ;;
2140                         2*) osvers=2 ;;
2141                         3*) osvers=3 ;;
2142                         4*) osvers=4 ;;
2143                         *)      osvers="$3" ;;
2144                         esac
2145                         ;;
2146                 ultrix) osname=ultrix
2147                         osvers="$3"
2148                         ;;
2149                 osf1|mls+)      case "$5" in
2150                                 alpha)
2151                                         osname=dec_osf
2152                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2153                                         ;;
2154                         hp*)    osname=hp_osf1  ;;
2155                         mips)   osname=mips_osf1 ;;
2156                         esac
2157                         ;;
2158                 uts) osname=uts 
2159                         osvers="$3"
2160                         ;;
2161                 qnx) osname=qnx
2162                         osvers="$4"
2163                         ;;
2164                 $2) case "$osname" in
2165                         *isc*) ;;
2166                         *freebsd*) ;;
2167                         svr*)
2168                                 : svr4.x or possibly later
2169                                 case "svr$3" in 
2170                                 ${osname}*)
2171                                         osname=svr$3
2172                                         osvers=$4
2173                                         ;;
2174                                 esac
2175                                 case "$osname" in
2176                                 svr4.0)
2177                                         : Check for ESIX
2178                                         if test -f /stand/boot ; then
2179                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2180                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2181                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2182                                                         if test -n "$isesix"; then
2183                                                                 osname=esix4
2184                                                         fi
2185                                                 fi
2186                                         fi
2187                                         ;;
2188                                 esac
2189                                 ;;
2190                         *)      if test -f /etc/systemid; then
2191                                         osname=sco
2192                                         set `echo $3 | $sed 's/\./ /g'` $4
2193                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2194                                                 osvers=$1.$2.$3
2195                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2196                                                 osvers=$1.$2
2197                                         elif $test -f $src/hints/sco_$1.sh; then
2198                                                 osvers=$1
2199                                         fi
2200                                 else
2201                                         case "$osname" in
2202                                         '') : Still unknown.  Probably a generic Sys V.
2203                                                 osname="sysv"
2204                                                 osvers="$3"
2205                                                 ;;
2206                                         esac
2207                                 fi
2208                                 ;;
2209                         esac
2210                         ;;
2211                 *)      case "$osname" in
2212                         '') : Still unknown.  Probably a generic BSD.
2213                                 osname="$1"
2214                                 osvers="$3"
2215                                 ;;
2216                         esac
2217                         ;;
2218                 esac
2219         else
2220                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2221                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2222                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2223                                 osname=news_os
2224                         fi
2225                         $rm -f UU/kernel.what
2226                 elif test -d c:/.; then
2227                         set X $myuname
2228                         osname=os2
2229                         osvers="$5"
2230                 fi
2231         fi
2232         
2233         : Now look for a hint file osname_osvers, unless one has been
2234         : specified already.
2235         case "$hintfile" in
2236         ''|' ')
2237                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2238                 : Also try without trailing minor version numbers.
2239                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2240                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2241                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2242                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2243                 case "$file" in
2244                 '') dflt=none ;;
2245                 *)  case "$osvers" in
2246                         '') dflt=$file
2247                                 ;;
2248                         *)  if $test -f $src/hints/$file.sh ; then
2249                                         dflt=$file
2250                                 elif $test -f $src/hints/$xfile.sh ; then
2251                                         dflt=$xfile
2252                                 elif $test -f $src/hints/$xxfile.sh ; then
2253                                         dflt=$xxfile
2254                                 elif $test -f $src/hints/$xxxfile.sh ; then
2255                                         dflt=$xxxfile
2256                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2257                                         dflt=$xxxxfile
2258                                 elif $test -f "$src/hints/${osname}.sh" ; then
2259                                         dflt="${osname}"
2260                                 else
2261                                         dflt=none
2262                                 fi
2263                                 ;;
2264                         esac
2265                         ;;
2266                 esac
2267                 if $test -f Policy.sh ; then
2268                         case "$dflt" in
2269                         *Policy*) ;;
2270                         none) dflt="Policy" ;;
2271                         *) dflt="Policy $dflt" ;;
2272                         esac
2273                 fi
2274                 ;;
2275         *)
2276                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2277                 ;;
2278         esac
2279
2280         if $test -f Policy.sh ; then
2281                 $cat <<EOM
2282
2283 There's also a Policy hint file available, which should make the
2284 site-specific (policy) questions easier to answer.
2285 EOM
2286
2287         fi
2288
2289         $cat <<EOM
2290
2291 You may give one or more space-separated answers, or "none" if appropriate.
2292 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2293 is a good thing.  DO NOT give a wrong version.
2294
2295 EOM
2296
2297         rp="Which of these apply, if any?"
2298         . UU/myread
2299         tans=$ans
2300         for file in $tans; do
2301                 if $test X$file = XPolicy -a -f Policy.sh; then
2302                         . Policy.sh
2303                         $cat Policy.sh >> UU/config.sh
2304                 elif $test -f $src/hints/$file.sh; then
2305                         . $src/hints/$file.sh
2306                         $cat $src/hints/$file.sh >> UU/config.sh
2307                 elif $test X$tans = X -o X$tans = Xnone ; then
2308                         : nothing
2309                 else
2310                         : Give one chance to correct a possible typo.
2311                         echo "$file.sh does not exist"
2312                         dflt=$file
2313                         rp="hint to use instead?"
2314                         . UU/myread
2315                         for file in $ans; do
2316                                 if $test -f "$src/hints/$file.sh"; then
2317                                         . $src/hints/$file.sh
2318                                         $cat $src/hints/$file.sh >> UU/config.sh
2319                                 elif $test X$ans = X -o X$ans = Xnone ; then
2320                                         : nothing
2321                                 else
2322                                         echo "$file.sh does not exist -- ignored."
2323                                 fi
2324                         done
2325                 fi
2326         done
2327
2328         hint=recommended
2329         : Remember our hint file for later.
2330         if $test -f "$src/hints/$file.sh" ; then
2331                 hintfile="$file"
2332         else
2333                 hintfile=''
2334         fi
2335 fi
2336 cd UU
2337 ;;
2338 *)
2339         echo " "
2340         echo "Fetching default answers from $config_sh..." >&4
2341         tmp_n="$n"
2342         tmp_c="$c"
2343         cd ..
2344         cp $config_sh config.sh 2>/dev/null
2345         chmod +w config.sh
2346         . ./config.sh
2347         cd UU
2348         cp ../config.sh .
2349         n="$tmp_n"
2350         c="$tmp_c"
2351         hint=previous
2352         ;;
2353 esac
2354 test "$override" && . ./optdef.sh
2355 myuname="$newmyuname"
2356
2357 : Restore computed paths
2358 for file in $loclist $trylist; do
2359         eval $file="\$_$file"
2360 done
2361
2362 cat << EOM
2363
2364 Configure uses the operating system name and version to set some defaults.
2365 The default value is probably right if the name rings a bell. Otherwise,
2366 since spelling matters for me, either accept the default or answer "none"
2367 to leave it blank.
2368
2369 EOM
2370 case "$osname" in
2371         ''|' ')
2372                 case "$hintfile" in
2373                 ''|' '|none) dflt=none ;;
2374                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2375                 esac
2376                 ;;
2377         *) dflt="$osname" ;;
2378 esac
2379 rp="Operating system name?"
2380 . ./myread
2381 case "$ans" in
2382 none)  osname='' ;;
2383 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2384 esac
2385 echo " "
2386 case "$osvers" in
2387         ''|' ')
2388                 case "$hintfile" in
2389                 ''|' '|none) dflt=none ;;
2390                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2391                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2392                         case "$dflt" in
2393                         ''|' ') dflt=none ;;
2394                         esac
2395                         ;;
2396                 esac
2397                 ;;
2398         *) dflt="$osvers" ;;
2399 esac
2400 rp="Operating system version?"
2401 . ./myread
2402 case "$ans" in
2403 none)  osvers='' ;;
2404 *) osvers="$ans" ;;
2405 esac
2406
2407 : who configured the system
2408 cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
2409 cf_by=`(logname) 2>/dev/null`
2410 case "$cf_by" in
2411 "")
2412         cf_by=`(whoami) 2>/dev/null`
2413         case "$cf_by" in
2414         "") cf_by=unknown ;;
2415         esac ;;
2416 esac
2417
2418 : set up the script used to warn in case of inconsistency
2419 cat <<EOS >whoa
2420 $startsh
2421 EOS
2422 cat <<'EOSC' >>whoa
2423 dflt=y
2424 echo " "
2425 echo "*** WHOA THERE!!! ***" >&4
2426 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2427 rp="    Keep the $hint value?"
2428 . ./myread
2429 case "$ans" in
2430 y) td=$was; tu=$was;;
2431 esac
2432 EOSC
2433
2434 : function used to set $1 to $val
2435 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2436 case "$val$was" in
2437 $define$undef) . ./whoa; eval "$var=\$td";;
2438 $undef$define) . ./whoa; eval "$var=\$tu";;
2439 *) eval "$var=$val";;
2440 esac'
2441
2442 cat <<EOM
2443
2444 Perl can be built to take advantage of threads, on some systems.
2445 To do so, Configure must be run with -Dusethreads.
2446 (See README.threads for details.)
2447 EOM
2448 case "$usethreads" in
2449 $define|true|[yY]*)     dflt='y';;
2450 *) dflt='n';;
2451 esac
2452 rp='Build a threading Perl?'
2453 . ./myread
2454 case "$ans" in
2455 y|Y)    val="$define" ;;     
2456 *)      val="$undef" ;;
2457 esac
2458 set usethreads
2459 eval $setvar 
2460 : Look for a hint-file generated 'call-back-unit'.  Now that the
2461 : user has specified if a threading perl is to be built, we may need 
2462 : to set or change some other defaults.
2463 if $test -f usethreads.cbu; then
2464     . ./usethreads.cbu
2465 fi
2466 case "$d_oldpthreads" in
2467 '')     : Configure tests would be welcome here.  For now, assume undef.
2468         val="$undef" ;;
2469 *)      val="$d_oldpthreads" ;;
2470 esac
2471 set d_oldpthreads
2472 eval $setvar
2473
2474 cat <<EOM
2475
2476 Perl can be built so that multiple Perl interpreters can coexist
2477 within the same Perl executable.  To do so, Configure must be run with
2478 -Dusemultiplicity.
2479
2480 Normally you do not need this and you should answer no.
2481
2482 EOM
2483 case "$usemultiplicity" in
2484 $define|true|[yY]*)     dflt='y';;
2485 *) dflt='n';;
2486 esac
2487 rp='Build Perl for multiplicity?'
2488 . ./myread
2489 case "$ans" in
2490 y|Y)    val="$define" ;;     
2491 *)      val="$undef" ;;
2492 esac
2493 set usemultiplicity
2494 eval $setvar 
2495
2496 cat <<EOM
2497
2498 Perl can be built to take advantage of explicit 64-bit interfaces,
2499 on some systems.  To do so, Configure must be run with -Duse64bits.
2500
2501 If this doesn't make any sense to you, just accept the default 'n'.
2502 EOM
2503 case "$use64bits" in
2504 $define|true|[yY]*)     dflt='y';;
2505 *) dflt='n';;
2506 esac
2507 rp='Try to use explicit 64-bit interfaces, if available?'
2508 . ./myread
2509 case "$ans" in
2510 y|Y) 
2511         val="$define"
2512         ;;     
2513 *)      
2514         val="$undef"
2515         ;;
2516 esac
2517 set use64bits
2518 eval $setvar
2519
2520 archname64=''
2521
2522 : determine the architecture name
2523 echo " "
2524 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2525         tarch=`arch`"-$osname"
2526 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2527         if uname -m > tmparch 2>&1 ; then
2528                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2529                         -e 's/$/'"-$osname/" tmparch`
2530         else
2531                 tarch="$osname"
2532         fi
2533         $rm -f tmparch
2534 else
2535         tarch="$osname"
2536 fi
2537 case "$myarchname" in
2538 ''|"$tarch") ;;
2539 *)
2540         echo "(Your architecture name used to be $myarchname.)"
2541         archname=''
2542         ;;
2543 esac
2544 myarchname="$tarch"
2545 case "$archname" in
2546 '') dflt="$tarch";;
2547 *) dflt="$archname";;
2548 esac
2549 rp='What is your architecture name'
2550 . ./myread
2551 archname="$ans"
2552 case "$usethreads" in
2553 $define)
2554         echo "Threads selected." >&4
2555         case "$archname" in
2556         *-thread*) echo "...and architecture name already has -thread." >&4
2557                 ;;
2558         *)      archname="$archname-thread"
2559                 echo "...setting architecture name to $archname." >&4
2560                 ;;
2561         esac
2562         ;;
2563 esac
2564 case "$usemultiplicity" in
2565 $define)
2566         echo "Multiplicity selected." >&4
2567         case "$archname" in
2568         *-multi*) echo "...and architecture name already has -multi." >&4
2569                 ;;
2570         *)      archname="$archname-multi"
2571                 echo "...setting architecture name to $archname." >&4
2572                 ;;
2573         esac
2574         ;;
2575 esac
2576 case "$use64bits" in
2577 $define)
2578         echo "Explicit 64-bitness selected." >&4
2579         case "$archname64" in
2580         '')
2581                 ;;
2582         *)
2583                 case "$archname" in
2584                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2585                         ;;
2586                 *)      archname="$archname-$archname64"
2587                         echo "...setting architecture name to $archname." >&4
2588                         ;;
2589                 esac
2590                 ;;
2591         esac
2592 esac
2593
2594 : is AFS running?
2595 echo " "
2596 case "$afs" in
2597 $define|true)   afs=true ;;
2598 $undef|false)   afs=false ;;
2599 *)      if test -d /afs; then
2600                 afs=true
2601         else
2602                 afs=false
2603         fi
2604         ;;
2605 esac
2606 if $afs; then
2607         echo "AFS may be running... I'll be extra cautious then..." >&4
2608 else
2609         echo "AFS does not seem to be running..." >&4
2610 fi
2611
2612 : decide how portable to be.  Allow command line overrides.
2613 case "$d_portable" in
2614 "$undef") ;;
2615 *)      d_portable="$define" ;;
2616 esac
2617
2618 : set up shell script to do ~ expansion
2619 cat >filexp <<EOSS
2620 $startsh
2621 : expand filename
2622 case "\$1" in
2623  ~/*|~)
2624         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2625         ;;
2626  ~*)
2627         if $test -f /bin/csh; then
2628                 /bin/csh -f -c "glob \$1"
2629                 failed=\$?
2630                 echo ""
2631                 exit \$failed
2632         else
2633                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2634                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2635                 if $test ! -d "\$dir"; then
2636                         me=\`basename \$0\`
2637                         echo "\$me: can't locate home directory for: \$name" >&2
2638                         exit 1
2639                 fi
2640                 case "\$1" in
2641                 */*)
2642                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2643                         ;;
2644                 *)
2645                         echo \$dir
2646                         ;;
2647                 esac
2648         fi
2649         ;;
2650 *)
2651         echo \$1
2652         ;;
2653 esac
2654 EOSS
2655 chmod +x filexp
2656 $eunicefix filexp
2657
2658 : now set up to get a file name
2659 cat <<EOS >getfile
2660 $startsh
2661 EOS
2662 cat <<'EOSC' >>getfile
2663 tilde=''
2664 fullpath=''
2665 already=''
2666 skip=''
2667 none_ok=''
2668 exp_file=''
2669 nopath_ok=''
2670 orig_rp="$rp"
2671 orig_dflt="$dflt"
2672
2673 case "$fn" in
2674 *\(*)
2675         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2676         fn=`echo $fn | sed 's/(.*)//'`
2677         ;;
2678 esac
2679
2680 case "$fn" in
2681 *:*)
2682         loc_file=`expr $fn : '.*:\(.*\)'`
2683         fn=`expr $fn : '\(.*\):.*'`
2684         ;;
2685 esac
2686
2687 case "$fn" in
2688 *~*) tilde=true;;
2689 esac
2690 case "$fn" in
2691 */*) fullpath=true;;
2692 esac
2693 case "$fn" in
2694 *+*) skip=true;;
2695 esac
2696 case "$fn" in
2697 *n*) none_ok=true;;
2698 esac
2699 case "$fn" in
2700 *e*) exp_file=true;;
2701 esac
2702 case "$fn" in
2703 *p*) nopath_ok=true;;
2704 esac
2705
2706 case "$fn" in
2707 *f*) type='File';;
2708 *d*) type='Directory';;
2709 *l*) type='Locate';;
2710 esac
2711
2712 what="$type"
2713 case "$what" in
2714 Locate) what='File';;
2715 esac
2716
2717 case "$exp_file" in
2718 '')
2719         case "$d_portable" in
2720         "$define") ;;
2721         *) exp_file=true;;
2722         esac
2723         ;;
2724 esac
2725
2726 cd ..
2727 while test "$type"; do
2728         redo=''
2729         rp="$orig_rp"
2730         dflt="$orig_dflt"
2731         case "$tilde" in
2732         true) rp="$rp (~name ok)";;
2733         esac
2734         . UU/myread
2735         if test -f UU/getfile.ok && \
2736                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2737         then
2738                 value="$ans"
2739                 ansexp="$ans"
2740                 break
2741         fi
2742         case "$ans" in
2743         none)
2744                 value=''
2745                 ansexp=''
2746                 case "$none_ok" in
2747                 true) type='';;
2748                 esac
2749                 ;;
2750         *)
2751                 case "$tilde" in
2752                 '') value="$ans"
2753                         ansexp="$ans";;
2754                 *)
2755                         value=`UU/filexp $ans`
2756                         case $? in
2757                         0)
2758                                 if test "$ans" != "$value"; then
2759                                         echo "(That expands to $value on this system.)"
2760                                 fi
2761                                 ;;
2762                         *) value="$ans";;
2763                         esac
2764                         ansexp="$value"
2765                         case "$exp_file" in
2766                         '') value="$ans";;
2767                         esac
2768                         ;;
2769                 esac
2770                 case "$fullpath" in
2771                 true)
2772                         case "$ansexp" in
2773                         /*) value="$ansexp" ;;
2774                         *)
2775                                 redo=true
2776                                 case "$already" in
2777                                 true)
2778                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2779                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2780                                         ;;
2781                                 *)
2782                                 echo "Please give a full path name, starting with slash." >&4
2783                                         case "$tilde" in
2784                                         true)
2785                                 echo "Note that using ~name is ok provided it expands well." >&4
2786                                                 already=true
2787                                                 ;;
2788                                         esac
2789                                 esac
2790                                 ;;
2791                         esac
2792                         ;;
2793                 esac
2794                 case "$redo" in
2795                 '')
2796                         case "$type" in
2797                         File)
2798                                 if test -f "$ansexp"; then
2799                                         type=''
2800                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2801                                 then
2802                                         echo "($value is not a plain file, but that's ok.)"
2803                                         type=''
2804                                 fi
2805                                 ;;
2806                         Directory)
2807                                 if test -d "$ansexp"; then
2808                                         type=''
2809                                 fi
2810                                 ;;
2811                         Locate)
2812                                 if test -d "$ansexp"; then
2813                                         echo "(Looking for $loc_file in directory $value.)"
2814                                         value="$value/$loc_file"
2815                                         ansexp="$ansexp/$loc_file"
2816                                 fi
2817                                 if test -f "$ansexp"; then
2818                                         type=''
2819                                 fi
2820                                 case "$nopath_ok" in
2821                                 true)   case "$value" in
2822                                         */*) ;;
2823                                         *)      echo "Assuming $value will be in people's path."
2824                                                 type=''
2825                                                 ;;
2826                                         esac
2827                                         ;;
2828                                 esac
2829                                 ;;
2830                         esac
2831
2832                         case "$skip" in
2833                         true) type='';
2834                         esac
2835
2836                         case "$type" in
2837                         '') ;;
2838                         *)
2839                                 if test "$fastread" = yes; then
2840                                         dflt=y
2841                                 else
2842                                         dflt=n
2843                                 fi
2844                                 rp="$what $value doesn't exist.  Use that name anyway?"
2845                                 . UU/myread
2846                                 dflt=''
2847                                 case "$ans" in
2848                                 y*) type='';;
2849                                 *) echo " ";;
2850                                 esac
2851                                 ;;
2852                         esac
2853                         ;;
2854                 esac
2855                 ;;
2856         esac
2857 done
2858 cd UU
2859 ans="$value"
2860 rp="$orig_rp"
2861 dflt="$orig_dflt"
2862 rm -f getfile.ok
2863 EOSC
2864
2865 : determine root of directory hierarchy where package will be installed.
2866 case "$prefix" in
2867 '')
2868         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2869         ;;
2870 *)
2871         dflt="$prefix"
2872         ;;
2873 esac
2874 $cat <<EOM
2875
2876 By default, $package will be installed in $dflt/bin, manual
2877 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2878 all installation directories. Typically set to /usr/local, but you
2879 may choose /usr if you wish to install $package among your system
2880 binaries. If you wish to have binaries under /bin but manual pages
2881 under /usr/local/man, that's ok: you will be prompted separately
2882 for each of the installation directories, the prefix being only used
2883 to set the defaults.
2884
2885 EOM
2886 fn=d~
2887 rp='Installation prefix to use?'
2888 . ./getfile
2889 oldprefix=''
2890 case "$prefix" in
2891 '') ;;
2892 *)
2893         case "$ans" in
2894         "$prefix") ;;
2895         *) oldprefix="$prefix";;
2896         esac
2897         ;;
2898 esac
2899 prefix="$ans"
2900 prefixexp="$ansexp"
2901
2902 : set the prefixit variable, to compute a suitable default value
2903 prefixit='case "$3" in
2904 ""|none)
2905         case "$oldprefix" in
2906         "") eval "$1=\"\$$2\"";;
2907         *)
2908                 case "$3" in
2909                 "") eval "$1=";;
2910                 none)
2911                         eval "tp=\"\$$2\"";
2912                         case "$tp" in
2913                         ""|" ") eval "$1=\"\$$2\"";;
2914                         *) eval "$1=";;
2915                         esac;;
2916                 esac;;
2917         esac;;
2918 *)
2919         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2920         case "$tp" in
2921         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2922         /*-$oldprefix/*|\~*-$oldprefix/*)
2923                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2924         *) eval "$1=\"\$$2\"";;
2925         esac;;
2926 esac'
2927
2928 : set the base revision
2929 baserev=5.0
2930
2931 : get the patchlevel
2932 echo " "
2933 echo "Getting the current patchlevel..." >&4
2934 if $test -r $rsrc/patchlevel.h;then
2935         patchlevel=`awk '/define[       ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
2936         subversion=`awk '/define[       ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
2937 else
2938         patchlevel=0
2939         subversion=0
2940 fi
2941 $echo $n "(You have $package" $c
2942 case "$package" in
2943 "*$baserev")    ;;
2944 *)              $echo $n " $baserev" $c ;;
2945 esac
2946 $echo $n " patchlevel $patchlevel" $c
2947 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
2948 echo ".)"
2949
2950 if test 0 -eq "$subversion"; then
2951         version=`LC_ALL=C; export LC_ALL; \
2952                  echo $baserev $patchlevel | \
2953                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2954 else
2955         version=`LC_ALL=C; export LC_ALL; \
2956                  echo $baserev $patchlevel $subversion | \
2957                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
2958 fi
2959 : Figure out perl API version.  Perhaps this should be in patchlevel.h
2960 if test "$subversion" -lt 50; then
2961         apiversion=`LC_ALL=C; export LC_ALL; \
2962                  echo $baserev $patchlevel | \
2963                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
2964 else
2965         apiversion="$version"
2966 fi
2967
2968 : determine where private library files go
2969 : Usual default is /usr/local/lib/perl5/$version.
2970 : Also allow things like /opt/perl/lib/$version, since 
2971 : /opt/perl/lib/perl5... would be redundant.
2972 case "$prefix" in
2973 *perl*) set dflt privlib lib/$version ;;
2974 *)       set dflt privlib lib/$package/$version ;;
2975 esac
2976 eval $prefixit
2977 $cat <<EOM
2978
2979 There are some auxiliary files for $package that need to be put into a
2980 private library directory that is accessible by everyone.
2981
2982 EOM
2983 fn=d~+
2984 rp='Pathname where the private library files will reside?'
2985 . ./getfile
2986 if $test "X$privlibexp" != "X$ansexp"; then
2987         installprivlib=''
2988 fi
2989 privlib="$ans"
2990 privlibexp="$ansexp"
2991 if $afs; then
2992         $cat <<EOM
2993
2994 Since you are running AFS, I need to distinguish the directory in which
2995 private files reside from the directory in which they are installed (and from
2996 which they are presumably copied to the former directory by occult means).
2997
2998 EOM
2999         case "$installprivlib" in
3000         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3001         *) dflt="$installprivlib";;
3002         esac
3003         fn=de~
3004         rp='Where will private files be installed?'
3005         . ./getfile
3006         installprivlib="$ans"
3007 else
3008         installprivlib="$privlibexp"
3009 fi
3010
3011 : set the prefixup variable, to restore leading tilda escape
3012 prefixup='case "$prefixexp" in
3013 "$prefix") ;;
3014 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3015 esac'
3016
3017 : determine where public architecture dependent libraries go
3018 set archlib archlib
3019 eval $prefixit
3020 : privlib default is /usr/local/lib/$package/$version
3021 : archlib default is /usr/local/lib/$package/$version/$archname
3022 : privlib may have an optional trailing /share.
3023 tdflt=`echo $privlib | $sed 's,/share$,,'`
3024 tdflt=$tdflt/$archname
3025 case "$archlib" in
3026 '')     dflt=$tdflt
3027         ;;
3028 *)      dflt="$archlib"
3029     ;;
3030 esac
3031 cat <<EOM
3032
3033 $spackage contains architecture-dependent library files.  If you are
3034 sharing libraries in a heterogeneous environment, you might store
3035 these files in a separate location.  Otherwise, you can just include
3036 them with the rest of the public library files.
3037
3038 EOM
3039 fn=d+~
3040 rp='Where do you want to put the public architecture-dependent libraries?'
3041 . ./getfile
3042 archlib="$ans"
3043 archlibexp="$ansexp"
3044
3045 if $afs; then
3046         $cat <<EOM
3047
3048 Since you are running AFS, I need to distinguish the directory in
3049 which architecture-dependent library files reside from the directory
3050 in which they are installed (and from which they are presumably copied
3051 to the former directory by occult means).
3052
3053 EOM
3054         case "$installarchlib" in
3055         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3056         *) dflt="$installarchlib";;
3057         esac
3058         fn=de~
3059         rp='Where will architecture-dependent library files be installed?'
3060         . ./getfile
3061         installarchlib="$ans"
3062 else
3063         installarchlib="$archlibexp"
3064 fi
3065 if $test X"$archlib" = X"$privlib"; then
3066         d_archlib="$undef"
3067 else
3068         d_archlib="$define"
3069 fi
3070
3071 : make some quick guesses about what we are up against
3072 echo " "
3073 $echo $n "Hmm...  $c"
3074 echo exit 1 >bsd
3075 echo exit 1 >usg
3076 echo exit 1 >v7
3077 echo exit 1 >osf1
3078 echo exit 1 >eunice
3079 echo exit 1 >xenix
3080 echo exit 1 >venix
3081 echo exit 1 >os2
3082 d_bsd="$undef"
3083 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3084 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3085 then
3086         echo "Looks kind of like an OSF/1 system, but we'll see..."
3087         echo exit 0 >osf1
3088 elif test `echo abc | tr a-z A-Z` = Abc ; then
3089         xxx=`./loc addbib blurfl $pth`
3090         if $test -f $xxx; then
3091         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3092                 echo exit 0 >bsd
3093                 echo exit 0 >usg
3094         else
3095                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3096                         echo "Looks kind of like an extended USG system, but we'll see..."
3097                 else
3098                         echo "Looks kind of like a USG system, but we'll see..."
3099                 fi
3100                 echo exit 0 >usg
3101         fi
3102 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3103         echo "Looks kind of like a BSD system, but we'll see..."
3104         d_bsd="$define"
3105         echo exit 0 >bsd
3106 else
3107         echo "Looks kind of like a Version 7 system, but we'll see..."
3108         echo exit 0 >v7
3109 fi
3110 case "$eunicefix" in
3111 *unixtovms*)
3112         $cat <<'EOI'
3113 There is, however, a strange, musty smell in the air that reminds me of
3114 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3115 EOI
3116         echo exit 0 >eunice
3117         d_eunice="$define"
3118 : it so happens the Eunice I know will not run shell scripts in Unix format
3119         ;;
3120 *)
3121         echo " "
3122         echo "Congratulations.  You aren't running Eunice."
3123         d_eunice="$undef"
3124         ;;
3125 esac
3126 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3127 case "$p_" in
3128 :) ;;
3129 *)
3130         $cat <<'EOI'
3131 I have the feeling something is not exactly right, however...don't tell me...
3132 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3133 EOI
3134         echo exit 0 >os2
3135         ;;
3136 esac
3137 if test -f /xenix; then
3138         echo "Actually, this looks more like a XENIX system..."
3139         echo exit 0 >xenix
3140         d_xenix="$define"
3141 else
3142         echo " "
3143         echo "It's not Xenix..."
3144         d_xenix="$undef"
3145 fi
3146 chmod +x xenix
3147 $eunicefix xenix
3148 if test -f /venix; then
3149         echo "Actually, this looks more like a VENIX system..."
3150         echo exit 0 >venix
3151 else
3152         echo " "
3153         if ./xenix; then
3154                 : null
3155         else
3156                 echo "Nor is it Venix..."
3157         fi
3158 fi
3159 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3160 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3161 $rm -f foo
3162
3163 : see if setuid scripts can be secure
3164 $cat <<EOM
3165
3166 Some kernels have a bug that prevents setuid #! scripts from being
3167 secure.  Some sites have disabled setuid #! scripts because of this.
3168
3169 First let's decide if your kernel supports secure setuid #! scripts.
3170 (If setuid #! scripts would be secure but have been disabled anyway,
3171 don't say that they are secure if asked.)
3172
3173 EOM
3174
3175 val="$undef"
3176 if $test -d /dev/fd; then
3177         echo "#!$ls" >reflect
3178         chmod +x,u+s reflect
3179         ./reflect >flect 2>&1
3180         if $contains "/dev/fd" flect >/dev/null; then
3181                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3182                 val="$define"
3183         else
3184                 $cat <<EOM
3185 If you are not sure if they are secure, I can check but I'll need a
3186 username and password different from the one you are using right now.
3187 If you don't have such a username or don't want me to test, simply
3188 enter 'none'.
3189
3190 EOM
3191                 rp='Other username to test security of setuid scripts with?'
3192                 dflt='none'
3193                 . ./myread
3194                 case "$ans" in
3195                 n|none)
3196                         case "$d_suidsafe" in
3197                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3198                                 dflt=n;;
3199                         "$undef")
3200                                 echo "Well, the $hint value is *not* secure." >&4
3201                                 dflt=n;;
3202                         *)      echo "Well, the $hint value *is* secure." >&4
3203                                 dflt=y;;
3204                         esac
3205                         ;;
3206                 *)
3207                         $rm -f reflect flect
3208                         echo "#!$ls" >reflect
3209                         chmod +x,u+s reflect
3210                         echo >flect
3211                         chmod a+w flect
3212                         echo '"su" will (probably) prompt you for '"$ans's password."
3213                         su $ans -c './reflect >flect'
3214                         if $contains "/dev/fd" flect >/dev/null; then
3215                                 echo "Okay, it looks like setuid scripts are secure." >&4
3216                                 dflt=y
3217                         else
3218                                 echo "I don't think setuid scripts are secure." >&4
3219                                 dflt=n
3220                         fi
3221                         ;;
3222                 esac
3223                 rp='Does your kernel have *secure* setuid scripts?'
3224                 . ./myread
3225                 case "$ans" in
3226                 [yY]*)  val="$define";;
3227                 *)      val="$undef";;
3228                 esac
3229         fi
3230 else
3231         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3232         echo "(That's for file descriptors, not floppy disks.)"
3233         val="$undef"
3234 fi
3235 set d_suidsafe
3236 eval $setvar
3237
3238 $rm -f reflect flect
3239
3240 : now see if they want to do setuid emulation
3241 echo " "
3242 val="$undef"
3243 case "$d_suidsafe" in
3244 "$define")
3245         val="$undef"
3246         echo "No need to emulate SUID scripts since they are secure here." >& 4
3247         ;;
3248 *)
3249         $cat <<EOM
3250 Some systems have disabled setuid scripts, especially systems where
3251 setuid scripts cannot be secure.  On systems where setuid scripts have
3252 been disabled, the setuid/setgid bits on scripts are currently
3253 useless.  It is possible for $package to detect those bits and emulate
3254 setuid/setgid in a secure fashion.  This emulation will only work if
3255 setuid scripts have been disabled in your kernel.
3256
3257 EOM
3258         case "$d_dosuid" in
3259         "$define") dflt=y ;;
3260         *) dflt=n ;;
3261         esac
3262         rp="Do you want to do setuid/setgid emulation?"
3263         . ./myread
3264         case "$ans" in
3265         [yY]*)  val="$define";;
3266         *)      val="$undef";;
3267         esac
3268         ;;
3269 esac
3270 set d_dosuid
3271 eval $setvar
3272
3273 : determine where manual pages are on this system
3274 echo " "
3275 case "$sysman" in
3276 '') 
3277         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3278         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3279         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3280         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3281         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3282         sysman=`./loc . /usr/man/man1 $syspath`
3283         ;;
3284 esac
3285 if $test -d "$sysman"; then
3286         echo "System manual is in $sysman." >&4
3287 else
3288         echo "Could not find manual pages in source form." >&4
3289 fi
3290
3291 : see what memory models we can support
3292 case "$models" in
3293 '')
3294         $cat >pdp11.c <<'EOP'
3295 main() {
3296 #ifdef pdp11
3297         exit(0);
3298 #else
3299         exit(1);
3300 #endif
3301 }
3302 EOP
3303         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3304         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3305                 dflt='unsplit split'
3306         else
3307                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3308                 case "$tans" in
3309                 X) dflt='none';;
3310                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3311                                 dflt='small'
3312                         else
3313                                 dflt=''
3314                         fi
3315                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3316                                 dflt="$dflt medium"
3317                         fi
3318                         if $test -d /lib/large || $test -d /usr/lib/large; then
3319                                 dflt="$dflt large"
3320                         fi
3321                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3322                                 dflt="$dflt huge"
3323                         fi
3324                 esac
3325         fi;;
3326 *) dflt="$models";;
3327 esac
3328 $cat <<EOM
3329  
3330 Some systems have different model sizes.  On most systems they are called
3331 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3332 split.  If your system doesn't support different memory models, say "none".
3333 If you wish to force everything to one memory model, say "none" here and
3334 put the appropriate flags later when it asks you for other cc and ld flags.
3335 Venix systems may wish to put "none" and let the compiler figure things out.
3336 (In the following question multiple model names should be space separated.)
3337
3338 The default for most systems is "none".
3339
3340 EOM
3341 rp="Which memory models are supported?"
3342 . ./myread
3343 models="$ans"
3344
3345 case "$models" in
3346 none)
3347         small=''
3348         medium=''
3349         large=''
3350         huge=''
3351         unsplit=''
3352         split=''
3353         ;;
3354 *split)
3355         case "$split" in
3356         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3357                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3358                         dflt='-i'
3359                 else
3360                         dflt='none'
3361                 fi;;
3362         *) dflt="$split";;
3363         esac
3364         rp="What flag indicates separate I and D space?"
3365         . ./myread
3366         tans="$ans"
3367         case "$tans" in
3368         none) tans='';;
3369         esac
3370         split="$tans"
3371         unsplit='';;
3372 *large*|*small*|*medium*|*huge*)
3373         case "$models" in
3374         *large*)
3375                 case "$large" in
3376                 '') dflt='-Ml';;
3377                 *) dflt="$large";;
3378                 esac
3379         rp="What flag indicates large model?"
3380         . ./myread
3381         tans="$ans"
3382         case "$tans" in
3383         none) tans='';
3384         esac
3385         large="$tans";;
3386         *) large='';;
3387         esac
3388         case "$models" in
3389         *huge*) case "$huge" in
3390                 '') dflt='-Mh';;
3391                 *) dflt="$huge";;
3392                 esac
3393                 rp="What flag indicates huge model?"
3394                 . ./myread
3395                 tans="$ans"
3396                 case "$tans" in
3397                 none) tans='';
3398                 esac
3399                 huge="$tans";;
3400         *) huge="$large";;
3401         esac
3402         case "$models" in
3403         *medium*) case "$medium" in
3404                 '') dflt='-Mm';;
3405                 *) dflt="$medium";;
3406                 esac
3407                 rp="What flag indicates medium model?"
3408                 . ./myread
3409                 tans="$ans"
3410                 case "$tans" in
3411                 none) tans='';
3412                 esac
3413                 medium="$tans";;
3414         *) medium="$large";;
3415         esac
3416         case "$models" in
3417         *small*) case "$small" in
3418                 '') dflt='none';;
3419                 *) dflt="$small";;
3420                 esac
3421                 rp="What flag indicates small model?"
3422                 . ./myread
3423                 tans="$ans"
3424                 case "$tans" in
3425                 none) tans='';
3426                 esac
3427                 small="$tans";;
3428         *) small='';;
3429         esac
3430         ;;
3431 *)
3432         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3433         ;;
3434 esac
3435 $rm -f pdp11.* pdp11
3436
3437 : see if we need a special compiler
3438 echo " "
3439 if ./usg; then
3440         case "$cc" in
3441         '') case "$Mcc" in
3442                 /*) dflt='Mcc';;
3443                 *) case "$large" in
3444                         -M*) dflt='cc';;
3445                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3446                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3447                                                 dflt='cc'
3448                                         else
3449                                                 dflt='cc -M'
3450                                         fi
3451                                 else
3452                                         dflt='cc'
3453                                 fi;;
3454                         esac;;
3455                 esac;;
3456         *)  dflt="$cc";;
3457         esac
3458         case "$dflt" in
3459         *M*)    $cat <<'EOM'
3460 On some older systems the default C compiler will not resolve multiple global
3461 references that happen to have the same name.  On some such systems the "Mcc"
3462 command may be used to force these to be resolved.  On other systems a "cc -M"
3463 command is required.  (Note that the -M flag on other systems indicates a
3464 memory model to use!) If you have the Gnu C compiler, you might wish to use
3465 that instead.
3466
3467 EOM
3468         ;;
3469         esac
3470         rp="Use which C compiler?"
3471         . ./myread
3472         cc="$ans"
3473 else
3474         case "$cc" in
3475         '') dflt=cc;;
3476         *) dflt="$cc";;
3477         esac
3478         rp="Use which C compiler?"
3479         . ./myread
3480         cc="$ans"
3481 fi
3482 : Look for a hint-file generated 'call-back-unit'.  Now that the
3483 : user has specified the compiler, we may need to set or change some
3484 : other defaults.
3485 if $test -f cc.cbu; then
3486     . ./cc.cbu
3487 fi
3488 echo " "
3489 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3490 $cat >gccvers.c <<EOM
3491 #include <stdio.h>
3492 int main() {
3493 #ifdef __GNUC__
3494 #ifdef __VERSION__
3495         printf("%s\n", __VERSION__);
3496 #else
3497         printf("%s\n", "1");
3498 #endif
3499 #endif
3500         exit(0);
3501 }
3502 EOM
3503 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3504         gccversion=`./gccvers`
3505         case "$gccversion" in
3506         '') echo "You are not using GNU cc." ;;
3507         *)  echo "You are using GNU cc $gccversion." ;;
3508         esac
3509 else
3510         echo " "
3511         echo "*** WHOA THERE!!! ***" >&4
3512         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3513         case "$knowitall" in
3514         '')
3515         echo "    You'd better start hunting for one and let me know about it." >&4
3516                 exit 1
3517                 ;;
3518         esac
3519 fi
3520 $rm -f gccvers*
3521 case "$gccversion" in
3522 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3523 esac
3524
3525 : What should the include directory be ?
3526 echo " "
3527 $echo $n "Hmm...  $c"
3528 dflt='/usr/include'
3529 incpath=''
3530 mips_type=''
3531 if $test -f /bin/mips && /bin/mips; then
3532         echo "Looks like a MIPS system..."
3533         $cat >usr.c <<'EOCP'
3534 #ifdef SYSTYPE_BSD43
3535 /bsd43
3536 #endif
3537 EOCP
3538         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3539                 dflt='/bsd43/usr/include'
3540                 incpath='/bsd43'
3541                 mips_type='BSD 4.3'
3542         else
3543                 mips_type='System V'
3544         fi
3545         $rm -f usr.c usr.out
3546         echo "and you're compiling with the $mips_type compiler and libraries."
3547         xxx_prompt=y
3548         echo "exit 0" >mips
3549 else
3550         echo "Doesn't look like a MIPS system."
3551         xxx_prompt=n
3552         echo "exit 1" >mips
3553 fi
3554 chmod +x mips
3555 $eunicefix mips
3556 case "$usrinc" in
3557 '') ;;
3558 *) dflt="$usrinc";;
3559 esac
3560 case "$xxx_prompt" in
3561 y)      fn=d/
3562         echo " "
3563         rp='Where are the include files you want to use?'
3564         . ./getfile
3565         usrinc="$ans"
3566         ;;
3567 *)      usrinc="$dflt"
3568         ;;
3569 esac
3570
3571 : see how we invoke the C preprocessor
3572 echo " "
3573 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3574 cat <<'EOT' >testcpp.c
3575 #define ABC abc
3576 #define XYZ xyz
3577 ABC.XYZ
3578 EOT
3579 cd ..
3580 if test ! -f cppstdin; then
3581         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3582 else
3583         echo "Keeping your $hint cppstdin wrapper."
3584 fi
3585 chmod 755 cppstdin
3586 wrapper=`pwd`/cppstdin
3587 ok='false'
3588 cd UU
3589
3590 if $test "X$cppstdin" != "X" && \
3591         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3592         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3593 then
3594         echo "You used to use $cppstdin $cppminus so we'll use that again."
3595         case "$cpprun" in
3596         '') echo "But let's see if we can live without a wrapper..." ;;
3597         *)
3598                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3599                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3600                 then
3601                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3602                         ok='true'
3603                 else
3604                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3605                 fi
3606                 ;;
3607         esac
3608 else
3609         case "$cppstdin" in
3610         '') ;;
3611         *)
3612                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3613                 ;;
3614         esac
3615 fi
3616
3617 if $ok; then
3618         : nothing
3619 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3620         $cc -E <testcpp.c >testcpp.out 2>&1; \
3621         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3622         echo "Yup, it does."
3623         x_cpp="$cc -E"
3624         x_minus='';
3625 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3626         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3627         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3628         echo "Yup, it does."
3629         x_cpp="$cc -E"
3630         x_minus='-';
3631 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3632         $cc -P <testcpp.c >testcpp.out 2>&1; \
3633         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3634         echo "Yipee, that works!"
3635         x_cpp="$cc -P"
3636         x_minus='';
3637 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3638         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3639         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3640         echo "At long last!"
3641         x_cpp="$cc -P"
3642         x_minus='-';
3643 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3644         $cpp <testcpp.c >testcpp.out 2>&1; \
3645         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3646         echo "It works!"
3647         x_cpp="$cpp"
3648         x_minus='';
3649 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3650         $cpp - <testcpp.c >testcpp.out 2>&1; \
3651         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3652         echo "Hooray, it works!  I was beginning to wonder."
3653         x_cpp="$cpp"
3654         x_minus='-';
3655 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3656         $wrapper <testcpp.c >testcpp.out 2>&1; \
3657         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3658         x_cpp="$wrapper"
3659         x_minus=''
3660         echo "Eureka!"
3661 else
3662         dflt=''
3663         rp="No dice.  I can't find a C preprocessor.  Name one:"
3664         . ./myread
3665         x_cpp="$ans"
3666         x_minus=''
3667         $x_cpp <testcpp.c >testcpp.out 2>&1
3668         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3669                 echo "OK, that will do." >&4
3670         else
3671 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3672                 exit 1
3673         fi
3674 fi
3675
3676 case "$ok" in
3677 false)
3678         cppstdin="$x_cpp"
3679         cppminus="$x_minus"
3680         cpprun="$x_cpp"
3681         cpplast="$x_minus"
3682         set X $x_cpp
3683         shift
3684         case "$1" in
3685         "$cpp")
3686                 echo "Perhaps can we force $cc -E using a wrapper..."
3687                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3688                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3689                 then
3690                         echo "Yup, we can."
3691                         cppstdin="$wrapper"
3692                         cppminus='';
3693                 else
3694                         echo "Nope, we'll have to live without it..."
3695                 fi
3696                 ;;
3697         esac
3698         case "$cpprun" in
3699         "$wrapper")
3700                 cpprun=''
3701                 cpplast=''
3702                 ;;
3703         esac
3704         ;;
3705 esac
3706
3707 case "$cppstdin" in
3708 "$wrapper") ;;
3709 *) $rm -f $wrapper;;
3710 esac
3711 $rm -f testcpp.c testcpp.out
3712
3713 : Set private lib path
3714 case "$plibpth" in
3715 '') if ./mips; then
3716                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3717         fi;;
3718 esac
3719 case "$libpth" in
3720 ' ') dlist='';;
3721 '') dlist="$loclibpth $plibpth $glibpth";;
3722 *) dlist="$libpth";;
3723 esac
3724
3725 : Now check and see which directories actually exist, avoiding duplicates
3726 libpth=''
3727 for xxx in $dlist
3728 do
3729     if $test -d $xxx; then
3730                 case " $libpth " in
3731                 *" $xxx "*) ;;
3732                 *) libpth="$libpth $xxx";;
3733                 esac
3734     fi
3735 done
3736 $cat <<'EOM'
3737
3738 Some systems have incompatible or broken versions of libraries.  Among
3739 the directories listed in the question below, please remove any you
3740 know not to be holding relevant libraries, and add any that are needed.
3741 Say "none" for none.
3742
3743 EOM
3744 case "$libpth" in
3745 '') dflt='none';;
3746 *)
3747         set X $libpth
3748         shift
3749         dflt=${1+"$@"}
3750         ;;
3751 esac
3752 rp="Directories to use for library searches?"
3753 . ./myread
3754 case "$ans" in
3755 none) libpth=' ';;
3756 *) libpth="$ans";;
3757 esac
3758
3759 : compute shared library extension
3760 case "$so" in
3761 '')
3762         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3763                 dflt='sl'
3764         else
3765                 dflt='so'
3766         fi
3767         ;;
3768 *) dflt="$so";;
3769 esac
3770 $cat <<EOM
3771
3772 On some systems, shared libraries may be available.  Answer 'none' if
3773 you want to suppress searching of shared libraries for the remaining
3774 of this configuration.
3775
3776 EOM
3777 rp='What is the file extension used for shared libraries?'
3778 . ./myread
3779 so="$ans"
3780
3781 : Define several unixisms.
3782 : Hints files or command line option can be used to override them.
3783 : The convoluted testing is in case hints files set either the old
3784 : or the new name.
3785 case "$_exe" in
3786 '')     case "$exe_ext" in
3787     '') ;;
3788         *)      _exe="$exe_ext" ;;
3789         esac
3790         ;;
3791 esac
3792 case "$_a" in
3793 '')     case "$lib_ext" in
3794     '') _a='.a';;
3795         *)      _a="$lib_ext" ;;
3796         esac
3797         ;;
3798 esac
3799 case "$_o" in
3800 '') case "$obj_ext" in
3801         '')     _o='.o';;
3802         *)      _o="$obj_ext";;
3803         esac
3804         ;;
3805 esac
3806 case "$p_" in
3807 '') case "$path_sep" in
3808         '')     p_=':';;
3809         *)      p_="$path_sep";;
3810         esac
3811         ;;
3812 esac
3813 exe_ext=$_exe
3814 lib_ext=$_a
3815 obj_ext=$_o
3816 path_sep=$p_
3817
3818 : Which makefile gets called first.  This is used by make depend.
3819 case "$firstmakefile" in
3820 '') firstmakefile='makefile';;
3821 esac
3822
3823 : Looking for optional libraries
3824 echo " "
3825 echo "Checking for optional libraries..." >&4
3826 case "$libs" in
3827 ' '|'') dflt='';;
3828 *) dflt="$libs";;
3829 esac
3830 case "$libswanted" in
3831 '') libswanted='c_s';;
3832 esac
3833 for thislib in $libswanted; do
3834         
3835         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3836                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3837                 echo "Found -l$thislib (shared)."
3838                 case " $dflt " in
3839                 *"-l$thislib "*);;
3840                 *) dflt="$dflt -l$thislib";;
3841                 esac
3842         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3843                 echo "Found -l$thislib (shared)."
3844                 case " $dflt " in
3845                 *"-l$thislib "*);;
3846                 *) dflt="$dflt -l$thislib";;
3847                 esac
3848         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3849                 echo "Found -l$thislib."
3850                 case " $dflt " in
3851                 *"-l$thislib "*);;
3852                 *) dflt="$dflt -l$thislib";;
3853                 esac
3854         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3855                 echo "Found -l$thislib."
3856                 case " $dflt " in
3857                 *"-l$thislib "*);;
3858                 *) dflt="$dflt -l$thislib";;
3859                 esac
3860         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3861                 echo "Found -l${thislib}_s."
3862                 case " $dflt " in
3863                 *"-l$thislib "*);;
3864                 *) dflt="$dflt -l${thislib}_s";;
3865                 esac
3866         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3867                 echo "Found -l$thislib."
3868                 case " $dflt " in
3869                 *"-l$thislib "*);;
3870                 *) dflt="$dflt -l$thislib";;
3871                 esac
3872         else
3873                 echo "No -l$thislib."
3874         fi
3875 done
3876 set X $dflt
3877 shift
3878 dflt="$*"
3879 case "$libs" in
3880 '') dflt="$dflt";;
3881 *) dflt="$libs";;
3882 esac
3883 case "$dflt" in
3884 ' '|'') dflt='none';;
3885 esac
3886
3887 $cat <<EOM
3888  
3889 Some versions of Unix support shared libraries, which make executables smaller
3890 but make load time slightly longer.
3891
3892 On some systems, mostly System V Release 3's, the shared library is included
3893 by putting the option "-lc_s" as the last thing on the cc command line when
3894 linking.  Other systems use shared libraries by default.  There may be other
3895 libraries needed to compile $package on your machine as well.  If your system
3896 needs the "-lc_s" option, include it here.  Include any other special libraries
3897 here as well.  Say "none" for none.
3898 EOM
3899
3900 echo " "
3901 rp="Any additional libraries?"
3902 . ./myread
3903 case "$ans" in
3904 none) libs=' ';;
3905 *) libs="$ans";;
3906 esac
3907
3908 : determine optimize, if desired, or use for debug flag also
3909 case "$optimize" in
3910 ' '|$undef) dflt='none';;
3911 '') dflt='-O';;
3912 *) dflt="$optimize";;
3913 esac
3914 $cat <<EOH
3915
3916 Some C compilers have problems with their optimizers.  By default, $package
3917 compiles with the -O flag to use the optimizer.  Alternately, you might want
3918 to use the symbolic debugger, which uses the -g flag (on traditional Unix
3919 systems).  Either flag can be specified here.  To use neither flag, specify
3920 the word "none".
3921
3922 EOH
3923 rp="What optimizer/debugger flag should be used?"
3924 . ./myread
3925 optimize="$ans"
3926 case "$optimize" in
3927 'none') optimize=" ";;
3928 esac
3929
3930 dflt=''
3931 : We will not override a previous value, but we might want to
3932 : augment a hint file
3933 case "$hint" in
3934 none|recommended)
3935         case "$gccversion" in
3936         1*) dflt='-fpcc-struct-return' ;;
3937         esac
3938         case "$optimize" in
3939         *-g*) dflt="$dflt -DDEBUGGING";;
3940         esac
3941         case "$gccversion" in
3942         2*) if test -d /etc/conf/kconfig.d &&
3943                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3944                 then
3945                         dflt="$dflt -posix"
3946                 fi
3947                 ;;
3948         esac
3949         ;;
3950 esac
3951
3952 case "$mips_type" in
3953 *BSD*|'') inclwanted="$locincpth $usrinc";;
3954 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3955 esac
3956 for thisincl in $inclwanted; do
3957         if $test -d $thisincl; then
3958                 if $test x$thisincl != x$usrinc; then
3959                         case "$dflt" in
3960                         *$thisincl*);;
3961                         *) dflt="$dflt -I$thisincl";;
3962                         esac
3963                 fi
3964         fi
3965 done
3966
3967 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3968         xxx=true;
3969 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3970         xxx=true;
3971 else
3972         xxx=false;
3973 fi;
3974 if $xxx; then
3975         case "$dflt" in
3976         *$2*);;
3977         *) dflt="$dflt -D$2";;
3978         esac;
3979 fi'
3980
3981 if ./osf1; then
3982         set signal.h __LANGUAGE_C__; eval $inctest
3983 else
3984         set signal.h LANGUAGE_C; eval $inctest
3985 fi
3986
3987 case "$hint" in
3988 none|recommended) dflt="$ccflags $dflt" ;;
3989 *) dflt="$ccflags";;
3990 esac
3991
3992 case "$dflt" in
3993 ''|' ') dflt=none;;
3994 esac
3995 $cat <<EOH
3996
3997 Your C compiler may want other flags.  For this question you should include
3998 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3999 but you should NOT include libraries or ld flags like -lwhatever.  If you
4000 want $package to honor its debug switch, you should include -DDEBUGGING here.
4001 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4002
4003 To use no flags, specify the word "none".
4004
4005 EOH
4006 set X $dflt
4007 shift
4008 dflt=${1+"$@"}
4009 rp="Any additional cc flags?"
4010 . ./myread
4011 case "$ans" in
4012 none) ccflags='';;
4013 *) ccflags="$ans";;
4014 esac
4015
4016 : the following weeds options from ccflags that are of no interest to cpp
4017 cppflags="$ccflags"
4018 case "$gccversion" in
4019 1*) cppflags="$cppflags -D__GNUC__"
4020 esac
4021 case "$mips_type" in
4022 '');;
4023 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4024 esac
4025 case "$cppflags" in
4026 '');;
4027 *)
4028         echo " "
4029         echo "Let me guess what the preprocessor flags are..." >&4
4030         set X $cppflags
4031         shift
4032         cppflags=''
4033         $cat >cpp.c <<'EOM'
4034 #define BLURFL foo
4035
4036 BLURFL xx LFRULB
4037 EOM
4038         previous=''
4039         for flag in $*
4040         do
4041                 case "$flag" in
4042                 -*) ftry="$flag";;
4043                 *) ftry="$previous $flag";;
4044                 esac
4045                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4046                         >cpp1.out 2>/dev/null && \
4047                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4048                         >cpp2.out 2>/dev/null && \
4049                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4050                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4051                 then
4052                         cppflags="$cppflags $ftry"
4053                         previous=''
4054                 else
4055                         previous="$flag"
4056                 fi
4057         done
4058         set X $cppflags
4059         shift
4060         cppflags=${1+"$@"}
4061         case "$cppflags" in
4062         *-*)  echo "They appear to be: $cppflags";;
4063         esac
4064         $rm -f cpp.c cpp?.out
4065         ;;
4066 esac
4067
4068 : flags used in final linking phase
4069 case "$ldflags" in
4070 '') if ./venix; then
4071                 dflt='-i -z'
4072         else
4073                 dflt=''
4074         fi
4075         case "$ccflags" in
4076         *-posix*) dflt="$dflt -posix" ;;
4077         esac
4078         ;;
4079 *) dflt="$ldflags";;
4080 esac
4081
4082 : Try to guess additional flags to pick up local libraries.
4083 for thislibdir in $libpth; do
4084         case " $loclibpth " in
4085         *" $thislibdir "*)
4086                 case "$dflt " in 
4087                 *"-L$thislibdir "*) ;;
4088                 *)  dflt="$dflt -L$thislibdir" ;;
4089                 esac
4090                 ;;
4091         esac
4092 done
4093
4094 case "$dflt" in
4095 '') dflt='none' ;;
4096 esac
4097
4098 $cat <<EOH
4099
4100 Your C linker may need flags.  For this question you should
4101 include -L/whatever and any other flags used by the C linker, but you
4102 should NOT include libraries like -lwhatever.
4103
4104 Make sure you include the appropriate -L/path flags if your C linker
4105 does not normally search all of the directories you specified above,
4106 namely
4107         $libpth
4108 To use no flags, specify the word "none".
4109
4110 EOH
4111
4112 rp="Any additional ld flags (NOT including libraries)?"
4113 . ./myread
4114 case "$ans" in
4115 none) ldflags='';;
4116 *) ldflags="$ans";;
4117 esac
4118 rmlist="$rmlist pdp11"
4119
4120 : coherency check
4121 echo " "
4122 echo "Checking your choice of C compiler and flags for coherency..." >&4
4123 $cat > try.c <<'EOF'
4124 #include <stdio.h>
4125 main() { printf("Ok\n"); exit(0); }
4126 EOF
4127 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4128 shift
4129 $cat >try.msg <<'EOM'
4130 I've tried to compile and run the following simple program:
4131
4132 EOM
4133 $cat try.c
4134
4135 $cat >> try.msg <<EOM
4136
4137 I used the command:
4138
4139         $*
4140         ./try
4141
4142 and I got the following output:
4143
4144 EOM
4145 dflt=y
4146 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4147         if sh -c './try' >>try.msg 2>&1; then
4148                 xxx=`./try`
4149                 case "$xxx" in
4150                 "Ok") dflt=n ;;
4151                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4152                         case " $libs " in
4153                         *" -lsfio "*)
4154                                 cat >> try.msg <<'EOQS'
4155 If $libs contains -lsfio, and sfio is mis-configured, then it
4156 sometimes (apparently) runs and exits with a 0 status, but with no
4157 output!  It may have to do with sfio's use of _exit vs. exit.
4158
4159 EOQS
4160                                 rp="You have a big problem.  Shall I abort Configure"
4161                                 dflt=y
4162                                 ;;
4163                         esac
4164                         ;;
4165                 esac
4166         else
4167                 echo "The program compiled OK, but exited with status $?." >>try.msg
4168                 rp="You have a problem.  Shall I abort Configure"
4169                 dflt=y
4170         fi
4171 else
4172         echo "I can't compile the test program." >>try.msg
4173         rp="You have a BIG problem.  Shall I abort Configure"
4174         dflt=y
4175 fi
4176 case "$dflt" in
4177 y)
4178         $cat try.msg >&4
4179         case "$knowitall" in
4180         '')
4181                 echo "(The supplied flags or libraries might be incorrect.)"
4182                 ;;
4183         *) dflt=n;;
4184         esac
4185         echo " "
4186         . ./myread
4187         case "$ans" in
4188         n*|N*) ;;
4189         *)      echo "Ok.  Stopping Configure." >&4
4190                 exit 1
4191                 ;;
4192         esac
4193         ;;
4194 n) echo "OK, that should do.";;
4195 esac
4196 $rm -f try try.* core
4197
4198 : determine filename position in cpp output
4199 echo " "
4200 echo "Computing filename position in cpp output for #include directives..." >&4
4201 echo '#include <stdio.h>' > foo.c
4202 $cat >fieldn <<EOF
4203 $startsh
4204 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4205 $grep '^[       ]*#.*stdio\.h' | \
4206 while read cline; do
4207         pos=1
4208         set \$cline
4209         while $test \$# -gt 0; do
4210                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4211                         echo "\$pos"
4212                         exit 0
4213                 fi
4214                 shift
4215                 pos=\`expr \$pos + 1\`
4216         done
4217 done
4218 EOF
4219 chmod +x fieldn
4220 fieldn=`./fieldn`
4221 $rm -f foo.c fieldn
4222 case $fieldn in
4223 '') pos='???';;
4224 1) pos=first;;
4225 2) pos=second;;
4226 3) pos=third;;
4227 *) pos="${fieldn}th";;
4228 esac
4229 echo "Your cpp writes the filename in the $pos field of the line."
4230
4231 : locate header file
4232 $cat >findhdr <<EOF
4233 $startsh
4234 wanted=\$1
4235 name=''
4236 if test -f $usrinc/\$wanted; then
4237         echo "$usrinc/\$wanted"
4238         exit 0
4239 fi
4240 awkprg='{ print \$$fieldn }'
4241 echo "#include <\$wanted>" > foo\$\$.c
4242 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4243 $grep "^[       ]*#.*\$wanted" | \
4244 while read cline; do
4245         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4246         case "\$name" in
4247         */\$wanted) echo "\$name"; exit 0;;
4248         *) name='';;
4249         esac;
4250 done;
4251 $rm -f foo\$\$.c;
4252 case "\$name" in
4253 '') exit 1;;
4254 esac
4255 EOF
4256 chmod +x findhdr
4257
4258 : define an alternate in-header-list? function
4259 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4260 cont=true; xxf="echo \"<\$1> found.\" >&4";
4261 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4262 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4263 esac;
4264 case $# in 4) instead=instead;; *) instead="at last";; esac;
4265 while $test "$cont"; do
4266         xxx=`./findhdr $1`
4267         var=$2; eval "was=\$$2";
4268         if $test "$xxx" && $test -r "$xxx";
4269         then eval $xxf;
4270         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4271                 cont="";
4272         else eval $xxnf;
4273         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4274         set $yyy; shift; shift; yyy=$@;
4275         case $# in 0) cont="";;
4276         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4277                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4278         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4279                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4280         esac;
4281 done;
4282 while $test "$yyy";
4283 do set $yyy; var=$2; eval "was=\$$2";
4284         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4285         set $yyy; shift; shift; yyy=$@;
4286 done'
4287
4288 : see if this is a malloc.h system
4289 set malloc.h i_malloc
4290 eval $inhdr
4291
4292 : see if stdlib is available
4293 set stdlib.h i_stdlib
4294 eval $inhdr
4295
4296 : determine which malloc to compile in
4297 echo " "
4298 case "$usemymalloc" in
4299 ''|[yY]*|true|$define)  dflt='y' ;;
4300 *)      dflt='n' ;;
4301 esac
4302 rp="Do you wish to attempt to use the malloc that comes with $package?"
4303 . ./myread
4304 usemymalloc="$ans"
4305 case "$ans" in
4306 y*|true)
4307         usemymalloc='y'
4308         mallocsrc='malloc.c'
4309         mallocobj="malloc$_o"
4310         d_mymalloc="$define"
4311         case "$libs" in
4312         *-lmalloc*)
4313                 : Remove malloc from list of libraries to use
4314                 echo "Removing unneeded -lmalloc from library list" >&4
4315                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4316                 shift
4317                 libs="$*"
4318                 echo "libs = $libs" >&4
4319                 ;;
4320         esac
4321         ;;
4322 *)
4323         usemymalloc='n'
4324         mallocsrc=''
4325         mallocobj=''
4326         d_mymalloc="$undef"
4327         ;;
4328 esac
4329
4330 : compute the return types of malloc and free
4331 echo " "
4332 $cat >malloc.c <<END
4333 #$i_malloc I_MALLOC
4334 #$i_stdlib I_STDLIB
4335 #include <stdio.h>
4336 #include <sys/types.h>
4337 #ifdef I_MALLOC
4338 #include <malloc.h>
4339 #endif
4340 #ifdef I_STDLIB
4341 #include <stdlib.h>
4342 #endif
4343 #ifdef TRY_MALLOC
4344 void *malloc();
4345 #endif
4346 #ifdef TRY_FREE
4347 void free();
4348 #endif
4349 END
4350 case "$malloctype" in
4351 '')
4352         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4353                 malloctype='void *'
4354         else
4355                 malloctype='char *'
4356         fi
4357         ;;
4358 esac
4359 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4360
4361 case "$freetype" in
4362 '')
4363         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4364                 freetype='void'
4365         else
4366                 freetype='int'
4367         fi
4368         ;;
4369 esac
4370 echo "Your system uses $freetype free(), it would seem." >&4
4371 $rm -f malloc.[co]
4372 : Cruising for prototypes
4373 echo " "
4374 echo "Checking out function prototypes..." >&4
4375 $cat >prototype.c <<'EOCP'
4376 main(int argc, char *argv[]) {
4377         exit(0);}
4378 EOCP
4379 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4380         echo "Your C compiler appears to support function prototypes."
4381         val="$define"
4382 else
4383         echo "Your C compiler doesn't seem to understand function prototypes."
4384         val="$undef"
4385 fi
4386 set prototype
4387 eval $setvar
4388 $rm -f prototype*
4389
4390 case "$prototype" in
4391 "$define") ;;
4392 *)      ansi2knr='ansi2knr'
4393         echo " "
4394         cat <<EOM >&4
4395
4396 $me:  FATAL ERROR:
4397 This version of $package can only be compiled by a compiler that 
4398 understands function prototypes.  Unfortunately, your C compiler 
4399         $cc $ccflags
4400 doesn't seem to understand them.  Sorry about that.
4401
4402 If GNU cc is available for your system, perhaps you could try that instead.  
4403
4404 Eventually, we hope to support building Perl with pre-ANSI compilers.
4405 If you would like to help in that effort, please contact <perlbug@perl.org>.
4406
4407 Aborting Configure now.
4408 EOM
4409         exit 2
4410         ;;
4411 esac
4412
4413 : determine where public executables go
4414 echo " "
4415 set dflt bin bin
4416 eval $prefixit
4417 fn=d~
4418 rp='Pathname where the public executables will reside?'
4419 . ./getfile
4420 if $test "X$ansexp" != "X$binexp"; then
4421         installbin=''
4422 fi
4423 bin="$ans"
4424 binexp="$ansexp"
4425 if $afs; then
4426         $cat <<EOM
4427
4428 Since you are running AFS, I need to distinguish the directory in which
4429 executables reside from the directory in which they are installed (and from
4430 which they are presumably copied to the former directory by occult means).
4431
4432 EOM
4433         case "$installbin" in
4434         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4435         *) dflt="$installbin";;
4436         esac
4437         fn=de~
4438         rp='Where will public executables be installed?'
4439         . ./getfile
4440         installbin="$ans"
4441 else
4442         installbin="$binexp"
4443 fi
4444
4445 : define a shorthand compile call
4446 compile='
4447 mc_file=$1;
4448 shift;
4449 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4450 : define a shorthand compile call for compilations that should be ok.
4451 compile_ok='
4452 mc_file=$1;
4453 shift;
4454 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4455
4456 echo " "
4457 echo "Checking for GNU C Library..." >&4
4458 cat >gnulibc.c <<EOM
4459 #include <stdio.h>
4460 int
4461 main()
4462 {
4463 #ifdef __GLIBC__
4464     exit(0);
4465 #else
4466     exit(1);
4467 #endif
4468 }
4469 EOM
4470 set gnulibc
4471 if eval $compile_ok && ./gnulibc; then
4472         val="$define"
4473         echo "You are using the GNU C Library"
4474 else
4475         val="$undef"
4476         echo "You are not using the GNU C Library"
4477 fi
4478 $rm -f gnulibc*
4479 set d_gnulibc
4480 eval $setvar
4481
4482 : see if nm is to be used to determine whether a symbol is defined or not
4483 case "$usenm" in
4484 '')
4485         dflt=''
4486         case "$d_gnulibc" in
4487         "$define")
4488                 echo " "
4489                 echo "nm probably won't work on the GNU C Library." >&4
4490                 dflt=n
4491                 ;;
4492         esac
4493         case "$dflt" in
4494         '') 
4495                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4496                         echo " "
4497                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4498                         echo "'nm' won't be sufficient on this sytem." >&4
4499                         dflt=n
4500                 fi
4501                 ;;
4502         esac
4503         case "$dflt" in
4504         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4505                 if $test $dflt -gt 20; then
4506                         dflt=y
4507                 else
4508                         dflt=n
4509                 fi
4510                 ;;
4511         esac
4512         ;;
4513 *)
4514         case "$usenm" in
4515         true|$define) dflt=y;;
4516         *) dflt=n;;
4517         esac
4518         ;;
4519 esac
4520 $cat <<EOM
4521
4522 I can use $nm to extract the symbols from your C libraries. This
4523 is a time consuming task which may generate huge output on the disk (up
4524 to 3 megabytes) but that should make the symbols extraction faster. The
4525 alternative is to skip the 'nm' extraction part and to compile a small
4526 test program instead to determine whether each symbol is present. If
4527 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4528 this may be the best solution.
4529
4530 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4531
4532 EOM
4533 rp="Shall I use $nm to extract C symbols from the libraries?"
4534 . ./myread
4535 case "$ans" in
4536 [Nn]*) usenm=false;;
4537 *) usenm=true;;
4538 esac
4539
4540 runnm=$usenm
4541 case "$reuseval" in
4542 true) runnm=false;;
4543 esac
4544
4545 : nm options which may be necessary
4546 case "$nm_opt" in
4547 '') if $test -f /mach_boot; then
4548                 nm_opt=''       # Mach
4549         elif $test -d /usr/ccs/lib; then
4550                 nm_opt='-p'     # Solaris (and SunOS?)
4551         elif $test -f /dgux; then
4552                 nm_opt='-p'     # DG-UX
4553         elif $test -f /lib64/rld; then
4554                 nm_opt='-p'     # 64-bit Irix
4555         else
4556                 nm_opt=''
4557         fi;;
4558 esac
4559
4560 : nm options which may be necessary for shared libraries but illegal
4561 : for archive libraries.  Thank you, Linux.
4562 case "$nm_so_opt" in
4563 '')     case "$myuname" in
4564         *linux*)
4565                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4566                         nm_so_opt='--dynamic'
4567                 fi
4568                 ;;
4569         esac
4570         ;;
4571 esac
4572
4573 case "$runnm" in
4574 true)
4575 : get list of predefined functions in a handy place
4576 echo " "
4577 case "$libc" in
4578 '') libc=unknown
4579         case "$libs" in
4580         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4581         esac
4582         ;;
4583 esac
4584 libnames='';
4585 case "$libs" in
4586 '') ;;
4587 *)  for thislib in $libs; do
4588         case "$thislib" in
4589         -lc|-lc_s)
4590                 : Handle C library specially below.
4591                 ;;
4592         -l*)
4593                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4594                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4595                         :
4596                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4597                         :
4598                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4599                         :
4600                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4601                         :
4602                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4603                         :
4604                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4605                         :
4606                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4607                         :
4608                 else
4609                         try=''
4610                 fi
4611                 libnames="$libnames $try"
4612                 ;;
4613         *) libnames="$libnames $thislib" ;;
4614         esac
4615         done
4616         ;;
4617 esac
4618 xxx=normal
4619 case "$libc" in
4620 unknown)
4621         set /lib/libc.$so
4622         for xxx in $libpth; do
4623                 $test -r $1 || set $xxx/libc.$so
4624                 : The messy sed command sorts on library version numbers.
4625                 $test -r $1 || \
4626                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4627                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4628                                 h
4629                                 s/[0-9][0-9]*/0000&/g
4630                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4631                                 G
4632                                 s/\n/ /' | \
4633                          sort | $sed -e 's/^.* //'`
4634                 eval set \$$#
4635         done
4636         $test -r $1 || set /usr/ccs/lib/libc.$so
4637         $test -r $1 || set /lib/libsys_s$_a
4638         ;;
4639 *)
4640         set blurfl
4641         ;;
4642 esac
4643 if $test -r "$1"; then
4644         echo "Your (shared) C library seems to be in $1."
4645         libc="$1"
4646 elif $test -r /lib/libc && $test -r /lib/clib; then
4647         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4648         xxx=apollo
4649         libc='/lib/clib /lib/libc'
4650         if $test -r /lib/syslib; then
4651                 echo "(Your math library is in /lib/syslib.)"
4652                 libc="$libc /lib/syslib"
4653         fi
4654 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4655         echo "Your C library seems to be in $libc, as you said before."
4656 elif $test -r $incpath/usr/lib/libc$_a; then
4657         libc=$incpath/usr/lib/libc$_a;
4658         echo "Your C library seems to be in $libc.  That's fine."
4659 elif $test -r /lib/libc$_a; then
4660         libc=/lib/libc$_a;
4661         echo "Your C library seems to be in $libc.  You're normal."
4662 else
4663         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4664                 :
4665         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4666                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4667         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4668                 :
4669         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4670                 :
4671         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4672                 :
4673         else
4674                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4675         fi
4676         if $test -r "$tans"; then
4677                 echo "Your C library seems to be in $tans, of all places."
4678                 libc=$tans
4679         else
4680                 libc='blurfl'
4681         fi
4682 fi
4683 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4684         dflt="$libc"
4685         cat <<EOM
4686
4687 If the guess above is wrong (which it might be if you're using a strange
4688 compiler, or your machine supports multiple models), you can override it here.
4689
4690 EOM
4691 else
4692         dflt=''
4693         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4694         cat >&4 <<EOM
4695 I can't seem to find your C library.  I've looked in the following places:
4696
4697 EOM
4698         $sed 's/^/      /' libpath
4699         cat <<EOM
4700
4701 None of these seems to contain your C library. I need to get its name...
4702
4703 EOM
4704 fi
4705 fn=f
4706 rp='Where is your C library?'
4707 . ./getfile
4708 libc="$ans"
4709
4710 echo " "
4711 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4712 set X `cat libnames`
4713 shift
4714 xxx=files
4715 case $# in 1) xxx=file; esac
4716 echo "Extracting names from the following $xxx for later perusal:" >&4
4717 echo " "
4718 $sed 's/^/      /' libnames >&4
4719 echo " "
4720 $echo $n "This may take a while...$c" >&4
4721
4722 for file in $*; do
4723         case $file in
4724         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4725         *) $nm $nm_opt $file 2>/dev/null;;
4726         esac
4727 done >libc.tmp
4728
4729 $echo $n ".$c"
4730 $grep fprintf libc.tmp > libc.ptf
4731 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4732 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4733 xxx='[ADTSIW]'
4734 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4735         eval $xscan;\
4736         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4737                 eval $xrun
4738 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4739         eval $xscan;\
4740         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4741                 eval $xrun
4742 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4743         eval $xscan;\
4744         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4745                 eval $xrun
4746 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4747         eval $xscan;\
4748         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4749                 eval $xrun
4750 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4751         eval $xscan;\
4752         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4753                 eval $xrun
4754 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4755         eval $xscan;\
4756         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4757                 eval $xrun
4758 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4759                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4760         eval $xscan;\
4761         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4762                 eval $xrun
4763 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4764         eval $xscan;\
4765         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4766                 eval $xrun
4767 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4768         eval $xscan;\
4769         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4770                 eval $xrun
4771 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4772         eval $xscan;\
4773         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4774                 eval $xrun
4775 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4776         eval $xscan;\
4777         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4778                 eval $xrun
4779 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4780         eval $xscan;\
4781         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4782                 eval $xrun
4783 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4784         eval $xscan;\
4785         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4786                 eval $xrun
4787 else
4788         $nm -p $* 2>/dev/null >libc.tmp
4789         $grep fprintf libc.tmp > libc.ptf
4790         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4791                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4792         then
4793                 nm_opt='-p'
4794                 eval $xrun
4795         else
4796                 echo " "
4797                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4798                 com=''
4799                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4800                         for thisname in $libnames $libc; do
4801                                 $ar t $thisname >>libc.tmp
4802                         done
4803                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4804                         echo "Ok." >&4
4805                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4806                         # Repeat libc to extract forwarders to DLL entries too
4807                         for thisname in $libnames $libc; do
4808                                 $ar tv $thisname >>libc.tmp
4809                                 # Revision 50 of EMX has bug in $ar.
4810                                 # it will not extract forwarders to DLL entries
4811                                 # Use emximp which will extract exactly them.
4812                                 emximp -o tmp.imp $thisname \
4813                                     2>/dev/null && \
4814                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4815                                     < tmp.imp >>libc.tmp
4816                                 $rm tmp.imp
4817                         done
4818                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4819                         echo "Ok." >&4
4820                 else
4821                         echo "$ar didn't seem to work right." >&4
4822                         echo "Maybe this is a Cray...trying bld instead..." >&4
4823                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4824                         then
4825                                 for thisname in $libnames; do
4826                                         bld t $libnames | \
4827                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4828                                         $ar t $thisname >>libc.tmp
4829                                 done
4830                                 echo "Ok." >&4
4831                         else
4832                                 echo "That didn't work either.  Giving up." >&4
4833                                 exit 1
4834                         fi
4835                 fi
4836         fi
4837 fi
4838 nm_extract="$com"
4839 if $test -f /lib/syscalls.exp; then
4840         echo " "
4841         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4842         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4843 fi
4844 ;;
4845 esac
4846 $rm -f libnames libpath
4847
4848 : see if dld is available
4849 set dld.h i_dld
4850 eval $inhdr
4851
4852 : is a C symbol defined?
4853 csym='tlook=$1;
4854 case "$3" in
4855 -v) tf=libc.tmp; tc=""; tdc="";;
4856 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4857 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4858 esac;
4859 tx=yes;
4860 case "$reuseval-$4" in
4861 true-) ;;
4862 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4863 esac;
4864 case "$tx" in
4865 yes)
4866         case "$runnm" in
4867         true)
4868                 if $contains $tlook $tf >/dev/null 2>&1;
4869                 then tval=true;
4870                 else tval=false;
4871                 fi;;
4872         *)
4873                 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4874                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
4875                 then tval=true;
4876                 else tval=false;
4877                 fi;
4878                 $rm -f t t.c;;
4879         esac;;
4880 *)
4881         case "$tval" in
4882         $define) tval=true;;
4883         *) tval=false;;
4884         esac;;
4885 esac;
4886 eval "$2=$tval"'
4887
4888 : define an is-in-libc? function
4889 inlibc='echo " "; td=$define; tu=$undef;
4890 sym=$1; var=$2; eval "was=\$$2";
4891 tx=yes;
4892 case "$reuseval$was" in
4893 true) ;;
4894 true*) tx=no;;
4895 esac;
4896 case "$tx" in
4897 yes)
4898         set $sym tres -f;
4899         eval $csym;
4900         case "$tres" in
4901         true)
4902                 echo "$sym() found." >&4;
4903                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
4904         *)
4905                 echo "$sym() NOT found." >&4;
4906                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
4907         esac;;
4908 *)
4909         case "$was" in
4910         $define) echo "$sym() found." >&4;;
4911         *) echo "$sym() NOT found." >&4;;
4912         esac;;
4913 esac'
4914
4915 : see if dlopen exists
4916 xxx_runnm="$runnm"
4917 runnm=false
4918 set dlopen d_dlopen
4919 eval $inlibc
4920 runnm="$xxx_runnm"
4921
4922 : determine which dynamic loading, if any, to compile in
4923 echo " "
4924 dldir="ext/DynaLoader"
4925 case "$usedl" in
4926 $define|y|true)
4927         dflt='y'
4928         usedl="$define"
4929         ;;
4930 $undef|n|false)
4931         dflt='n'
4932         usedl="$undef"
4933         ;;
4934 *) 
4935         dflt='n'
4936         case "$d_dlopen" in
4937             $define) dflt='y' ;;
4938         esac
4939         case "$i_dld" in
4940             $define) dflt='y' ;;
4941         esac
4942         : Does a dl_xxx.xs file exist for this operating system
4943         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
4944         ;;
4945 esac
4946 rp="Do you wish to use dynamic loading?"
4947 . ./myread
4948 usedl="$ans"
4949 case "$ans" in
4950 y*) usedl="$define"
4951         case "$dlsrc" in
4952         '')
4953                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
4954                         dflt="$dldir/dl_${osname}.xs"
4955                 elif $test "$d_dlopen" = "$define" ; then
4956                         dflt="$dldir/dl_dlopen.xs"
4957                 elif $test "$i_dld" = "$define" ; then
4958                         dflt="$dldir/dl_dld.xs"
4959                 else
4960                         dflt=''
4961                 fi
4962                 ;;
4963         *)      dflt="$dldir/$dlsrc"
4964                 ;;
4965         esac
4966     echo "The following dynamic loading files are available:"
4967         : Can not go over to $dldir because getfile has path hard-coded in.
4968         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
4969         rp="Source file to use for dynamic loading"
4970         fn="fne"
4971         # XXX This getfile call will fail the existence check if you try 
4972         # building away from $src (this is not supported yet).
4973         . ./getfile
4974         usedl="$define"
4975         : emulate basename
4976         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
4977
4978         $cat << EOM
4979
4980 Some systems may require passing special flags to $cc -c to
4981 compile modules that will be used to create a shared library.
4982 To use no flags, say "none".
4983
4984 EOM
4985     case "$cccdlflags" in
4986     '') case "$gccversion" in
4987                 '') case "$osname" in
4988                         hpux)   dflt='+z' ;;
4989                         next)   dflt='none' ;;
4990                         irix*)  dflt='-KPIC' ;;
4991                         svr4*|esix*|solaris) dflt='-KPIC' ;;
4992                         sunos)  dflt='-pic' ;;
4993                         *)      dflt='none' ;;
4994                     esac
4995                         ;;
4996                 *)  case "$osname" in
4997                         svr4*|esix*|solaris) dflt='-fPIC' ;;
4998                         *)      dflt='-fpic' ;;
4999                     esac ;;
5000             esac ;;
5001         ' ') dflt='none' ;;
5002     *)  dflt="$cccdlflags" ;;
5003     esac
5004     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5005     . ./myread
5006     case "$ans" in
5007     none) cccdlflags=' ' ;;
5008     *) cccdlflags="$ans" ;;
5009     esac
5010
5011     cat << EOM
5012
5013 Some systems use ld to create libraries that can be dynamically loaded,
5014 while other systems (such as those using ELF) use $cc.
5015
5016 EOM
5017         case "$ld" in
5018         '')     $cat >try.c <<'EOM'
5019 /* Test for whether ELF binaries are produced */
5020 #include <fcntl.h>
5021 #include <stdlib.h>
5022 main() {
5023         char b[4];
5024         int i = open("a.out",O_RDONLY);
5025         if(i == -1) 
5026                 exit(1); /* fail */
5027         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5028                 exit(0); /* succeed (yes, it's ELF) */
5029         else
5030                 exit(1); /* fail */
5031 }
5032 EOM
5033                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5034                         cat <<EOM
5035 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5036 EOM
5037                         dflt="$cc"
5038                 else
5039                         echo "I'll use ld to build dynamic libraries."
5040                         dflt='ld'
5041                 fi
5042                 rm -f try.c a.out
5043                 ;;
5044         *)      dflt="$ld"
5045                 ;;
5046         esac
5047
5048     rp="What command should be used to create dynamic libraries?"
5049     . ./myread
5050         ld="$ans"
5051
5052     cat << EOM
5053
5054 Some systems may require passing special flags to $ld to create a
5055 library that can be dynamically loaded.  If your ld flags include
5056 -L/other/path options to locate libraries outside your loader's normal
5057 search path, you may need to specify those -L options here as well.  To
5058 use no flags, say "none".
5059
5060 EOM
5061     case "$lddlflags" in
5062     '') case "$osname" in
5063                         hpux)  dflt='-b' ;;
5064                         linux|irix*)    dflt='-shared' ;;
5065                         next)  dflt='none' ;;
5066                         solaris) dflt='-G' ;;
5067                         sunos) dflt='-assert nodefinitions' ;;
5068                         svr4*|esix*) dflt="-G $ldflags" ;;
5069                 *)     dflt='none' ;;
5070                         esac
5071                         ;;
5072     *) dflt="$lddlflags" ;;
5073     esac
5074
5075         : Try to guess additional flags to pick up local libraries.
5076         for thisflag in $ldflags; do
5077                 case "$thisflag" in
5078                 -L*)
5079                         case " $dflt " in
5080                         *" $thisflag "*) ;;
5081                         *) dflt="$dflt $thisflag" ;;
5082                         esac
5083                         ;;
5084                 esac
5085         done
5086
5087         case "$dflt" in
5088         ''|' ') dflt='none' ;;
5089         esac
5090
5091     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5092     . ./myread
5093     case "$ans" in
5094     none) lddlflags=' ' ;;
5095     *) lddlflags="$ans" ;;
5096     esac
5097
5098         cat <<EOM
5099
5100 Some systems may require passing special flags to $cc to indicate that
5101 the resulting executable will use dynamic linking.  To use no flags,
5102 say "none".
5103
5104 EOM
5105     case "$ccdlflags" in
5106     '') case "$osname" in
5107                 hpux)   dflt='-Wl,-E' ;;
5108                 linux)  dflt='-rdynamic' ;;
5109                 next)   dflt='none' ;;
5110                 sunos)  dflt='none' ;;
5111                 *)      dflt='none' ;;
5112             esac ;;
5113     ' ')  dflt='none' ;;
5114     *)  dflt="$ccdlflags" ;;
5115     esac
5116     rp="Any special flags to pass to $cc to use dynamic loading?"
5117     . ./myread
5118     case "$ans" in
5119     none) ccdlflags=' ' ;;
5120     *) ccdlflags="$ans" ;;
5121     esac
5122     ;;
5123 *)  usedl="$undef"
5124         ld='ld'
5125     dlsrc='dl_none.xs'
5126     lddlflags=''
5127     ccdlflags=''
5128     ;;
5129 esac
5130
5131 also=''
5132 case "$usedl" in
5133 $undef)
5134         # No dynamic loading being used, so don't bother even to prompt.
5135         useshrplib='false'
5136         ;;
5137 *)      case "$useshrplib" in
5138         '')     case "$osname" in
5139                 svr4*|dgux|dynixptx|esix|powerux)
5140                         dflt=y
5141                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5142                         ;;
5143                 next*)
5144                         case "$osvers" in
5145                         4*)     dflt=y
5146                                 also='Building a shared libperl is needed for MAB support.'
5147                                 ;;
5148                         *)      dflt=n
5149                                 ;;
5150                         esac
5151                         ;;
5152                 *)      dflt=n
5153                         ;;
5154                 esac
5155                 ;;
5156         $define|true|[Yy]*)
5157                 dflt=y
5158                 ;;
5159         *)      dflt=n
5160                 ;;
5161         esac
5162         $cat << EOM
5163
5164 The perl executable is normally obtained by linking perlmain.c with
5165 libperl${_a}, any static extensions (usually just DynaLoader), and
5166 any other libraries needed on this system (such as -lm, etc.).  Since
5167 your system supports dynamic loading, it is probably possible to build
5168 a shared libperl.$so.  If you will have more than one executable linked
5169 to libperl.$so, this will significantly reduce the size of each
5170 executable, but it may have a noticeable affect on performance.  The
5171 default is probably sensible for your system.
5172 $also
5173
5174 EOM
5175         rp="Build a shared libperl.$so (y/n)"
5176         . ./myread
5177         case "$ans" in
5178         true|$define|[Yy]*)
5179                 useshrplib='true'
5180                 # Why does next4 have to be so different?
5181                 case "${osname}${osvers}" in
5182                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
5183                 os2*)   xxx='' ;; # Nothing special needed.
5184                 *)              xxx='LD_LIBRARY_PATH' ;;
5185                 esac
5186                 if test X"$xxx" != "X"; then
5187                         $cat <<EOM  | $tee -a ../config.msg >&4
5188
5189 To build perl, you must add the current working directory to your
5190 $xxx environment variable before running make.  You can do
5191 this with
5192    $xxx=\`pwd\`; export $xxx
5193 for Bourne-style shells, or
5194    setenv $xxx \`pwd\`
5195 for Csh-style shells.  You *MUST* do this before running make.
5196
5197 EOM
5198                 fi
5199                 ;;
5200         *)      useshrplib='false' ;;
5201         esac
5202         ;;
5203 esac
5204
5205 case "$useshrplib" in
5206 true)
5207         case "$libperl" in
5208         '')
5209                 # Figure out a good name for libperl.so.  Since it gets stored in
5210                 # a version-specific architecture-dependent library, the version
5211                 # number isn't really that important, except for making cc/ld happy.
5212                 #
5213                 # A name such as libperl.so.3.1
5214                 majmin="libperl.$so.$patchlevel.$subversion"
5215                 # A name such as libperl.so.301
5216                 majonly=`echo $patchlevel $subversion |
5217                         $awk '{printf "%d%02d", $1, $2}'`
5218                 majonly=libperl.$so.$majonly
5219                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5220                 # rely on figuring it out from the naming of libc.
5221                 case "${osname}${osvers}" in
5222                 next4*)
5223                         dflt=libperl.5.$so
5224                         # XXX How handle the --version stuff for MAB?
5225                         ;;
5226                 linux*)  # ld won't link with a bare -lperl otherwise.
5227                         dflt=libperl.$so
5228                         ;;
5229                 *)      # Try to guess based on whether libc has major.minor.
5230                         case "$libc" in
5231                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5232                         *libc.$so.[0-9]*) dflt=$majonly ;;
5233                         *)      dflt=libperl.$so ;;
5234                         esac
5235                         ;;
5236                 esac
5237                 ;;
5238         *)      dflt=$libperl
5239                 ;;
5240         esac
5241         cat << EOM
5242
5243 I need to select a good name for the shared libperl.  If your system uses
5244 library names with major and minor numbers, then you might want something
5245 like $majmin.  Alternatively, if your system uses a single version
5246 number for shared libraries, then you might want to use $majonly.
5247 Or, your system might be quite happy with a simple libperl.$so.
5248
5249 Since the shared libperl will get installed into a version-specific
5250 architecture-dependent directory, the version number of the shared perl
5251 library probably isn't important, so the default should be o.k.
5252
5253 EOM
5254         rp='What name do you want to give to the shared libperl?'
5255         . ./myread
5256         libperl=$ans
5257         echo "Ok, I'll use $libperl"
5258         ;;
5259 *)
5260         libperl="libperl${_a}"
5261         ;;
5262 esac
5263
5264 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5265 case "$shrpdir" in
5266 '') ;;
5267 *)      $cat >&4 <<EOM
5268 WARNING:  Use of the shrpdir variable for the installation location of
5269 the shared $libperl is not supported.  It was never documented and
5270 will not work in this version.  Let me (jhi@iki.fi)
5271 know of any problems this may cause.
5272
5273 EOM
5274         case "$shrpdir" in
5275         "$archlibexp/CORE")
5276                 $cat >&4 <<EOM
5277 But your current setting of $shrpdir is
5278 the default anyway, so it's harmless.
5279 EOM
5280                 ;;
5281         *)
5282                 $cat >&4 <<EOM
5283 Further, your current attempted setting of $shrpdir
5284 conflicts with the value of $archlibexp/CORE
5285 that installperl will use.
5286 EOM
5287                 ;;
5288         esac
5289         ;;
5290 esac
5291
5292 # How will the perl executable find the installed shared $libperl?
5293 # Add $xxx to ccdlflags.
5294 # If we can't figure out a command-line option, use $shrpenv to
5295 # set env LD_RUN_PATH.  The main perl makefile uses this.
5296 shrpdir=$archlibexp/CORE
5297 xxx=''
5298 tmp_shrpenv=''
5299 if "$useshrplib"; then
5300     case "$osname" in 
5301         aix)
5302                 # We'll set it in Makefile.SH...
5303                 ;;
5304         solaris|netbsd)
5305                 xxx="-R $shrpdir"
5306                 ;;
5307         freebsd)
5308                 xxx="-Wl,-R$shrpdir"
5309                 ;;
5310         linux|irix*|dec_osf)
5311                 xxx="-Wl,-rpath,$shrpdir"
5312                 ;;
5313         next)
5314                 # next doesn't like the default...
5315                 ;;
5316         *)
5317                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5318                 ;;
5319         esac
5320         case "$xxx" in
5321         '') ;;
5322         *)      
5323                 # Only add $xxx if it isn't already in ccdlflags.
5324                 case " $ccdlflags " in
5325                 *" $xxx "*)     ;;
5326                 *)      ccdlflags="$ccdlflags $xxx"
5327                         cat <<EOM >&4
5328
5329 Adding $xxx to the flags
5330 passed to $ld so that the perl executable will find the 
5331 installed shared $libperl.
5332
5333 EOM
5334                         ;;
5335                 esac
5336                 ;;
5337         esac
5338 fi
5339 # Respect a hint or command-line value.
5340 case "$shrpenv" in
5341 '') shrpenv="$tmp_shrpenv" ;;
5342 esac
5343
5344 : determine where manual pages go
5345 set man1dir man1dir none
5346 eval $prefixit
5347 $cat <<EOM
5348
5349 $spackage has manual pages available in source form.
5350 EOM
5351 case "$nroff" in
5352 nroff)
5353         echo "However, you don't have nroff, so they're probably useless to you."
5354         case "$man1dir" in
5355         '') man1dir="none";;
5356         esac;;
5357 esac
5358 echo "If you don't want the manual sources installed, answer 'none'."
5359 case "$man1dir" in
5360 ' ') dflt=none
5361         ;;
5362 '')
5363         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5364         lookpath="$lookpath $prefixexp/man/p_man/man1"
5365         lookpath="$lookpath $prefixexp/man/u_man/man1"
5366         lookpath="$lookpath $prefixexp/man/man.1"
5367         case "$sysman" in
5368         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5369         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5370         esac
5371         set dflt
5372         eval $prefixup
5373         ;;
5374 *)  dflt="$man1dir"
5375         ;;
5376 esac
5377 echo " "
5378 fn=dn+~
5379 rp="Where do the main $spackage manual pages (source) go?"
5380 . ./getfile
5381 if $test "X$man1direxp" != "X$ansexp"; then
5382         installman1dir=''
5383 fi
5384 man1dir="$ans"
5385 man1direxp="$ansexp"
5386 case "$man1dir" in
5387 '') man1dir=' '
5388         installman1dir='';;
5389 esac
5390 if $afs; then
5391         $cat <<EOM
5392
5393 Since you are running AFS, I need to distinguish the directory in which
5394 manual pages reside from the directory in which they are installed (and from
5395 which they are presumably copied to the former directory by occult means).
5396
5397 EOM
5398         case "$installman1dir" in
5399         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5400         *) dflt="$installman1dir";;
5401         esac
5402         fn=de~
5403         rp='Where will man pages be installed?'
5404         . ./getfile
5405         installman1dir="$ans"
5406 else
5407         installman1dir="$man1direxp"
5408 fi
5409
5410 : What suffix to use on installed man pages
5411
5412 case "$man1dir" in
5413 ' ')
5414         man1ext='0'
5415         ;;
5416 *)
5417         rp="What suffix should be used for the main $spackage man pages?"
5418         case "$man1ext" in
5419         '')     case "$man1dir" in
5420                 *1)  dflt=1 ;;
5421                 *1p) dflt=1p ;;
5422                 *1pm) dflt=1pm ;;
5423                 *l) dflt=l;;
5424                 *n) dflt=n;;
5425                 *o) dflt=o;;
5426                 *p) dflt=p;;
5427                 *C) dflt=C;;
5428                 *L) dflt=L;;
5429                 *L1) dflt=L1;;
5430                 *) dflt=1;;
5431                 esac
5432                 ;;
5433         *)      dflt="$man1ext";;
5434         esac
5435         . ./myread
5436         man1ext="$ans"
5437         ;;
5438 esac
5439
5440 : see if we can have long filenames
5441 echo " "
5442 rmlist="$rmlist /tmp/cf$$"
5443 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5444 first=123456789abcdef
5445 second=/tmp/cf$$/$first
5446 $rm -f $first $second
5447 if (echo hi >$first) 2>/dev/null; then
5448         if $test -f 123456789abcde; then
5449                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5450                 val="$undef"
5451         else
5452                 if (echo hi >$second) 2>/dev/null; then
5453                         if $test -f /tmp/cf$$/123456789abcde; then
5454                                 $cat <<'EOM'
5455 That's peculiar... You can have filenames longer than 14 characters, but only
5456 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5457 I shall consider your system cannot support long filenames at all.
5458 EOM
5459                                 val="$undef"
5460                         else
5461                                 echo 'You can have filenames longer than 14 characters.' >&4
5462                                 val="$define"
5463                         fi
5464                 else
5465                         $cat <<'EOM'
5466 How confusing! Some of your filesystems are sane enough to allow filenames
5467 longer than 14 characters but some others like /tmp can't even think about them.
5468 So, for now on, I shall assume your kernel does not allow them at all.
5469 EOM
5470                         val="$undef"
5471                 fi
5472         fi
5473 else
5474         $cat <<'EOM'
5475 You can't have filenames longer than 14 chars.  You can't even think about them!
5476 EOM
5477         val="$undef"
5478 fi 
5479 set d_flexfnam
5480 eval $setvar
5481 $rm -rf /tmp/cf$$ 123456789abcde*
5482
5483 : determine where library module manual pages go
5484 set man3dir man3dir none
5485 eval $prefixit
5486 $cat <<EOM
5487
5488 $spackage has manual pages for many of the library modules.
5489 EOM
5490
5491 case "$nroff" in
5492 nroff)
5493         $cat <<'EOM'
5494 However, you don't have nroff, so they're probably useless to you.
5495 EOM
5496         case "$man3dir" in
5497         '') man3dir="none";;
5498         esac;;
5499 esac
5500
5501 case "$d_flexfnam" in
5502 undef)
5503         $cat <<'EOM'
5504 However, your system can't handle the long file names like File::Basename.3. 
5505 EOM
5506         case "$man3dir" in
5507         '') man3dir="none";;
5508         esac;;
5509 esac
5510
5511 echo "If you don't want the manual sources installed, answer 'none'."
5512 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5513 case "$man3dir" in
5514 '')     case "$prefix" in 
5515         *$prog*) dflt=`echo $man1dir | 
5516                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5517         *)      dflt="$privlib/man/man3" ;;
5518         esac
5519         ;;
5520 ' ') dflt=none;;
5521 *)      dflt="$man3dir" ;;
5522 esac
5523 echo " "
5524
5525 fn=dn+~
5526 rp="Where do the $package library man pages (source) go?"
5527 . ./getfile
5528 if test "X$man3direxp" != "X$ansexp"; then
5529         installman3dir=''
5530 fi
5531
5532 man3dir="$ans"
5533 man3direxp="$ansexp"
5534 case "$man3dir" in
5535 '') man3dir=' '
5536         installman3dir='';;
5537 esac
5538 if $afs; then
5539         $cat <<EOM
5540
5541 Since you are running AFS, I need to distinguish the directory in which
5542 manual pages reside from the directory in which they are installed (and from
5543 which they are presumably copied to the former directory by occult means).
5544
5545 EOM
5546         case "$installman3dir" in
5547         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5548         *) dflt="$installman3dir";;
5549         esac
5550         fn=de~
5551         rp='Where will man pages be installed?'
5552         . ./getfile
5553         installman3dir="$ans"
5554 else
5555         installman3dir="$man3direxp"
5556 fi
5557
5558 : What suffix to use on installed man pages
5559
5560 case "$man3dir" in
5561 ' ')
5562         man3ext='0'
5563         ;;
5564 *)
5565         rp="What suffix should be used for the $package library man pages?"
5566         case "$man3ext" in
5567         '')     case "$man3dir" in
5568                 *3)  dflt=3 ;;
5569                 *3p) dflt=3p ;;
5570                 *3pm) dflt=3pm ;;
5571                 *l) dflt=l;;
5572                 *n) dflt=n;;
5573                 *o) dflt=o;;
5574                 *p) dflt=p;;
5575                 *C) dflt=C;;
5576                 *L) dflt=L;;
5577                 *L3) dflt=L3;;
5578                 *) dflt=3;;
5579                 esac
5580                 ;;
5581         *)      dflt="$man3ext";;
5582         esac
5583         . ./myread
5584         man3ext="$ans"
5585         ;;
5586 esac
5587
5588 : see if we have to deal with yellow pages, now NIS.
5589 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5590         if $test -f /usr/etc/nibindd; then
5591                 echo " "
5592                 echo "I'm fairly confident you're on a NeXT."
5593                 echo " "
5594                 rp='Do you get the hosts file via NetInfo?'
5595                 dflt=y
5596                 case "$hostcat" in
5597                 nidump*) ;;
5598                 '') ;;
5599                 *) dflt=n;;
5600                 esac
5601                 . ./myread
5602                 case "$ans" in
5603                 y*) hostcat='nidump hosts .';;
5604                 *)      case "$hostcat" in
5605                         nidump*) hostcat='';;
5606                         esac
5607                         ;;
5608                 esac
5609         fi
5610         case "$hostcat" in
5611         nidump*) ;;
5612         *)
5613                 case "$hostcat" in
5614                 *ypcat*) dflt=y;;
5615                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5616                                 dflt=y
5617                         else
5618                                 dflt=n
5619                         fi;;
5620                 *) dflt=n;;
5621                 esac
5622                 echo " "
5623                 rp='Are you getting the hosts file via yellow pages?'
5624                 . ./myread
5625                 case "$ans" in
5626                 y*) hostcat='ypcat hosts';;
5627                 *) hostcat='cat /etc/hosts';;
5628                 esac
5629                 ;;
5630         esac
5631 fi
5632 case "$hostcat" in
5633 '') hostcat='cat /etc/hosts';;
5634 esac
5635 case "$groupcat" in
5636 '') groupcat='cat /etc/group';;
5637 esac
5638 case "$passcat" in
5639 '') passcat='cat /etc/passwd';;
5640 esac
5641
5642 : now get the host name
5643 echo " "
5644 echo "Figuring out host name..." >&4
5645 case "$myhostname" in
5646 '') cont=true
5647         echo 'Maybe "hostname" will work...'
5648         if tans=`sh -c hostname 2>&1` ; then
5649                 myhostname=$tans
5650                 phostname=hostname
5651                 cont=''
5652         fi
5653         ;;
5654 *) cont='';;
5655 esac
5656 if $test "$cont"; then
5657         if ./xenix; then
5658                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5659                 if tans=`cat /etc/systemid 2>&1` ; then
5660                         myhostname=$tans
5661                         phostname='cat /etc/systemid'
5662                         echo "Whadyaknow.  Xenix always was a bit strange..."
5663                         cont=''
5664                 fi
5665         elif $test -r /etc/systemid; then
5666                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5667         fi
5668 fi
5669 if $test "$cont"; then
5670         echo 'No, maybe "uuname -l" will work...'
5671         if tans=`sh -c 'uuname -l' 2>&1` ; then
5672                 myhostname=$tans
5673                 phostname='uuname -l'
5674         else
5675                 echo 'Strange.  Maybe "uname -n" will work...'
5676                 if tans=`sh -c 'uname -n' 2>&1` ; then
5677                         myhostname=$tans
5678                         phostname='uname -n'
5679                 else
5680                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5681                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5682                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5683                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5684                         else
5685                                 case "$myhostname" in
5686                                 '') echo "Does this machine have an identity crisis or something?"
5687                                         phostname='';;
5688                                 *)
5689                                         echo "Well, you said $myhostname before..."
5690                                         phostname='echo $myhostname';;
5691                                 esac
5692                         fi
5693                 fi
5694         fi
5695 fi
5696 : you do not want to know about this
5697 set $myhostname
5698 myhostname=$1
5699
5700 : verify guess
5701 if $test "$myhostname" ; then
5702         dflt=y
5703         rp='Your host name appears to be "'$myhostname'".'" Right?"
5704         . ./myread
5705         case "$ans" in
5706         y*) ;;
5707         *) myhostname='';;
5708         esac
5709 fi
5710
5711 : bad guess or no guess
5712 while $test "X$myhostname" = X ; do
5713         dflt=''
5714         rp="Please type the (one word) name of your host:"
5715         . ./myread
5716         myhostname="$ans"
5717 done
5718
5719 : translate upper to lower if necessary
5720 case "$myhostname" in
5721 *[A-Z]*)
5722         echo "(Normalizing case in your host name)"
5723         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5724         ;;
5725 esac
5726
5727 case "$myhostname" in
5728 *.*)
5729         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5730         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5731         echo "(Trimming domain name from host name--host name is now $myhostname)"
5732         ;;
5733 *) case "$mydomain" in
5734         '')
5735                 {
5736                         test "X$hostcat" = "Xypcat hosts" &&
5737                         ypmatch "$myhostname" hosts 2>/dev/null |\
5738                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5739                         $test -s hosts
5740                 } || {
5741                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5742                                         /[       ]$myhostname[  . ]/p" > hosts
5743                 }
5744                 tmp_re="[       . ]"
5745                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5746                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5747                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5748                         hosts | $sort | $uniq | \
5749                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5750                 case `$echo X$dflt` in
5751                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5752                         dflt=.
5753                         ;;
5754                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5755                         ;;
5756                 esac
5757                 case "$dflt" in
5758                 .)
5759                         tans=`./loc resolv.conf X /etc /usr/etc`
5760                         if $test -f "$tans"; then
5761                                 echo "(Attempting domain name extraction from $tans)"
5762                                 dflt=.`$sed -n -e 's/   / /g' \
5763                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5764                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5765                                 case "$dflt" in
5766                                 .) dflt=.`$sed -n -e 's/        / /g' \
5767                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5768                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5769                                         ;;
5770                                 esac
5771                         fi
5772                         ;;
5773                 esac
5774                 case "$dflt" in
5775                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5776                         dflt=.`sh -c domainname 2>/dev/null`
5777                         case "$dflt" in
5778                         '') dflt='.';;
5779                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5780                         esac
5781                         ;;
5782                 esac
5783                 case "$dflt" in
5784                 .) echo "(Lost all hope -- silly guess then)"
5785                         dflt='.uucp'
5786                         ;;
5787                 esac
5788                 $rm -f hosts
5789                 ;;
5790         *) dflt="$mydomain";;
5791         esac;;
5792 esac
5793 echo " "
5794 rp="What is your domain name?"
5795 . ./myread
5796 tans="$ans"
5797 case "$ans" in
5798 '') ;;
5799 .*) ;;
5800 *) tans=".$tans";;
5801 esac
5802 mydomain="$tans"
5803
5804 : translate upper to lower if necessary
5805 case "$mydomain" in
5806 *[A-Z]*)
5807         echo "(Normalizing case in your domain name)"
5808         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5809         ;;
5810 esac
5811
5812 : a little sanity check here
5813 case "$phostname" in
5814 '') ;;
5815 *)
5816         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5817         $myhostname$mydomain|$myhostname) ;;
5818         *)
5819                 case "$phostname" in
5820                 sed*)
5821                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5822                         ;;
5823                 *)
5824                         echo "(That doesn't agree with your $phostname command, by the way.)"
5825                         ;;
5826                 esac
5827         ;;
5828         esac
5829         ;;
5830 esac
5831
5832 $cat <<EOM
5833
5834 I need to get your e-mail address in Internet format if possible, i.e.
5835 something like user@host.domain. Please answer accurately since I have
5836 no easy means to double check it. The default value provided below
5837 is most probably close to the reality but may not be valid from outside
5838 your organization...
5839
5840 EOM
5841 cont=x
5842 while test "$cont"; do
5843         case "$cf_email" in
5844         '') dflt="$cf_by@$myhostname$mydomain";;
5845         *) dflt="$cf_email";;
5846         esac
5847         rp='What is your e-mail address?'
5848         . ./myread
5849         cf_email="$ans"
5850         case "$cf_email" in
5851         *@*.*) cont='' ;;
5852         *)
5853                 rp='Address does not look like an Internet one.  Use it anyway?'
5854                 case "$fastread" in
5855                 yes) dflt=y ;;
5856                 *) dflt=n ;;
5857                 esac
5858                 . ./myread
5859                 case "$ans" in
5860                 y*) cont='' ;;
5861                 *) echo " " ;;
5862                 esac
5863                 ;;
5864         esac
5865 done
5866
5867 $cat <<EOM
5868
5869 If you or somebody else will be maintaining perl at your site, please
5870 fill in the correct e-mail address here so that they may be contacted
5871 if necessary. Currently, the "perlbug" program included with perl
5872 will send mail to this address in addition to perlbug@perl.com. You may
5873 enter "none" for no administrator.
5874
5875 EOM
5876 case "$perladmin" in
5877 '') dflt="$cf_email";;
5878 *) dflt="$perladmin";;
5879 esac
5880 rp='Perl administrator e-mail address'
5881 . ./myread
5882 perladmin="$ans"
5883
5884 : figure out how to guarantee perl startup
5885 case "$startperl" in
5886 '')
5887         case "$sharpbang" in
5888         *!)
5889                 $cat <<EOH
5890
5891 I can use the #! construct to start perl on your system. This will
5892 make startup of perl scripts faster, but may cause problems if you
5893 want to share those scripts and perl is not in a standard place
5894 ($binexp/perl) on all your platforms. The alternative is to force
5895 a shell by starting the script with a single ':' character.
5896
5897 EOH
5898                 dflt="$binexp/perl"
5899                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5900                 . ./myread
5901                 case "$ans" in
5902                 none)   startperl=": # use perl";;
5903                 *)      startperl="#!$ans"
5904                         if $test 30 -lt `echo "$ans" | wc -c`; then
5905                                 $cat >&4 <<EOM
5906
5907 WARNING:  Some systems limit the #! command to 32 characters.
5908 If you experience difficulty running Perl scripts with #!, try
5909 installing Perl in a directory with a shorter pathname.
5910
5911 EOM
5912                         fi ;;
5913                 esac
5914                 ;;
5915         *) startperl=": # use perl"
5916                 ;;
5917         esac
5918         ;;
5919 esac
5920 echo "I'll use $startperl to start perl scripts."
5921
5922 : figure best path for perl in scripts
5923 case "$perlpath" in
5924 '')
5925         perlpath="$binexp/perl"
5926         case "$startperl" in
5927         *!*) ;;
5928         *)
5929                 $cat <<EOH
5930
5931 I will use the "eval 'exec'" idiom to start Perl on your system.
5932 I can use the full path of your Perl binary for this purpose, but
5933 doing so may cause problems if you want to share those scripts and
5934 Perl is not always in a standard place ($binexp/perl).
5935
5936 EOH
5937                 dflt="$binexp/perl"
5938                 rp="What path shall I use in \"eval 'exec'\"?"
5939                 . ./myread
5940                 perlpath="$ans"
5941                 ;;
5942         esac
5943         ;;
5944 esac
5945 case "$startperl" in
5946 *!*)    ;;
5947 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
5948 esac
5949
5950 : determine where public executable scripts go
5951 set scriptdir scriptdir
5952 eval $prefixit
5953 case "$scriptdir" in
5954 '')
5955         dflt="$bin"
5956         : guess some guesses
5957         $test -d /usr/share/scripts && dflt=/usr/share/scripts
5958         $test -d /usr/share/bin && dflt=/usr/share/bin
5959         $test -d /usr/local/script && dflt=/usr/local/script
5960         $test -d $prefixexp/script && dflt=$prefixexp/script
5961         set dflt
5962         eval $prefixup
5963         ;;
5964 *)  dflt="$scriptdir"
5965         ;;
5966 esac
5967 $cat <<EOM
5968  
5969 Some installations have a separate directory just for executable scripts so
5970 that they can mount it across multiple architectures but keep the scripts in
5971 one spot.  You might, for example, have a subdirectory of /usr/share for this.
5972 Or you might just lump your scripts in with all your other executables.
5973  
5974 EOM
5975 fn=d~
5976 rp='Where do you keep publicly executable scripts?'
5977 . ./getfile
5978 if $test "X$ansexp" != "X$scriptdirexp"; then
5979         installscript=''
5980 fi
5981 scriptdir="$ans"
5982 scriptdirexp="$ansexp"
5983 if $afs; then
5984         $cat <<EOM
5985
5986 Since you are running AFS, I need to distinguish the directory in which
5987 scripts reside from the directory in which they are installed (and from
5988 which they are presumably copied to the former directory by occult means).
5989
5990 EOM
5991         case "$installscript" in
5992         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
5993         *) dflt="$installscript";;
5994         esac
5995         fn=de~
5996         rp='Where will public scripts be installed?'
5997         . ./getfile
5998         installscript="$ans"
5999 else
6000         installscript="$scriptdirexp"
6001 fi
6002
6003 : determine where site specific libraries go.
6004 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6005 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6006 case "$prefix" in
6007 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6008 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6009 esac
6010 eval $prefixit
6011 $cat <<EOM
6012
6013 The installation process will also create a directory for
6014 site-specific extensions and modules.  Some users find it convenient
6015 to place all local files in this directory rather than in the main
6016 distribution directory.
6017
6018 EOM
6019 fn=d~+
6020 rp='Pathname for the site-specific library files?'
6021 . ./getfile
6022 if $test "X$sitelibexp" != "X$ansexp"; then
6023         installsitelib=''
6024 fi
6025 sitelib="$ans"
6026 sitelibexp="$ansexp"
6027 if $afs; then
6028         $cat <<EOM
6029
6030 Since you are running AFS, I need to distinguish the directory in
6031 which site-specific files reside from the directory in which they are
6032 installed (and from which they are presumably copied to the former
6033 directory by occult means).
6034
6035 EOM
6036         case "$installsitelib" in
6037         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6038         *) dflt="$installsitelib";;
6039         esac
6040         fn=de~
6041         rp='Where will site-specific files be installed?'
6042         . ./getfile
6043         installsitelib="$ans"
6044 else
6045         installsitelib="$sitelibexp"
6046 fi
6047
6048 : determine where site specific architecture-dependent libraries go.
6049 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6050 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6051 : sitelib may have an optional trailing /share.
6052 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6053 tdflt="$tdflt/$archname"
6054 set sitearch sitearch none
6055 eval $prefixit
6056 case "$sitearch" in
6057 '')     dflt="$tdflt" ;;
6058 *)      dflt="$sitearch" ;;
6059 esac
6060 $cat <<EOM
6061
6062 The installation process will also create a directory for
6063 architecture-dependent site-specific extensions and modules.
6064
6065 EOM
6066 fn=nd~+
6067 rp='Pathname for the site-specific architecture-dependent library files?'
6068 . ./getfile
6069 if $test "X$sitearchexp" != "X$ansexp"; then
6070         installsitearch=''
6071 fi
6072 sitearch="$ans"
6073 sitearchexp="$ansexp"
6074 if $afs; then
6075         $cat <<EOM
6076
6077 Since you are running AFS, I need to distinguish the directory in
6078 which site-specific architecture-dependent library files reside from
6079 the directory in which they are installed (and from which they are
6080 presumably copied to the former directory by occult means).
6081
6082 EOM
6083         case "$installsitearch" in
6084         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6085         *) dflt="$installsitearch";;
6086         esac
6087         fn=de~
6088         rp='Where will site-specific architecture-dependent files be installed?'
6089         . ./getfile
6090         installsitearch="$ans"
6091 else
6092         installsitearch="$sitearchexp"
6093 fi
6094
6095 cat <<EOM
6096
6097 Previous version of $package used the standard IO mechanisms as defined
6098 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6099 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6100 the default.  This abstraction layer can use AT&T's sfio (if you already
6101 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6102 problems with some extension modules.  Using PerlIO with stdio is safe,
6103 but it is slower than plain stdio and therefore is not the default.
6104
6105 If this doesn't make any sense to you, just accept the default 'n'.
6106 EOM
6107 case "$useperlio" in
6108 $define|true|[yY]*)     dflt='y';;
6109 *) dflt='n';;
6110 esac
6111 rp='Use the experimental PerlIO abstraction layer?'
6112 . ./myread
6113 case "$ans" in
6114 y|Y) 
6115         val="$define"
6116         ;;     
6117 *)      
6118         echo "Ok, doing things the stdio way"
6119         val="$undef"
6120         ;;
6121 esac
6122 set useperlio
6123 eval $setvar 
6124
6125 : Check how to convert floats to strings.
6126 if test "X$d_Gconvert" = X; then
6127         echo " "
6128         echo "Checking for an efficient way to convert floats to strings."
6129         $cat >try.c <<'EOP'
6130 #ifdef TRY_gconvert
6131 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6132 char *myname = "gconvert";
6133 #endif
6134 #ifdef TRY_gcvt
6135 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6136 char *myname = "gcvt";
6137 #endif
6138 #ifdef TRY_sprintf
6139 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6140 char *myname = "sprintf";
6141 #endif
6142
6143 #include <stdio.h>
6144
6145 int
6146 checkit(expect, got)
6147 char *expect;
6148 char *got;
6149 {
6150     if (strcmp(expect, got)) {
6151                 printf("%s oddity:  Expected %s, got %s\n",
6152                         myname, expect, got);
6153                 exit(1);
6154         }
6155 }
6156
6157 int
6158 main()
6159
6160         char buf[64]; 
6161         buf[63] = '\0';
6162
6163         /* This must be 1st test on (which?) platform */
6164         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6165         Gconvert(0.1, 8, 0, buf);
6166         checkit("0.1", buf);
6167
6168         Gconvert(1.0, 8, 0, buf); 
6169         checkit("1", buf);
6170
6171         Gconvert(0.0, 8, 0, buf); 
6172         checkit("0", buf);
6173
6174         Gconvert(-1.0, 8, 0, buf); 
6175         checkit("-1", buf);
6176
6177         /* Some Linux gcvt's give 1.e+5 here. */
6178         Gconvert(100000.0, 8, 0, buf); 
6179         checkit("100000", buf);
6180         
6181         /* Some Linux gcvt's give -1.e+5 here. */
6182         Gconvert(-100000.0, 8, 0, buf); 
6183         checkit("-100000", buf);
6184
6185         exit(0);
6186 }
6187 EOP
6188         case "$d_Gconvert" in
6189         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6190         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6191         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6192         *) xxx_list='gconvert gcvt sprintf' ;;
6193         esac
6194
6195         for xxx_convert in $xxx_list; do
6196                 echo "Trying $xxx_convert"
6197                 $rm -f try try$_o
6198                 set try -DTRY_$xxx_convert
6199                 if eval $compile; then
6200                         echo "$xxx_convert" found. >&4
6201                         if ./try; then
6202                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6203                                 break;
6204                         else
6205                                 echo "...But $xxx_convert didn't work as I expected."
6206                         fi
6207                 else
6208                         echo "$xxx_convert NOT found." >&4
6209                 fi
6210         done
6211                 
6212         case "$xxx_convert" in
6213         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6214         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6215         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6216         esac
6217 fi
6218
6219 : Initialize h_fcntl
6220 h_fcntl=false
6221
6222 : Initialize h_sysfile
6223 h_sysfile=false
6224
6225 : access call always available on UNIX
6226 set access d_access
6227 eval $inlibc
6228
6229 : locate the flags for 'access()'
6230 case "$d_access" in
6231 "$define")
6232         echo " "
6233         $cat >access.c <<'EOCP'
6234 #include <sys/types.h>
6235 #ifdef I_FCNTL
6236 #include <fcntl.h>
6237 #endif
6238 #ifdef I_SYS_FILE
6239 #include <sys/file.h>
6240 #endif
6241 #ifdef I_UNISTD
6242 #include <unistd.h>
6243 #endif
6244 main() {
6245         exit(R_OK);
6246 }
6247 EOCP
6248         : check sys/file.h first, no particular reason here
6249         if $test `./findhdr sys/file.h` && \
6250                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6251                 h_sysfile=true;
6252                 echo "<sys/file.h> defines the *_OK access constants." >&4
6253         elif $test `./findhdr fcntl.h` && \
6254                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6255                 h_fcntl=true;
6256                 echo "<fcntl.h> defines the *_OK access constants." >&4
6257         elif $test `./findhdr unistd.h` && \
6258                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6259                 echo "<unistd.h> defines the *_OK access constants." >&4
6260         else
6261                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6262         fi
6263         ;;
6264 esac
6265 $rm -f access*
6266
6267 : see if accessx exists
6268 set accessx d_accessx
6269 eval $inlibc
6270
6271 : see if alarm exists
6272 set alarm d_alarm
6273 eval $inlibc
6274
6275 : Look for GNU-cc style attribute checking
6276 echo " "
6277 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6278 $cat >attrib.c <<'EOCP'
6279 #include <stdio.h>
6280 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6281 EOCP
6282 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6283         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6284                 echo "Your C compiler doesn't fully support __attribute__."
6285                 val="$undef"
6286         else
6287                 echo "Your C compiler supports __attribute__."
6288                 val="$define"
6289         fi
6290 else
6291         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6292         val="$undef"
6293 fi
6294 set d_attribut
6295 eval $setvar
6296 $rm -f attrib*
6297
6298 : see if bcmp exists
6299 set bcmp d_bcmp
6300 eval $inlibc
6301
6302 : see if bcopy exists
6303 set bcopy d_bcopy
6304 eval $inlibc
6305
6306 : see if this is a unistd.h system
6307 set unistd.h i_unistd
6308 eval $inhdr
6309
6310 : see if getpgrp exists
6311 set getpgrp d_getpgrp
6312 eval $inlibc
6313
6314 case "$d_getpgrp" in
6315 "$define")
6316         echo " "
6317         echo "Checking to see which flavor of getpgrp is in use..."
6318         $cat >set.c <<EOP
6319 #$i_unistd I_UNISTD
6320 #include <sys/types.h>
6321 #ifdef I_UNISTD
6322 #  include <unistd.h>
6323 #endif
6324 main()
6325 {
6326         if (getuid() == 0) {
6327                 printf("(I see you are running Configure as super-user...)\n");
6328                 setuid(1);
6329         }
6330 #ifdef TRY_BSD_PGRP
6331         if (getpgrp(1) == 0)
6332                 exit(0);
6333 #else
6334         if (getpgrp() > 0)
6335                 exit(0);
6336 #endif
6337         exit(1);
6338 }
6339 EOP
6340         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6341                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6342                 val="$define"
6343         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6344                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6345                 val="$undef"
6346         else
6347                 echo "I can't seem to compile and run the test program."
6348                 if ./usg; then
6349                         xxx="a USG one, i.e. you use getpgrp()."
6350                 else
6351                         # SVR4 systems can appear rather BSD-ish.
6352                         case "$i_unistd" in
6353                         $undef)
6354                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6355                                 val="$define"
6356                                 ;;
6357                         $define)
6358                                 xxx="probably a USG one, i.e. you use getpgrp()."
6359                                 val="$undef"
6360                                 ;;
6361                         esac
6362                 fi
6363                 echo "Assuming your getpgrp is $xxx" >&4
6364         fi
6365         ;;
6366 *) val="$undef";;
6367 esac
6368 set d_bsdgetpgrp
6369 eval $setvar
6370 $rm -f set set.c
6371
6372 : see if setpgrp exists
6373 set setpgrp d_setpgrp
6374 eval $inlibc
6375
6376 case "$d_setpgrp" in
6377 "$define")
6378         echo " "
6379         echo "Checking to see which flavor of setpgrp is in use..."
6380         $cat >set.c <<EOP
6381 #$i_unistd I_UNISTD
6382 #include <sys/types.h>
6383 #ifdef I_UNISTD
6384 #  include <unistd.h>
6385 #endif
6386 main()
6387 {
6388         if (getuid() == 0) {
6389                 printf("(I see you are running Configure as super-user...)\n");
6390                 setuid(1);
6391         }
6392 #ifdef TRY_BSD_PGRP
6393         if (-1 == setpgrp(1, 1))
6394                 exit(0);
6395 #else
6396         if (setpgrp() != -1)
6397                 exit(0);
6398 #endif
6399         exit(1);
6400 }
6401 EOP
6402         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6403                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6404                 val="$define"
6405         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6406                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6407                 val="$undef"
6408         else
6409                 echo "(I can't seem to compile and run the test program.)"
6410                 if ./usg; then
6411                         xxx="a USG one, i.e. you use setpgrp()."
6412                 else
6413                         # SVR4 systems can appear rather BSD-ish.
6414                         case "$i_unistd" in
6415                         $undef)
6416                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6417                                 val="$define"
6418                                 ;;
6419                         $define)
6420                                 xxx="probably a USG one, i.e. you use setpgrp()."
6421                                 val="$undef"
6422                                 ;;
6423                         esac
6424                 fi
6425                 echo "Assuming your setpgrp is $xxx" >&4
6426         fi
6427         ;;
6428 *) val="$undef";;
6429 esac
6430 set d_bsdsetpgrp
6431 eval $setvar
6432 $rm -f set set.c
6433 : see if bzero exists
6434 set bzero d_bzero
6435 eval $inlibc
6436
6437 : check for lengths of integral types
6438 echo " "
6439 case "$intsize" in
6440 '')
6441         echo "Checking to see how big your integers are..." >&4
6442         $cat >intsize.c <<'EOCP'
6443 #include <stdio.h>
6444 main()
6445 {
6446         printf("intsize=%d;\n", sizeof(int));
6447         printf("longsize=%d;\n", sizeof(long));
6448         printf("shortsize=%d;\n", sizeof(short));
6449         exit(0);
6450 }
6451 EOCP
6452         set intsize
6453         if eval $compile_ok && ./intsize > /dev/null; then
6454                 eval `./intsize`
6455                 echo "Your integers are $intsize bytes long."
6456                 echo "Your long integers are $longsize bytes long."
6457                 echo "Your short integers are $shortsize bytes long."
6458         else
6459                 $cat >&4 <<EOM
6460 !
6461 Help! I can't compile and run the intsize test program: please enlighten me!
6462 (This is probably a misconfiguration in your system or libraries, and
6463 you really ought to fix it.  Still, I'll try anyway.)
6464 !
6465 EOM
6466                 dflt=4
6467                 rp="What is the size of an integer (in bytes)?"
6468                 . ./myread
6469                 intsize="$ans"
6470                 dflt=$intsize
6471                 rp="What is the size of a long integer (in bytes)?"
6472                 . ./myread
6473                 longsize="$ans"
6474                 dflt=2
6475                 rp="What is the size of a short integer (in bytes)?"
6476                 . ./myread
6477                 shortsize="$ans"
6478         fi
6479         ;;
6480 esac
6481 $rm -f intsize intsize.*
6482
6483 : see if signal is declared as pointer to function returning int or void
6484 echo " "
6485 xxx=`./findhdr signal.h`
6486 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6487 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6488         echo "You have int (*signal())() instead of void." >&4
6489         val="$undef"
6490 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6491         echo "You have void (*signal())()." >&4
6492         val="$define"
6493 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6494         echo "You have int (*signal())() instead of void." >&4
6495         val="$undef"
6496 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6497         echo "You have void (*signal())()." >&4
6498         val="$define"
6499 else
6500         case "$d_voidsig" in
6501         '')
6502         echo "I can't determine whether signal handler returns void or int..." >&4
6503                 dflt=void
6504                 rp="What type does your signal handler return?"
6505                 . ./myread
6506                 case "$ans" in
6507                 v*) val="$define";;
6508                 *) val="$undef";;
6509                 esac;;
6510         "$define")
6511                 echo "As you already told me, signal handler returns void." >&4
6512                 val="$define"
6513                 ;;
6514         *)      echo "As you already told me, signal handler returns int." >&4
6515                 val="$undef"
6516                 ;;
6517         esac
6518 fi
6519 set d_voidsig
6520 eval $setvar
6521 case "$d_voidsig" in
6522 "$define") signal_t="void";;
6523 *) signal_t="int";;
6524 esac
6525 $rm -f $$.tmp
6526
6527 : check for ability to cast large floats to 32-bit ints.
6528 echo " "
6529 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6530 if $test "$intsize" -ge 4; then
6531         xxx=int
6532 else
6533         xxx=long
6534 fi
6535 $cat >try.c <<EOCP
6536 #include <stdio.h>
6537 #include <sys/types.h>
6538 #include <signal.h>
6539 $signal_t blech(s) int s; { exit(3); }
6540 main()
6541 {
6542         $xxx i32;
6543         double f, g;
6544         int result = 0;
6545         char str[16];
6546         signal(SIGFPE, blech);
6547
6548         /* Don't let compiler optimize the test away.  Store the number 
6549            in a writable string for gcc to pass to sscanf under HP/UX.
6550         */
6551         sprintf(str, "2147483647");
6552         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6553         g = 10 * f;
6554         i32  = ($xxx) g;
6555
6556         /* x86 processors will probably give 0x8000 0000, which is a
6557        sign change.  We don't want that.  We want to mimic SPARC
6558            behavior here, which is to preserve the sign and give
6559            back 0x7fff ffff.
6560         */
6561         if (i32 != ($xxx) f)
6562                 result |= 1;
6563         exit(result);
6564 }
6565 EOCP
6566 set try
6567 if eval $compile_ok; then
6568         ./try
6569         yyy=$?
6570 else
6571         echo "(I can't seem to compile the test program--assuming it can't)"
6572         yyy=1
6573 fi
6574 case "$yyy" in
6575 0)      val="$define"
6576         echo "Yup, it can."
6577         ;;
6578 *)      val="$undef"
6579         echo "Nope, it can't."
6580         ;;
6581 esac
6582 set d_casti32
6583 eval $setvar
6584 $rm -f try try.*
6585
6586 : check for ability to cast negative floats to unsigned
6587 echo " "
6588 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6589 $cat >try.c <<EOCP
6590 #include <stdio.h>
6591 #include <sys/types.h>
6592 #include <signal.h>
6593 $signal_t blech(s) int s; { exit(7); }
6594 $signal_t blech_in_list(s) int s; { exit(4); }
6595 unsigned long dummy_long(p) unsigned long p; { return p; }
6596 unsigned int dummy_int(p) unsigned int p; { return p; }
6597 unsigned short dummy_short(p) unsigned short p; { return p; }
6598 main()
6599 {
6600         double f;
6601         unsigned long along;
6602         unsigned int aint;
6603         unsigned short ashort;
6604         int result = 0;
6605         char str[16];
6606         
6607         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6608            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6609            optimized the whole file away
6610         */
6611         /* Store the number in a writable string for gcc to pass to 
6612            sscanf under HP/UX.
6613         */
6614         sprintf(str, "-123");
6615         sscanf(str, "%lf", &f);  /* f = -123.; */
6616
6617         signal(SIGFPE, blech);
6618         along = (unsigned long)f;
6619         aint = (unsigned int)f;
6620         ashort = (unsigned short)f;
6621         if (along != (unsigned long)-123)
6622                 result |= 1;
6623         if (aint != (unsigned int)-123)
6624                 result |= 1;
6625         if (ashort != (unsigned short)-123)
6626                 result |= 1;
6627         sprintf(str, "1073741824.");
6628         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6629         f = f + f;
6630         along = 0;
6631         along = (unsigned long)f;
6632         if (along != 0x80000000)
6633                 result |= 2;
6634         f -= 1.;
6635         along = 0;
6636         along = (unsigned long)f;
6637         if (along != 0x7fffffff)
6638                 result |= 1;
6639         f += 2.;
6640         along = 0;
6641         along = (unsigned long)f;
6642         if (along != 0x80000001)
6643                 result |= 2;
6644         if (result)
6645                 exit(result);
6646         signal(SIGFPE, blech_in_list);
6647         sprintf(str, "123.");
6648         sscanf(str, "%lf", &f);  /* f = 123.; */
6649         along = dummy_long((unsigned long)f);
6650         aint = dummy_int((unsigned int)f);
6651         ashort = dummy_short((unsigned short)f);
6652         if (along != (unsigned long)123)
6653                 result |= 4;
6654         if (aint != (unsigned int)123)
6655                 result |= 4;
6656         if (ashort != (unsigned short)123)
6657                 result |= 4;
6658         exit(result);
6659
6660 }
6661 EOCP
6662 set try
6663 if eval $compile_ok; then
6664         ./try
6665         castflags=$?
6666 else
6667         echo "(I can't seem to compile the test program--assuming it can't)"
6668         castflags=7
6669 fi
6670 case "$castflags" in
6671 0)      val="$define"
6672         echo "Yup, it can."
6673         ;;
6674 *)      val="$undef"
6675         echo "Nope, it can't."
6676         ;;
6677 esac
6678 set d_castneg
6679 eval $setvar
6680 $rm -f try.*
6681
6682 : see if vprintf exists
6683 echo " "
6684 if set vprintf val -f d_vprintf; eval $csym; $val; then
6685         echo 'vprintf() found.' >&4
6686         val="$define"
6687         $cat >vprintf.c <<'EOF'
6688 #include <varargs.h>
6689
6690 main() { xxx("foo"); }
6691
6692 xxx(va_alist)
6693 va_dcl
6694 {
6695         va_list args;
6696         char buf[10];
6697
6698         va_start(args);
6699         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6700 }
6701 EOF
6702         set vprintf
6703         if eval $compile && ./vprintf; then
6704                 echo "Your vsprintf() returns (int)." >&4
6705                 val2="$undef"
6706         else
6707                 echo "Your vsprintf() returns (char*)." >&4
6708                 val2="$define"
6709         fi
6710 else
6711         echo 'vprintf() NOT found.' >&4
6712                 val="$undef"
6713                 val2="$undef"
6714 fi
6715 set d_vprintf
6716 eval $setvar
6717 val=$val2
6718 set d_charvspr
6719 eval $setvar
6720
6721 : see if chown exists
6722 set chown d_chown
6723 eval $inlibc
6724
6725 : see if chroot exists
6726 set chroot d_chroot
6727 eval $inlibc
6728
6729 : see if chsize exists
6730 set chsize d_chsize
6731 eval $inlibc
6732
6733 : check for const keyword
6734 echo " "
6735 echo 'Checking to see if your C compiler knows about "const"...' >&4
6736 $cat >const.c <<'EOCP'
6737 typedef struct spug { int drokk; } spug;
6738 main()
6739 {
6740         const char *foo;
6741         const spug y;
6742 }
6743 EOCP
6744 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
6745         val="$define"
6746         echo "Yup, it does."
6747 else
6748         val="$undef"
6749         echo "Nope, it doesn't."
6750 fi
6751 set d_const
6752 eval $setvar
6753
6754 : see if crypt exists
6755 echo " "
6756 if set crypt val -f d_crypt; eval $csym; $val; then
6757         echo 'crypt() found.' >&4
6758         val="$define"
6759         cryptlib=''
6760 else
6761         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
6762         if $test -z "$cryptlib"; then
6763                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
6764         else
6765                 cryptlib=-lcrypt
6766         fi
6767         if $test -z "$cryptlib"; then
6768                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
6769         else
6770                 cryptlib=-lcrypt
6771         fi
6772         if $test -z "$cryptlib"; then
6773                 cryptlib=`./loc libcrypt$_a "" $libpth`
6774         else
6775                 cryptlib=-lcrypt
6776         fi
6777         if $test -z "$cryptlib"; then
6778                 echo 'crypt() NOT found.' >&4
6779                 val="$undef"
6780         else
6781                 val="$define"
6782         fi
6783 fi
6784 set d_crypt
6785 eval $setvar
6786
6787 : see if cuserid exists
6788 set cuserid d_cuserid
6789 eval $inlibc
6790
6791 : see if this is a limits.h system
6792 set limits.h i_limits
6793 eval $inhdr
6794
6795 : see if this is a float.h system
6796 set float.h i_float
6797 eval $inhdr
6798
6799 : See if number of significant digits in a double precision number is known
6800 echo " "
6801 $cat >dbl_dig.c <<EOM
6802 #$i_limits I_LIMITS
6803 #$i_float I_FLOAT
6804 #ifdef I_LIMITS
6805 #include <limits.h>
6806 #endif
6807 #ifdef I_FLOAT
6808 #include <float.h>
6809 #endif
6810 #ifdef DBL_DIG
6811 printf("Contains DBL_DIG");
6812 #endif
6813 EOM
6814 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
6815 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
6816         echo "DBL_DIG found." >&4
6817         val="$define"
6818 else
6819         echo "DBL_DIG NOT found." >&4
6820         val="$undef"
6821 fi
6822 $rm -f dbl_dig.?
6823 set d_dbl_dig
6824 eval $setvar
6825
6826
6827 if $test X"$use64bits" = X"$define"; then
6828         : see if dbminit64 exists
6829         set dbminit64 d_dbminit64
6830         eval $inlibc
6831
6832         : see if dbmclose64 exists
6833         set dbmclose64 d_dbmclose64
6834         eval $inlibc
6835
6836         : see if fetch64 exists
6837         set fetch64 d_fetch64
6838         eval $inlibc
6839
6840         : see if store64 exists
6841         set store64 d_store64
6842         eval $inlibc
6843
6844         : see if delete64 exists
6845         set delete64 d_delete64
6846         eval $inlibc
6847
6848         : see if firstkey64 exists
6849         set firstkey64 d_firstkey64
6850         eval $inlibc
6851
6852         : see if nextkey64 exists
6853         set nextkey64 d_nextkey64
6854         eval $inlibc
6855 else
6856         val="$undef"
6857         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
6858         do
6859                 set $xxx
6860                 eval $setvar
6861         done
6862 fi
6863
6864 : see if difftime exists
6865 set difftime d_difftime
6866 eval $inlibc
6867
6868 : see if sys/stat.h is available
6869 set sys/stat.h i_sysstat
6870 eval $inhdr
6871
6872 : see if this is a dirent system
6873 echo " "
6874 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
6875         val="$define"
6876         echo "<dirent.h> found." >&4
6877 else
6878         val="$undef"
6879         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
6880                 echo "<sys/dir.h> found." >&4
6881                 echo " "
6882         else
6883                 xinc=`./findhdr sys/ndir.h`
6884         fi
6885         echo "<dirent.h> NOT found." >&4
6886 fi
6887 set i_dirent
6888 eval $setvar
6889
6890 : Look for type of directory structure.
6891 echo " "
6892 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6893
6894 case "$direntrytype" in
6895 ''|' ')
6896         case "$i_dirent" in
6897         $define) guess1='struct dirent' ;;
6898         *) guess1='struct direct'  ;;
6899         esac
6900         ;;
6901 *)      guess1="$direntrytype"
6902         ;;
6903 esac
6904
6905 case "$guess1" in
6906 'struct dirent') guess2='struct direct' ;;
6907 *) guess2='struct dirent' ;;
6908 esac
6909                 
6910 if $contains "$guess1" try.c >/dev/null 2>&1; then
6911         direntrytype="$guess1"
6912         echo "Your directory entries are $direntrytype." >&4
6913 elif $contains "$guess2" try.c >/dev/null 2>&1; then
6914         direntrytype="$guess2"
6915         echo "Your directory entries seem to be $direntrytype." >&4
6916 else
6917         echo "I don't recognize your system's directory entries." >&4
6918         rp="What type is used for directory entries on this system?"
6919         dflt="$guess1"
6920         . ./myread
6921         direntrytype="$ans"
6922 fi
6923 $rm -f try.c
6924
6925
6926 : see if the directory entry stores field length
6927 echo " "
6928 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6929 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
6930         echo "Good, your directory entry keeps length information in d_namlen." >&4
6931         val="$define"
6932 else
6933         echo "Your directory entry does not know about the d_namlen field." >&4
6934         val="$undef"
6935 fi
6936 set d_dirnamlen
6937 eval $setvar
6938 $rm -f try.c
6939
6940 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6941 while $test $# -ge 2; do
6942         case "$1" in
6943         $define) echo "#include <$2>";;
6944         esac ;
6945     shift 2;
6946 done > try.c;
6947 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6948 if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6949         val="$define";
6950 else
6951         val="$undef";
6952 fi;
6953 set $varname;
6954 eval $setvar;
6955 $rm -f try.c try.o'
6956
6957
6958 if $test X"$use64bits" = X"$define"; then
6959         : see if fstat64 exists
6960         set fstat64 d_fstat64
6961         eval $inlibc
6962
6963         : see if ftruncate64 exists
6964         set ftruncate64 d_ftruncate64
6965         eval $inlibc
6966
6967         : see if lockf64 exists
6968         set lockf64 d_lockf64
6969         eval $inlibc
6970
6971         : see if lseek64 exists
6972         set lseek64 d_lseek64
6973         eval $inlibc
6974
6975         : see if lstat64 exists
6976         set lstat64 d_lstat64
6977         eval $inlibc
6978
6979         : see if open64 exists
6980         set open64 d_open64
6981         eval $inlibc
6982
6983         : see if opendir64 exists
6984         set opendir64 d_opendir64
6985         eval $inlibc
6986
6987         : see if readdir64 exists
6988         set readdir64 d_readdir64
6989         eval $inlibc
6990
6991         : see if seekdir64 exists
6992         set seekdir64 d_seekdir64
6993         eval $inlibc
6994
6995         : see if stat64 exists
6996         set stat64 d_stat64
6997         eval $inlibc
6998
6999         : see if telldir64 exists
7000         set telldir64 d_telldir64
7001         eval $inlibc
7002
7003         : see if truncate64 exists
7004         set truncate64 d_truncate64
7005         eval $inlibc
7006
7007         : check for off64_t
7008         echo " "
7009         echo $n "Checking to see if your system supports off64_t...$c" >&4
7010         $cat >try.c <<EOCP
7011 #include <sys/types.h>
7012 off64_t foo() { off64_t x; x = 7; return x; }'
7013 EOCP
7014         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7015                 val="$define"
7016                 echo " Yup, it does." >&4
7017         else
7018                 val="$undef"
7019                 echo " Nope, it doesn't." >&4
7020         fi
7021         $rm -f try.*
7022         set d_off64t
7023         eval $setvar
7024
7025         : check for ino64_t
7026         echo " "
7027         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7028         val="$undef"
7029         case "$i_sysstat" in
7030         "$define" )
7031                 $cat >try.c <<EOCP
7032 #include <sys/types.h>
7033 #include <sys/stat.h>
7034 ino64_t foo() { ino64_t x; x = 7; return x; }'
7035 EOCP
7036                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7037                         val="$define"
7038                 fi
7039                 $rm -f try.*
7040                 ;;
7041         esac
7042         if $test "X$val" = X"$define"; then
7043                 echo " Yup, it does." >&4
7044         else
7045                 echo " Nope, it doesn't." >&4
7046         fi
7047         set d_ino64t
7048         eval $setvar
7049
7050         : check for struct flock64
7051         echo " "
7052         echo "Checking to see if your system supports struct flock64..." >&4
7053         if $h_fcntl; then
7054                 set d_flock64s flock64 l_len define fcntl.h
7055                 eval $hasfield
7056         else
7057                 val="$undef"
7058                 set d_flock64s
7059                 eval $setvar
7060         fi
7061         case "$d_flock64s" in
7062         "$define")      echo "Yup, it does." >&4
7063                         ;;
7064         *)              echo "Nope, it doesn't." >&4
7065                         ;;
7066         esac
7067
7068         : check for struct dirent64
7069         echo " "
7070         echo "Checking to see if your system supports struct dirent64..." >&4
7071         set d_dirent64s dirent64 d_off $i_dirent dirent.h
7072         eval $hasfield
7073         case "$d_flock64s" in
7074         "$define")      echo "Yup, it does." >&4
7075                         ;;
7076         *)              echo "Nope, it doesn't." >&4
7077                         ;;
7078         esac
7079
7080 else
7081         val="$undef"
7082         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_flock64s d_dirent64s
7083         do
7084                 set $xxx
7085                 eval $setvar
7086         done
7087 fi
7088
7089 : see if dlerror exists
7090 xxx_runnm="$runnm"
7091 runnm=false
7092 set dlerror d_dlerror
7093 eval $inlibc
7094 runnm="$xxx_runnm"
7095
7096 : see if dlfcn is available
7097 set dlfcn.h i_dlfcn
7098 eval $inhdr
7099
7100 case "$usedl" in
7101 $define|y|true)
7102         $cat << EOM
7103
7104 On a few systems, the dynamically loaded modules that perl generates and uses
7105 will need a different extension than shared libs. The default will probably
7106 be appropriate.
7107
7108 EOM
7109         case "$dlext" in
7110         '')     dflt="$so" ;;
7111         *)      dflt="$dlext" ;;
7112         esac
7113         rp='What is the extension of dynamically loaded modules'
7114         . ./myread
7115         dlext="$ans"
7116         ;;
7117 *)
7118         dlext="none"
7119         ;;
7120 esac
7121
7122 : Check if dlsym need a leading underscore
7123 echo " "
7124 val="$undef"
7125
7126 case "$dlsrc" in
7127 dl_dlopen.xs)
7128         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7129         $cat >dyna.c <<'EOM'
7130 fred () { }
7131 EOM
7132
7133 $cat >fred.c<<EOM
7134
7135 #include <stdio.h>
7136 #$i_dlfcn I_DLFCN
7137 #ifdef I_DLFCN
7138 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7139 #else
7140 #include <sys/types.h>
7141 #include <nlist.h>
7142 #include <link.h>
7143 #endif
7144
7145 extern int fred() ;
7146
7147 main()
7148 {
7149     void * handle ;
7150     void * symbol ;
7151 #ifndef RTLD_LAZY
7152     int mode = 1 ;
7153 #else
7154     int mode = RTLD_LAZY ;
7155 #endif
7156     handle = dlopen("./dyna.$dlext", mode) ;
7157     if (handle == NULL) {
7158         printf ("1\n") ;
7159         fflush (stdout) ;
7160         exit(0);
7161     }
7162     symbol = dlsym(handle, "fred") ;
7163     if (symbol == NULL) {
7164         /* try putting a leading underscore */
7165         symbol = dlsym(handle, "_fred") ;
7166         if (symbol == NULL) {
7167             printf ("2\n") ;
7168             fflush (stdout) ;
7169             exit(0);
7170         }
7171         printf ("3\n") ;
7172     }
7173     else
7174         printf ("4\n") ;
7175     fflush (stdout) ;
7176     exit(0);
7177 }
7178 EOM
7179         : Call the object file tmp-dyna.o in case dlext=o.
7180         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7181                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7182                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7183                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7184                 xxx=`./fred`
7185                 case $xxx in
7186                 1)      echo "Test program failed using dlopen." >&4
7187                         echo "Perhaps you should not use dynamic loading." >&4;;
7188                 2)      echo "Test program failed using dlsym." >&4
7189                         echo "Perhaps you should not use dynamic loading." >&4;;
7190                 3)      echo "dlsym needs a leading underscore" >&4
7191                         val="$define" ;;
7192                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7193                 esac
7194         else
7195                 echo "I can't compile and run the test program." >&4
7196         fi
7197         ;;
7198 esac
7199                 
7200 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7201
7202 set d_dlsymun
7203 eval $setvar
7204
7205 hasproto='varname=$1; func=$2; shift; shift;
7206 while $test $# -ge 2; do
7207         case "$1" in
7208         $define) echo "#include <$2>";;
7209         esac ;
7210     shift 2;
7211 done > try.c;
7212 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7213 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7214         echo "$func() prototype found.";
7215         val="$define";
7216 else
7217         echo "$func() prototype NOT found.";
7218         val="$undef";
7219 fi;
7220 set $varname;
7221 eval $setvar;
7222 $rm -f try.c tryout.c'
7223
7224 : see if prototype for drand48 is available
7225 echo " "
7226 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7227 eval $hasproto
7228
7229 : see if dup2 exists
7230 set dup2 d_dup2
7231 eval $inlibc
7232
7233 : see if eaccess exists
7234 set eaccess d_eaccess
7235 eval $inlibc
7236
7237 : see if endgrent exists
7238 set endgrent d_endgrent
7239 eval $inlibc
7240
7241 : see if endhostent exists
7242 set endhostent d_endhent
7243 eval $inlibc
7244
7245 : see if endnetent exists
7246 set endnetent d_endnent
7247 eval $inlibc
7248
7249 : see if endprotoent exists
7250 set endprotoent d_endpent
7251 eval $inlibc
7252
7253 : see if endpwent exists
7254 set endpwent d_endpwent
7255 eval $inlibc
7256
7257 : see if endservent exists
7258 set endservent d_endsent
7259 eval $inlibc
7260
7261 : Locate the flags for 'open()'
7262 echo " "
7263 $cat >open3.c <<'EOCP'
7264 #include <sys/types.h>
7265 #ifdef I_FCNTL
7266 #include <fcntl.h>
7267 #endif
7268 #ifdef I_SYS_FILE
7269 #include <sys/file.h>
7270 #endif
7271 main() {
7272         if(O_RDONLY);
7273 #ifdef O_TRUNC
7274         exit(0);
7275 #else
7276         exit(1);
7277 #endif
7278 }
7279 EOCP
7280 : check sys/file.h first to get FREAD on Sun
7281 if $test `./findhdr sys/file.h` && \
7282                 set open3 -DI_SYS_FILE && eval $compile; then
7283         h_sysfile=true;
7284         echo "<sys/file.h> defines the O_* constants..." >&4
7285         if ./open3; then
7286                 echo "and you have the 3 argument form of open()." >&4
7287                 val="$define"
7288         else
7289                 echo "but not the 3 argument form of open().  Oh, well." >&4
7290                 val="$undef"
7291         fi
7292 elif $test `./findhdr fcntl.h` && \
7293                 set open3 -DI_FCNTL && eval $compile; then
7294         h_fcntl=true;
7295         echo "<fcntl.h> defines the O_* constants..." >&4
7296         if ./open3; then
7297                 echo "and you have the 3 argument form of open()." >&4
7298                 val="$define"
7299         else
7300                 echo "but not the 3 argument form of open().  Oh, well." >&4
7301                 val="$undef"
7302         fi
7303 else
7304         val="$undef"
7305         echo "I can't find the O_* constant definitions!  You got problems." >&4
7306 fi
7307 set d_open3
7308 eval $setvar
7309 $rm -f open3*
7310
7311 : check for non-blocking I/O stuff
7312 case "$h_sysfile" in
7313 true) echo "#include <sys/file.h>" > head.c;;
7314 *)
7315         case "$h_fcntl" in
7316         true) echo "#include <fcntl.h>" > head.c;;
7317         *) echo "#include <sys/fcntl.h>" > head.c;;
7318         esac
7319         ;;
7320 esac
7321 echo " "
7322 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7323 case "$o_nonblock" in
7324 '')
7325         $cat head.c > try.c
7326         $cat >>try.c <<'EOCP'
7327 main() {
7328 #ifdef O_NONBLOCK
7329         printf("O_NONBLOCK\n");
7330         exit(0);
7331 #endif
7332 #ifdef O_NDELAY
7333         printf("O_NDELAY\n");
7334         exit(0);
7335 #endif
7336 #ifdef FNDELAY
7337         printf("FNDELAY\n");
7338         exit(0);
7339 #endif
7340         exit(0);
7341 }
7342 EOCP
7343         set try
7344         if eval $compile_ok; then
7345                 o_nonblock=`./try`
7346                 case "$o_nonblock" in
7347                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7348                 *) echo "Seems like we can use $o_nonblock.";;
7349                 esac
7350         else
7351                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7352         fi
7353         ;;
7354 *) echo "Using $hint value $o_nonblock.";;
7355 esac
7356 $rm -f try try.* .out core
7357
7358 echo " "
7359 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7360 case "$eagain" in
7361 '')
7362         $cat head.c > try.c
7363         $cat >>try.c <<EOCP
7364 #include <errno.h>
7365 #include <sys/types.h>
7366 #include <signal.h>
7367 #define MY_O_NONBLOCK $o_nonblock
7368 #ifndef errno  /* XXX need better Configure test */
7369 extern int errno;
7370 #endif
7371 $signal_t blech(x) int x; { exit(3); }
7372 EOCP
7373         $cat >> try.c <<'EOCP'
7374 main()
7375 {
7376         int pd[2];
7377         int pu[2];
7378         char buf[1];
7379         char string[100];
7380
7381         pipe(pd);       /* Down: child -> parent */
7382         pipe(pu);       /* Up: parent -> child */
7383         if (0 != fork()) {
7384                 int ret;
7385                 close(pd[1]);   /* Parent reads from pd[0] */
7386                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7387                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7388                         exit(1);
7389                 signal(SIGALRM, blech);
7390                 alarm(5);
7391                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7392                         exit(2);
7393                 sprintf(string, "%d\n", ret);
7394                 write(2, string, strlen(string));
7395                 alarm(0);
7396 #ifdef EAGAIN
7397                 if (errno == EAGAIN) {
7398                         printf("EAGAIN\n");
7399                         goto ok;
7400                 }
7401 #endif
7402 #ifdef EWOULDBLOCK
7403                 if (errno == EWOULDBLOCK)
7404                         printf("EWOULDBLOCK\n");
7405 #endif
7406         ok:
7407                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7408                 sleep(2);                               /* Give it time to close our pipe */
7409                 alarm(5);
7410                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7411                 alarm(0);
7412                 sprintf(string, "%d\n", ret);
7413                 write(3, string, strlen(string));
7414                 exit(0);
7415         }
7416
7417         close(pd[0]);                   /* We write to pd[1] */
7418         close(pu[1]);                   /* We read from pu[0] */
7419         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7420         close(pd[1]);                   /* Pipe pd is now fully closed! */
7421         exit(0);                                /* Bye bye, thank you for playing! */
7422 }
7423 EOCP
7424         set try
7425         if eval $compile_ok; then
7426                 echo "$startsh" >mtry
7427                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7428                 chmod +x mtry
7429                 ./mtry >/dev/null 2>&1
7430                 case $? in
7431                 0) eagain=`$cat try.out`;;
7432                 1) echo "Could not perform non-blocking setting!";;
7433                 2) echo "I did a successful read() for something that was not there!";;
7434                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7435                 *) echo "Something terribly wrong happened during testing.";;
7436                 esac
7437                 rd_nodata=`$cat try.ret`
7438                 echo "A read() system call with no data present returns $rd_nodata."
7439                 case "$rd_nodata" in
7440                 0|-1) ;;
7441                 *)
7442                         echo "(That's peculiar, fixing that to be -1.)"
7443                         rd_nodata=-1
7444                         ;;
7445                 esac
7446                 case "$eagain" in
7447                 '')
7448                         echo "Forcing errno EAGAIN on read() with no data available."
7449                         eagain=EAGAIN
7450                         ;;
7451                 *)
7452                         echo "Your read() sets errno to $eagain when no data is available."
7453                         ;;
7454                 esac
7455                 status=`$cat try.err`
7456                 case "$status" in
7457                 0) echo "And it correctly returns 0 to signal EOF.";;
7458                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7459                 *) echo "However, your read() returns '$status' on EOF??";;
7460                 esac
7461                 val="$define"
7462                 if test "$status" = "$rd_nodata"; then
7463                         echo "WARNING: you can't distinguish between EOF and no data!"
7464                         val="$undef"
7465                 fi
7466         else
7467                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7468                 eagain=EAGAIN
7469         fi
7470         set d_eofnblk
7471         eval $setvar
7472         ;;
7473 *)
7474         echo "Using $hint value $eagain."
7475         echo "Your read() returns $rd_nodata when no data is present."
7476         case "$d_eofnblk" in
7477         "$define") echo "And you can see EOF because read() returns 0.";;
7478         "$undef") echo "But you can't see EOF status from read() returned value.";;
7479         *)
7480                 echo "(Assuming you can't see EOF status from read anyway.)"
7481                 d_eofnblk=$undef
7482                 ;;
7483         esac
7484         ;;
7485 esac
7486 $rm -f try try.* .out core head.c mtry
7487
7488 : see if fchmod exists
7489 set fchmod d_fchmod
7490 eval $inlibc
7491
7492 : see if fchown exists
7493 set fchown d_fchown
7494 eval $inlibc
7495
7496 : see if this is an fcntl system
7497 set fcntl d_fcntl
7498 eval $inlibc
7499
7500 : see if fgetpos exists
7501 set fgetpos d_fgetpos
7502 eval $inlibc
7503
7504
7505 if $test X"$use64bits" = X"$define"; then
7506         : see if fgetpos64 exists
7507         set fgetpos64 d_fgetpos64
7508         eval $inlibc
7509
7510         : see if fopen64 exists
7511         set freopen64 d_fopen64
7512         eval $inlibc
7513
7514         : see if freopen64 exists
7515         set freopen64 d_freopen64
7516         eval $inlibc
7517
7518         : see if fseek64 exists
7519         set fseek64 d_fseek64
7520         eval $inlibc
7521
7522         : see if fseeko64 exists
7523         set fseeko64 d_fseeko64
7524         eval $inlibc
7525
7526         : see if fsetpos64 exists
7527         set fsetpos64 d_fsetpos64
7528         eval $inlibc
7529
7530         : see if ftell64 exists
7531         set ftell64 d_ftell64
7532         eval $inlibc
7533
7534         : see if ftello64 exists
7535         set ftello64 d_ftello64
7536         eval $inlibc
7537
7538         : see if tmpfile64 exists
7539         set tmpfile64 d_tmpfile64
7540         eval $inlibc
7541 else
7542         val="$undef"
7543         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7544         do
7545                 set $xxx
7546                 eval $setvar
7547         done
7548 fi
7549
7550 : see if flock exists
7551 set flock d_flock
7552 eval $inlibc
7553
7554 : see if fork exists
7555 set fork d_fork
7556 eval $inlibc
7557
7558 : see if pathconf exists
7559 set pathconf d_pathconf
7560 eval $inlibc
7561
7562 : see if fpathconf exists
7563 set fpathconf d_fpathconf
7564 eval $inlibc
7565
7566 : see if fseeko exists
7567 set fseeko d_fseeko
7568 eval $inlibc
7569
7570 : see if fsetpos exists
7571 set fsetpos d_fsetpos
7572 eval $inlibc
7573
7574 : see if ftello exists
7575 set ftello d_ftello
7576 eval $inlibc
7577
7578 : see if getgrent exists
7579 set getgrent d_getgrent
7580 eval $inlibc
7581
7582 : see if gethostbyaddr exists
7583 set gethostbyaddr d_gethbyaddr
7584 eval $inlibc
7585
7586 : see if gethostbyname exists
7587 set gethostbyname d_gethbyname
7588 eval $inlibc
7589
7590 : see if gethostent exists
7591 set gethostent d_gethent
7592 eval $inlibc
7593
7594 : see if this is a netdb.h system
7595 set netdb.h i_netdb
7596 eval $inhdr
7597
7598 : see if prototypes for various gethostxxx netdb.h functions are available
7599 echo " "
7600 set d_gethostprotos gethostent $i_netdb netdb.h
7601 eval $hasproto
7602
7603 : see if getlogin exists
7604 set getlogin d_getlogin
7605 eval $inlibc
7606
7607 : see if getnetbyaddr exists
7608 set getnetbyaddr d_getnbyaddr
7609 eval $inlibc
7610
7611 : see if getnetbyname exists
7612 set getnetbyname d_getnbyname
7613 eval $inlibc
7614
7615 : see if getnetent exists
7616 set getnetent d_getnent
7617 eval $inlibc
7618
7619 : see if prototypes for various getnetxxx netdb.h functions are available
7620 echo " "
7621 set d_getnetprotos getnetent $i_netdb netdb.h
7622 eval $hasproto
7623
7624
7625 : see if getprotobyname exists
7626 set getprotobyname d_getpbyname
7627 eval $inlibc
7628
7629 : see if getprotobynumber exists
7630 set getprotobynumber d_getpbynumber
7631 eval $inlibc
7632
7633 : see if getprotoent exists
7634 set getprotoent d_getpent
7635 eval $inlibc
7636
7637 : see if getpgid exists
7638 set getpgid d_getpgid
7639 eval $inlibc
7640
7641 : see if getpgrp2 exists
7642 set getpgrp2 d_getpgrp2
7643 eval $inlibc
7644
7645 : see if getppid exists
7646 set getppid d_getppid
7647 eval $inlibc
7648
7649 : see if getpriority exists
7650 set getpriority d_getprior
7651 eval $inlibc
7652
7653 : see if prototypes for various getprotoxxx netdb.h functions are available
7654 echo " "
7655 set d_getprotoprotos getprotoent $i_netdb netdb.h
7656 eval $hasproto
7657
7658 : see if getpwent exists
7659 set getpwent d_getpwent
7660 eval $inlibc
7661
7662
7663 : see if getservbyname exists
7664 set getservbyname d_getsbyname
7665 eval $inlibc
7666
7667 : see if getservbyport exists
7668 set getservbyport d_getsbyport
7669 eval $inlibc
7670
7671 : see if getservent exists
7672 set getservent d_getsent
7673 eval $inlibc
7674
7675 : see if prototypes for various getservxxx netdb.h functions are available
7676 echo " "
7677 set d_getservprotos getservent $i_netdb netdb.h
7678 eval $hasproto
7679
7680 : see if gettimeofday or ftime exists
7681 set gettimeofday d_gettimeod
7682 eval $inlibc
7683 case "$d_gettimeod" in
7684 "$undef")
7685         set ftime d_ftime 
7686         eval $inlibc
7687         ;;
7688 *)
7689         val="$undef"; set d_ftime; eval $setvar
7690         ;;
7691 esac
7692 case "$d_gettimeod$d_ftime" in
7693 "$undef$undef")
7694         echo " "
7695         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
7696         ;;
7697 esac
7698
7699 : see if this is an grp system
7700 set grp.h i_grp
7701 eval $inhdr
7702
7703 case "$i_grp" in
7704 $define)
7705         xxx=`./findhdr grp.h`
7706         $cppstdin $cppflags $cppminus < $xxx >$$.h
7707
7708         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
7709                 val="$define"
7710         else
7711                 val="$undef"
7712         fi
7713         set d_grpasswd
7714         eval $setvar
7715
7716         $rm -f $$.h
7717         ;;
7718 *)
7719         val="$undef";
7720         set d_grpasswd; eval $setvar
7721         ;;
7722 esac
7723
7724 : see if this is a netinet/in.h or sys/in.h system
7725 set netinet/in.h i_niin sys/in.h i_sysin
7726 eval $inhdr
7727
7728 : see if arpa/inet.h has to be included
7729 set arpa/inet.h i_arpainet
7730 eval $inhdr
7731
7732 : see if htonl --and friends-- exists
7733 val=''
7734 set htonl val
7735 eval $inlibc
7736
7737 : Maybe they are macros.
7738 case "$val" in
7739 $undef)
7740         $cat >htonl.c <<EOM
7741 #include <stdio.h>
7742 #include <sys/types.h>
7743 #$i_niin I_NETINET_IN
7744 #$i_sysin I_SYS_IN
7745 #$i_arpainet I_ARPA_INET
7746 #ifdef I_NETINET_IN
7747 #include <netinet/in.h>
7748 #endif
7749 #ifdef I_SYS_IN
7750 #include <sys/in.h>
7751 #endif
7752 #ifdef I_ARPA_INET
7753 #include <arpa/inet.h>
7754 #endif
7755 #ifdef htonl
7756 printf("Defined as a macro.");
7757 #endif
7758 EOM
7759         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
7760         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
7761                 val="$define"
7762                 echo "But it seems to be defined as a macro." >&4
7763         fi
7764         $rm -f htonl.?
7765         ;;
7766 esac
7767 set d_htonl
7768 eval $setvar
7769
7770 : see which of string.h or strings.h is needed
7771 echo " "
7772 strings=`./findhdr string.h`
7773 if $test "$strings" && $test -r "$strings"; then
7774         echo "Using <string.h> instead of <strings.h>." >&4
7775         val="$define"
7776 else
7777         val="$undef"
7778         strings=`./findhdr strings.h`
7779         if $test "$strings" && $test -r "$strings"; then
7780                 echo "Using <strings.h> instead of <string.h>." >&4
7781         else
7782                 echo "No string header found -- You'll surely have problems." >&4
7783         fi
7784 fi
7785 set i_string
7786 eval $setvar
7787 case "$i_string" in
7788 "$undef") strings=`./findhdr strings.h`;;
7789 *)        strings=`./findhdr string.h`;;
7790 esac
7791
7792 : index or strchr
7793 echo " "
7794 if set index val -f; eval $csym; $val; then
7795         if set strchr val -f d_strchr; eval $csym; $val; then
7796                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
7797                         val="$define"
7798                         vali="$undef"
7799                         echo "strchr() found." >&4
7800                 else
7801                         val="$undef"
7802                         vali="$define"
7803                         echo "index() found." >&4
7804                 fi
7805         else
7806                 val="$undef"
7807                 vali="$define"
7808                 echo "index() found." >&4
7809         fi
7810 else
7811         if set strchr val -f d_strchr; eval $csym; $val; then
7812                 val="$define"
7813                 vali="$undef"
7814                 echo "strchr() found." >&4
7815         else
7816                 echo "No index() or strchr() found!" >&4
7817                 val="$undef"
7818                 vali="$undef"
7819         fi
7820 fi
7821 set d_strchr; eval $setvar
7822 val="$vali"
7823 set d_index; eval $setvar
7824
7825 : check whether inet_aton exists
7826 set inet_aton d_inetaton
7827 eval $inlibc
7828
7829 : see if inttypes.h is available
7830 set inttypes.h i_inttypes
7831 eval $inhdr
7832 : check for int64_t
7833 case "$use64bits" in
7834 "$define" )
7835         echo " "
7836         echo $n "Checking to see if your system supports int64_t...$c" >&4
7837         $cat >try.c <<EOCP
7838 #include <sys/types.h>
7839 #$i_inttypes I_INTTYPES
7840 #ifdef I_INTTYPES
7841 #include <inttypes.h>
7842 #endif
7843 int64_t foo() { int64_t x; x = 7; return x; }
7844 EOCP
7845         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7846                 val="$define"
7847                 echo " Yup, it does." >&4
7848         else
7849                 val="$undef"
7850                 echo " Nope, it doesn't." >&4
7851         fi
7852         $rm -f try.*
7853         ;;
7854 *)      val="$undef"
7855         ;;
7856 esac
7857 set d_int64t
7858 eval $setvar
7859
7860
7861 : Look for isascii
7862 echo " "
7863 $cat >isascii.c <<'EOCP'
7864 #include <stdio.h>
7865 #include <ctype.h>
7866 main() {
7867         int c = 'A';
7868         if (isascii(c))
7869                 exit(0);
7870         else
7871                 exit(1);
7872 }
7873 EOCP
7874 set isascii
7875 if eval $compile; then
7876         echo "isascii() found." >&4
7877         val="$define"
7878 else
7879         echo "isascii() NOT found." >&4
7880         val="$undef"
7881 fi
7882 set d_isascii
7883 eval $setvar
7884 $rm -f isascii*
7885
7886 : see if killpg exists
7887 set killpg d_killpg
7888 eval $inlibc
7889
7890 : see if lchown exists
7891 echo " "
7892 $cat > try.c <<'EOCP'
7893 /* System header to define __stub macros and hopefully few prototypes,
7894     which can conflict with char lchown(); below.  */
7895 #include <assert.h>
7896 /* Override any gcc2 internal prototype to avoid an error.  */
7897 /* We use char because int might match the return type of a gcc2
7898    builtin and then its argument prototype would still apply.  */
7899 char lchown();
7900 int main() {
7901     /*  The GNU C library defines this for functions which it implements
7902         to always fail with ENOSYS.  Some functions are actually named
7903         something starting with __ and the normal name is an alias.  */
7904 #if defined (__stub_lchown) || defined (__stub___lchown)
7905 choke me
7906 #else
7907 lchown();
7908 #endif
7909 ; return 0; }
7910 EOCP
7911 set try
7912 if eval $compile; then
7913     $echo "lchown() found." >&4
7914     val="$define"
7915 else
7916     $echo "lchown() NOT found." >&4
7917     val="$undef"
7918 fi
7919 set d_lchown
7920 eval $setvar
7921
7922 : see if link exists
7923 set link d_link
7924 eval $inlibc
7925
7926 : see if localeconv exists
7927 set localeconv d_locconv
7928 eval $inlibc
7929
7930 : see if lockf exists
7931 set lockf d_lockf
7932 eval $inlibc
7933
7934 : check for length of double
7935 echo " "
7936 case "$doublesize" in
7937 '')
7938         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
7939         $cat >try.c <<'EOCP'
7940 #include <stdio.h>
7941 main()
7942 {
7943         printf("%d\n", sizeof(double));
7944 }
7945 EOCP
7946         set try
7947         if eval $compile_ok; then
7948                 doublesize=`./try`
7949                 $echo " $doublesize bytes." >&4
7950         else
7951                 dflt='8'
7952                 echo "(I can't seem to compile the test program.  Guessing...)"
7953                 rp="What is the size of a double precision number (in bytes)?"
7954                 . ./myread
7955                 doublesize="$ans"
7956         fi
7957         ;;
7958 esac
7959 $rm -f try.c try
7960
7961 : check for long doubles
7962 echo " "
7963 echo $n "Checking to see if your system supports long doubles...$c" >&4
7964 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
7965 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7966         val="$define"
7967         echo " Yup, it does." >&4
7968 else
7969         val="$undef"
7970         echo " Nope, it doesn't." >&4
7971 fi
7972 $rm try.*
7973 set d_longdbl
7974 eval $setvar
7975
7976 : check for length of long double
7977 case "${d_longdbl}${longdblsize}" in
7978 $define)
7979         echo " "
7980         $echo $n "Checking to see how big your long doubles are...$c" >&4
7981         $cat >try.c <<'EOCP'
7982 #include <stdio.h>
7983 main()
7984 {
7985         printf("%d\n", sizeof(long double));
7986 }
7987 EOCP
7988         set try
7989         if eval $compile; then
7990                 longdblsize=`./try`
7991                 $echo " $longdblsize bytes." >&4
7992         else
7993                 dflt='8'
7994                 echo " "
7995                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7996                 rp="What is the size of a long double (in bytes)?"
7997                 . ./myread
7998                 longdblsize="$ans"
7999         fi
8000         if $test "X$doublesize" = "X$longdblsize"; then
8001                 echo "(That isn't any different from an ordinary double.)"
8002         fi      
8003         ;;
8004 esac
8005 $rm -f try.c try
8006
8007 : check for long long
8008 echo " "
8009 echo $n "Checking to see if your system supports long long...$c" >&4
8010 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8011 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8012         val="$define"
8013         echo " Yup, it does." >&4
8014 else
8015         val="$undef"
8016         echo " Nope, it doesn't." >&4
8017 fi
8018 $rm try.*
8019 set d_longlong
8020 eval $setvar
8021
8022 : check for length of long long
8023 case "${d_longlong}${longlongsize}" in
8024 $define)
8025         echo " "
8026         $echo $n "Checking to see how big your long longs are...$c" >&4
8027         $cat >try.c <<'EOCP'
8028 #include <stdio.h>
8029 main()
8030 {
8031         printf("%d\n", sizeof(long long));
8032 }
8033 EOCP
8034         set try
8035         if eval $compile_ok; then
8036                 longlongsize=`./try`
8037                 $echo " $longlongsize bytes." >&4
8038         else
8039                 dflt='8'
8040                 echo " "
8041                 echo "(I can't seem to compile the test program.  Guessing...)"
8042                 rp="What is the size of a long long (in bytes)?"
8043                 . ./myread
8044                 longlongsize="$ans"
8045         fi
8046         if $test "X$longsize" = "X$longlongsize"; then
8047                 echo "(That isn't any different from an ordinary long.)"
8048         fi      
8049         ;;
8050 esac
8051 $rm -f try.c try
8052
8053 : see if lstat exists
8054 set lstat d_lstat
8055 eval $inlibc
8056
8057 : see if mblen exists
8058 set mblen d_mblen
8059 eval $inlibc
8060
8061 : see if mbstowcs exists
8062 set mbstowcs d_mbstowcs
8063 eval $inlibc
8064
8065 : see if mbtowc exists
8066 set mbtowc d_mbtowc
8067 eval $inlibc
8068
8069 : see if memcmp exists
8070 set memcmp d_memcmp
8071 eval $inlibc
8072
8073 : see if memcpy exists
8074 set memcpy d_memcpy
8075 eval $inlibc
8076
8077 : see if memmove exists
8078 set memmove d_memmove
8079 eval $inlibc
8080
8081 : see if memset exists
8082 set memset d_memset
8083 eval $inlibc
8084
8085 : see if mkdir exists
8086 set mkdir d_mkdir
8087 eval $inlibc
8088
8089 : see if mkfifo exists
8090 set mkfifo d_mkfifo
8091 eval $inlibc
8092
8093 : see if mktime exists
8094 set mktime d_mktime
8095 eval $inlibc
8096
8097 : see if msgctl exists
8098 set msgctl d_msgctl
8099 eval $inlibc
8100
8101 : see if msgget exists
8102 set msgget d_msgget
8103 eval $inlibc
8104
8105 : see if msgsnd exists
8106 set msgsnd d_msgsnd
8107 eval $inlibc
8108
8109 : see if msgrcv exists
8110 set msgrcv d_msgrcv
8111 eval $inlibc
8112
8113 : see how much of the 'msg*(2)' library is present.
8114 h_msg=true
8115 echo " "
8116 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8117 *"$undef"*) h_msg=false;;
8118 esac
8119 case "$osname" in
8120 freebsd)
8121     case "`ipcs 2>&1`" in
8122     "SVID messages"*"not configured"*)
8123         echo "Your $osname does not have the msg*(2) configured." >&4
8124         h_msg=false
8125         val="$undef"
8126         set msgctl d_msgctl
8127         eval $setvar
8128         set msgget d_msgget
8129         eval $setvar
8130         set msgsnd d_msgsnd
8131         eval $setvar
8132         set msgrcv d_msgrcv
8133         eval $setvar
8134         ;;
8135     esac
8136     ;;
8137 esac
8138 : we could also check for sys/ipc.h ...
8139 if $h_msg && $test `./findhdr sys/msg.h`; then
8140         echo "You have the full msg*(2) library." >&4
8141         val="$define"
8142 else
8143         echo "You don't have the full msg*(2) library." >&4
8144         val="$undef"
8145 fi
8146 set d_msg
8147 eval $setvar
8148
8149 : see if nice exists
8150 set nice d_nice
8151 eval $inlibc
8152
8153 : see if pause exists
8154 set pause d_pause
8155 eval $inlibc
8156
8157 : see if pipe exists
8158 set pipe d_pipe
8159 eval $inlibc
8160
8161 : see if poll exists
8162 set poll d_poll
8163 eval $inlibc
8164
8165
8166 : see whether the various POSIXish _yields exist
8167 $cat >try.c <<EOP
8168 #include <pthread.h>
8169 #include <stdio.h>
8170 main() {
8171 #ifdef SCHED_YIELD
8172         sched_yield();
8173 #else
8174 #ifdef PTHREAD_YIELD
8175         pthread_yield();
8176 #else
8177 #ifdef PTHREAD_YIELD_NULL
8178         pthread_yield(NULL);
8179 #endif
8180 #endif
8181 #endif
8182 }
8183 EOP
8184 : see if sched_yield exists
8185 set try -DSCHED_YIELD
8186 if eval $compile; then
8187     val="$define"
8188     sched_yield='sched_yield()'
8189 else
8190     val="$undef"
8191 fi
8192 case "$usethreads" in
8193 $define)
8194         case "$val" in
8195         $define) echo 'sched_yield() found.' >&4        ;;
8196         *)       echo 'sched_yield() NOT found.' >&4    ;;
8197         esac
8198 esac
8199 set d_sched_yield
8200 eval $setvar
8201
8202 : see if pthread_yield exists
8203 set try -DPTHREAD_YIELD
8204 if eval $compile; then
8205     val="$define"
8206     case "$sched_yield" in
8207     '') sched_yield='pthread_yield()' ;;
8208     esac
8209 else
8210     set try -DPTHREAD_YIELD_NULL
8211     if eval $compile; then
8212         val="$define"
8213         case "$sched_yield" in
8214         '') sched_yield='pthread_yield(NULL)' ;;
8215         esac
8216     else
8217         val="$undef"
8218     fi
8219 fi
8220 case "$usethreads" in
8221 $define)
8222         case "$val" in
8223         $define) echo 'pthread_yield() found.' >&4      ;;
8224         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8225         esac
8226         ;;
8227 esac
8228 set d_pthread_yield
8229 eval $setvar
8230
8231 case "$sched_yield" in
8232 '') sched_yield=undef ;;
8233 esac
8234
8235 $rm -f try try.*
8236
8237 : test whether pthreads are created in joinable -- aka undetached -- state
8238 if test "X$usethreads" = "X$define"; then
8239         echo $n "Checking whether pthreads are created joinable. $c" >&4 
8240         $cat >try.c <<'EOCP'
8241 #include <pthread.h>
8242 #include <stdio.h>
8243 int main() {
8244     pthread_attr_t attr;
8245     int detachstate;
8246     printf("%s\n",
8247         pthread_attr_init(&attr) == 0 &&
8248 #if PTHREAD_ATTR_GETDETACHSTATE_INT
8249         pthread_attr_getdetachstate(&attr) == 0 &&
8250 #else
8251         pthread_attr_getdetachstate(&attr, &detachstate) == 0 &&
8252 #endif
8253         detachstate == PTHREAD_CREATE_DETACHED ?
8254         "detached" : "joinable");
8255     exit(0);
8256 }
8257 EOCP
8258         set try
8259         if eval $compile; then
8260                 yyy=`./try`
8261                 case "$yyy" in
8262                         detached) echo "Nope, they aren't." >&4 ;;
8263                         *) echo "Yup, they are." >&4 ;;
8264                 esac
8265         else
8266                 set try -DPTHREAD_ATTR_GETDETACHSTATE_INT
8267                 if eval $compile; then
8268                         yyy=`./try`
8269                         case "$yyy" in
8270                                 detached) echo "Nope, they aren't." >&4 ;;
8271                                 *) echo "Yup, they are." >&4 ;;
8272                         esac
8273                 else            
8274                         echo " "
8275                         echo "(I can't execute the test program--assuming they are.)" >&4
8276                         yyy=joinable
8277                 fi
8278         fi
8279         $rm -f try try.*
8280         case "$yyy" in
8281                 detached) val="$undef" ;;
8282                 *) val="$define" ;;
8283         esac
8284         set d_pthreads_created_joinable
8285         eval $setvar
8286 else
8287     d_pthreads_created_joinable="$undef"
8288 fi
8289
8290 : see if this is a pwd.h system
8291 set pwd.h i_pwd
8292 eval $inhdr
8293
8294 case "$i_pwd" in
8295 $define)
8296         xxx=`./findhdr pwd.h`
8297         $cppstdin $cppflags $cppminus < $xxx >$$.h
8298
8299         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8300                 val="$define"
8301         else
8302                 val="$undef"
8303         fi
8304         set d_pwquota
8305         eval $setvar
8306
8307         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8308                 val="$define"
8309         else
8310                 val="$undef"
8311         fi
8312         set d_pwage
8313         eval $setvar
8314
8315         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8316                 val="$define"
8317         else
8318                 val="$undef"
8319         fi
8320         set d_pwchange
8321         eval $setvar
8322
8323         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8324                 val="$define"
8325         else
8326                 val="$undef"
8327         fi
8328         set d_pwclass
8329         eval $setvar
8330
8331         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8332                 val="$define"
8333         else
8334                 val="$undef"
8335         fi
8336         set d_pwexpire
8337         eval $setvar
8338
8339         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8340                 val="$define"
8341         else
8342                 val="$undef"
8343         fi
8344         set d_pwcomment
8345         eval $setvar
8346
8347         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8348                 val="$define"
8349         else
8350                 val="$undef"
8351         fi
8352         set d_pwgecos
8353         eval $setvar
8354
8355         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8356                 val="$define"
8357         else
8358                 val="$undef"
8359         fi
8360         set d_pwpasswd
8361         eval $setvar
8362
8363         $rm -f $$.h
8364         ;;
8365 *)
8366         val="$undef"; 
8367         set d_pwquota; eval $setvar
8368         set d_pwage; eval $setvar
8369         set d_pwchange; eval $setvar
8370         set d_pwclass; eval $setvar
8371         set d_pwexpire; eval $setvar
8372         set d_pwcomment; eval $setvar
8373         set d_pwgecos; eval $setvar
8374         set d_pwpasswd; eval $setvar
8375         ;;
8376 esac
8377
8378 : see if readdir and friends exist
8379 set readdir d_readdir
8380 eval $inlibc
8381 set seekdir d_seekdir
8382 eval $inlibc
8383 set telldir d_telldir
8384 eval $inlibc
8385 set rewinddir d_rewinddir
8386 eval $inlibc
8387
8388 : see if readlink exists
8389 set readlink d_readlink
8390 eval $inlibc
8391
8392 : see if rename exists
8393 set rename d_rename
8394 eval $inlibc
8395
8396 : see if rmdir exists
8397 set rmdir d_rmdir
8398 eval $inlibc
8399
8400 : see if memory.h is available.
8401 val=''
8402 set memory.h val
8403 eval $inhdr
8404
8405 : See if it conflicts with string.h
8406 case "$val" in
8407 $define)
8408         case "$strings" in
8409         '') ;;
8410         *)
8411                 $cppstdin $cppflags $cppminus < $strings > mem.h
8412                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
8413                         echo " "
8414                         echo "We won't be including <memory.h>."
8415                         val="$undef"
8416                 fi
8417                 $rm -f mem.h
8418                 ;;
8419         esac
8420 esac
8421 set i_memory
8422 eval $setvar
8423
8424 : can bcopy handle overlapping blocks?
8425 val="$undef"
8426 case "$d_bcopy" in
8427 "$define")
8428         echo " "
8429         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
8430         $cat >try.c <<EOCP
8431 #$i_memory I_MEMORY
8432 #$i_stdlib I_STDLIB
8433 #$i_string I_STRING
8434 #$i_unistd I_UNISTD
8435 EOCP
8436         $cat >>try.c <<'EOCP'
8437 #include <stdio.h>
8438 #ifdef I_MEMORY
8439 #  include <memory.h>
8440 #endif
8441 #ifdef I_STDLIB
8442 #  include <stdlib.h>
8443 #endif
8444 #ifdef I_STRING
8445 #  include <string.h>
8446 #else
8447 #  include <strings.h>
8448 #endif
8449 #ifdef I_UNISTD
8450 #  include <unistd.h>  /* Needed for NetBSD */
8451 #endif
8452 main()
8453 {
8454 char buf[128], abc[128];
8455 char *b;
8456 int len;
8457 int off;
8458 int align;
8459
8460 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
8461
8462 for (align = 7; align >= 0; align--) {
8463         for (len = 36; len; len--) {
8464                 b = buf+align;
8465                 bcopy(abc, b, len);
8466                 for (off = 1; off <= len; off++) {
8467                         bcopy(b, b+off, len);
8468                         bcopy(b+off, b, len);
8469                         if (bcmp(b, abc, len))
8470                                 exit(1);
8471                 }
8472         }
8473 }
8474 exit(0);
8475 }
8476 EOCP
8477         set try
8478         if eval $compile_ok; then
8479                 if ./try 2>/dev/null; then
8480                         echo "Yes, it can."
8481                         val="$define"
8482                 else
8483                         echo "It can't, sorry."
8484                         case "$d_memmove" in
8485                         "$define") echo "But that's Ok since you have memmove()." ;;
8486                         esac
8487                 fi
8488         else
8489                 echo "(I can't compile the test program, so we'll assume not...)"
8490                 case "$d_memmove" in
8491                 "$define") echo "But that's Ok since you have memmove()." ;;
8492                 esac
8493         fi
8494         ;;
8495 esac
8496 $rm -f try.* try core
8497 set d_safebcpy
8498 eval $setvar
8499
8500 : can memcpy handle overlapping blocks?
8501 val="$undef"
8502 case "$d_memcpy" in
8503 "$define")
8504         echo " "
8505         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
8506         $cat >try.c <<EOCP
8507 #$i_memory I_MEMORY
8508 #$i_stdlib I_STDLIB
8509 #$i_string I_STRING
8510 #$i_unistd I_UNISTD
8511 EOCP
8512         $cat >>try.c <<'EOCP'
8513 #include <stdio.h>
8514 #ifdef I_MEMORY
8515 #  include <memory.h>
8516 #endif
8517 #ifdef I_STDLIB
8518 #  include <stdlib.h>
8519 #endif
8520 #ifdef I_STRING
8521 #  include <string.h>
8522 #else
8523 #  include <strings.h>
8524 #endif
8525 #ifdef I_UNISTD
8526 #  include <unistd.h>  /* Needed for NetBSD */
8527 #endif
8528 main()
8529 {
8530 char buf[128], abc[128];
8531 char *b;
8532 int len;
8533 int off;
8534 int align;
8535
8536 /* Copy "abcde..." string to char abc[] so that gcc doesn't
8537    try to store the string in read-only memory. */
8538 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
8539
8540 for (align = 7; align >= 0; align--) {
8541         for (len = 36; len; len--) {
8542                 b = buf+align;
8543                 memcpy(b, abc, len);
8544                 for (off = 1; off <= len; off++) {
8545                         memcpy(b+off, b, len);
8546                         memcpy(b, b+off, len);
8547                         if (memcmp(b, abc, len))
8548                                 exit(1);
8549                 }
8550         }
8551 }
8552 exit(0);
8553 }
8554 EOCP
8555         set try
8556         if eval $compile_ok; then
8557                 if ./try 2>/dev/null; then
8558                         echo "Yes, it can."
8559                         val="$define"
8560                 else
8561                         echo "It can't, sorry."
8562                         case "$d_memmove" in
8563                         "$define") echo "But that's Ok since you have memmove()." ;;
8564                         esac
8565                 fi
8566         else
8567                 echo "(I can't compile the test program, so we'll assume not...)"
8568                 case "$d_memmove" in
8569                 "$define") echo "But that's Ok since you have memmove()." ;;
8570                 esac
8571         fi
8572         ;;
8573 esac
8574 $rm -f try.* try core
8575 set d_safemcpy
8576 eval $setvar
8577
8578 : can memcmp be trusted to compare relative magnitude?
8579 val="$undef"
8580 case "$d_memcmp" in
8581 "$define")
8582         echo " "
8583         echo "Checking if your memcmp() can compare relative magnitude..." >&4
8584         $cat >try.c <<EOCP
8585 #$i_memory I_MEMORY
8586 #$i_stdlib I_STDLIB
8587 #$i_string I_STRING
8588 #$i_unistd I_UNISTD
8589 EOCP
8590         $cat >>try.c <<'EOCP'
8591 #include <stdio.h>
8592 #ifdef I_MEMORY
8593 #  include <memory.h>
8594 #endif
8595 #ifdef I_STDLIB
8596 #  include <stdlib.h>
8597 #endif
8598 #ifdef I_STRING
8599 #  include <string.h>
8600 #else
8601 #  include <strings.h>
8602 #endif
8603 #ifdef I_UNISTD
8604 #  include <unistd.h>  /* Needed for NetBSD */
8605 #endif
8606 main()
8607 {
8608 char a = -1;
8609 char b = 0;
8610 if ((a < b) && memcmp(&a, &b, 1) < 0)
8611         exit(1);
8612 exit(0);
8613 }
8614 EOCP
8615         set try
8616         if eval $compile_ok; then
8617                 if ./try 2>/dev/null; then
8618                         echo "Yes, it can."
8619                         val="$define"
8620                 else
8621                         echo "No, it can't (it uses signed chars)."
8622                 fi
8623         else
8624                 echo "(I can't compile the test program, so we'll assume not...)"
8625         fi
8626         ;;
8627 esac
8628 $rm -f try.* try core
8629 set d_sanemcmp
8630 eval $setvar
8631
8632 : see if select exists
8633 set select d_select
8634 eval $inlibc
8635
8636 : see if semctl exists
8637 set semctl d_semctl
8638 eval $inlibc
8639
8640 : see if semget exists
8641 set semget d_semget
8642 eval $inlibc
8643
8644 : see if semop exists
8645 set semop d_semop
8646 eval $inlibc
8647
8648 : see how much of the 'sem*(2)' library is present.
8649 h_sem=true
8650 echo " "
8651 case "$d_semctl$d_semget$d_semop" in
8652 *"$undef"*) h_sem=false;;
8653 esac
8654 case "$osname" in
8655 freebsd)
8656     case "`ipcs 2>&1`" in
8657     "SVID messages"*"not configured"*)
8658         echo "Your $osname does not have the sem*(2) configured." >&4
8659         h_sem=false
8660         val="$undef"
8661         set semctl d_semctl
8662         eval $setvar
8663         set semget d_semget
8664         eval $setvar
8665         set semop d_semop
8666         eval $setvar
8667         ;;
8668     esac
8669     ;;
8670 esac
8671 : we could also check for sys/ipc.h ...
8672 if $h_sem && $test `./findhdr sys/sem.h`; then
8673         echo "You have the full sem*(2) library." >&4
8674         val="$define"
8675 else
8676         echo "You don't have the full sem*(2) library." >&4
8677         val="$undef"
8678 fi
8679 set d_sem
8680 eval $setvar
8681
8682 : see whether sys/sem.h defines union semun
8683 echo " "
8684 $cat > try.c <<'END'
8685 #include <sys/types.h>
8686 #include <sys/ipc.h>
8687 #include <sys/sem.h>
8688 int main () { union semun semun; semun.buf = 0; }
8689 END
8690 set try
8691 if eval $compile; then
8692     echo "You have union semun in <sys/sem.h>." >&4
8693     val="$define"
8694 else
8695     echo "You do not have union semun in <sys/sem.h>." >&4
8696     val="$undef"
8697 fi
8698 $rm -f try try.c try.h
8699 set d_union_semun
8700 eval $setvar
8701
8702 : see how to do semctl IPC_STAT
8703 case "$d_sem" in
8704 $define)
8705     : see whether semctl IPC_STAT can use union semun
8706     echo " "
8707     $cat > try.h <<END
8708 #ifndef S_IRUSR
8709 #   ifdef S_IREAD
8710 #       define S_IRUSR S_IREAD
8711 #       define S_IWUSR S_IWRITE
8712 #       define S_IXUSR S_IEXEC
8713 #   else
8714 #       define S_IRUSR 0400
8715 #       define S_IWUSR 0200
8716 #       define S_IXUSR 0100
8717 #   endif
8718 #   define S_IRGRP (S_IRUSR>>3)
8719 #   define S_IWGRP (S_IWUSR>>3)
8720 #   define S_IXGRP (S_IXUSR>>3)
8721 #   define S_IROTH (S_IRUSR>>6)
8722 #   define S_IWOTH (S_IWUSR>>6)
8723 #   define S_IXOTH (S_IXUSR>>6)
8724 #endif
8725 #ifndef S_IRWXU
8726 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
8727 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
8728 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
8729 #endif
8730 END
8731
8732     $cat > try.c <<END
8733 #include <sys/types.h>
8734 #include <sys/ipc.h>
8735 #include <sys/sem.h>
8736 #include <sys/stat.h>
8737 #include <stdio.h>
8738 #include <errno.h>
8739 #include "try.h"
8740 #ifndef errno
8741 extern int errno;
8742 #endif
8743 #$d_union_semun HAS_UNION_SEMUN
8744 int main() {
8745     union semun
8746 #ifndef HAS_UNION_SEMUN
8747     {
8748         int val;
8749         struct semid_ds *buf;
8750         unsigned short *array;
8751     }
8752 #endif
8753     arg;
8754     int sem, st;
8755
8756 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
8757     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
8758     if (sem > -1) {
8759         struct semid_ds argbuf;
8760         arg.buf = &argbuf;
8761 #       ifdef IPC_STAT
8762         st = semctl(sem, 0, IPC_STAT, arg);
8763         if (st == 0)
8764             printf("semun\n");
8765         else
8766 #       endif /* IPC_STAT */
8767             printf("semctl IPC_STAT failed: errno = %d\n", errno);
8768 #       ifdef IPC_RMID
8769         if (semctl(sem, 0, IPC_RMID, arg) != 0)
8770 #       endif /* IPC_RMID */
8771             printf("semctl IPC_RMID failed: errno = %d\n", errno);
8772     } else
8773 #endif /* IPC_PRIVATE && ... */
8774         printf("semget failed: errno = %d\n", errno);
8775   return 0;
8776 }
8777 END
8778     val="$undef"
8779     set try
8780     if eval $compile; then
8781         xxx=`./try`
8782         case "$xxx" in
8783         semun) val="$define" ;;
8784         esac
8785     fi
8786     $rm -f try try.c
8787     set d_semctl_semun
8788     eval $setvar
8789     case "$d_semctl_semun" in
8790     $define)
8791         echo "You can use union semun for semctl IPC_STAT." >&4
8792         also='also'
8793         ;;
8794     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
8795         also=''
8796         ;;
8797     esac
8798
8799     : see whether semctl IPC_STAT can use struct semid_ds pointer
8800     $cat > try.c <<'END'
8801 #include <sys/types.h>
8802 #include <sys/ipc.h>
8803 #include <sys/sem.h>
8804 #include <sys/stat.h>
8805 #include "try.h"
8806 #include <stdio.h>
8807 #include <errno.h>
8808 #ifndef errno
8809 extern int errno;
8810 #endif
8811 int main() {
8812     struct semid_ds arg;
8813     int sem, st;
8814
8815 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
8816     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
8817     if (sem > -1) {
8818 #       ifdef IPC_STAT
8819         st = semctl(sem, 0, IPC_STAT, &arg);
8820         if (st == 0)
8821             printf("semid_ds\n");
8822         else
8823 #       endif /* IPC_STAT */
8824             printf("semctl IPC_STAT failed: errno = %d\n", errno);
8825 #       ifdef IPC_RMID
8826         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
8827 #       endif /* IPC_RMID */
8828             printf("semctl IPC_RMID failed: errno = %d\n", errno);
8829     } else
8830 #endif /* IPC_PRIVATE && ... */
8831         printf("semget failed: errno = %d\n", errno);
8832
8833     return 0;
8834 }
8835 END
8836     val="$undef"
8837     set try
8838     if eval $compile; then
8839         xxx=`./try`
8840         case "$xxx" in
8841         semid_ds) val="$define" ;;
8842         esac
8843     fi
8844     $rm -f try try.c
8845     set d_semctl_semid_ds
8846     eval $setvar
8847     case "$d_semctl_semid_ds" in
8848     $define)
8849         echo "You can $also use struct semid_ds * for semctl IPC_STAT." >&4
8850         ;;
8851     *)  echo "You cannot use struct semid_ds * for semctl IPC_STAT." >&4
8852         ;;
8853     esac
8854     $rm -f try.h
8855     ;;
8856 *)  val="$undef"
8857
8858     # We do not have the full sem*(2) library, so assume we can not
8859     # use either.
8860
8861     set d_semctl_semun
8862     eval $setvar
8863
8864     set d_semctl_semid_ds
8865     eval $setvar
8866     ;;
8867 esac
8868
8869 : see if setegid exists
8870 set setegid d_setegid
8871 eval $inlibc
8872
8873 : see if seteuid exists
8874 set seteuid d_seteuid
8875 eval $inlibc
8876
8877 : see if setgrent exists
8878 set setgrent d_setgrent
8879 eval $inlibc
8880
8881 : see if sethostent exists
8882 set sethostent d_sethent
8883 eval $inlibc
8884
8885 : see if setlinebuf exists
8886 set setlinebuf d_setlinebuf
8887 eval $inlibc
8888
8889 : see if setlocale exists
8890 set setlocale d_setlocale
8891 eval $inlibc
8892
8893 : see if setnetent exists
8894 set setnetent d_setnent
8895 eval $inlibc
8896
8897 : see if setprotoent exists
8898 set setprotoent d_setpent
8899 eval $inlibc
8900
8901 : see if setpgid exists
8902 set setpgid d_setpgid
8903 eval $inlibc
8904
8905 : see if setpgrp2 exists
8906 set setpgrp2 d_setpgrp2
8907 eval $inlibc
8908
8909 : see if setpriority exists
8910 set setpriority d_setprior
8911 eval $inlibc
8912
8913 : see if setpwent exists
8914 set setpwent d_setpwent
8915 eval $inlibc
8916
8917 : see if setregid exists
8918 set setregid d_setregid
8919 eval $inlibc
8920 set setresgid d_setresgid
8921 eval $inlibc
8922
8923 : see if setreuid exists
8924 set setreuid d_setreuid
8925 eval $inlibc
8926 set setresuid d_setresuid
8927 eval $inlibc
8928
8929 : see if setrgid exists
8930 set setrgid d_setrgid
8931 eval $inlibc
8932
8933 : see if setruid exists
8934 set setruid d_setruid
8935 eval $inlibc
8936
8937 : see if setservent exists
8938 set setservent d_setsent
8939 eval $inlibc
8940
8941 : see if setsid exists
8942 set setsid d_setsid
8943 eval $inlibc
8944
8945 : see if setvbuf exists
8946 set setvbuf d_setvbuf
8947 eval $inlibc
8948
8949 : see if sfio.h is available
8950 set sfio.h i_sfio
8951 eval $inhdr
8952
8953
8954 : see if sfio library is available
8955 case "$i_sfio" in
8956 $define)
8957         val=''
8958         set sfreserve val
8959         eval $inlibc
8960         ;;
8961 *)
8962         val="$undef"
8963         ;;
8964 esac
8965 : Ok, but do we want to use it.
8966 case "$val" in
8967 $define)
8968         case "$usesfio" in
8969         true|$define|[yY]*) dflt='y';;
8970         *) dflt='n';;
8971         esac
8972         echo "$package can use the sfio library, but it is experimental."
8973         rp="You seem to have sfio available, do you want to try using it?"
8974         . ./myread
8975         case "$ans" in
8976         y|Y) ;;
8977         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
8978                 val="$undef"
8979                 : Remove sfio from list of libraries to use
8980                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
8981                 shift
8982                 libs="$*"
8983                 echo "libs = $libs" >&4
8984                 ;;
8985         esac
8986         ;;
8987 *)      case "$usesfio" in
8988         true|$define|[yY]*)
8989                 echo "Sorry, cannot find sfio on this machine" >&4
8990                 echo "Ignoring your setting of usesfio=$usesfio" >&4
8991                 ;;
8992         esac
8993         ;;
8994 esac
8995 set d_sfio
8996 eval $setvar
8997 case "$d_sfio" in
8998 $define) usesfio='true';;
8999 *) usesfio='false';;
9000 esac
9001
9002 : see if shmctl exists
9003 set shmctl d_shmctl
9004 eval $inlibc
9005
9006 : see if shmget exists
9007 set shmget d_shmget
9008 eval $inlibc
9009
9010 : see if shmat exists
9011 set shmat d_shmat
9012 eval $inlibc
9013 : see what shmat returns
9014 case "$d_shmat" in
9015 "$define")
9016         $cat >shmat.c <<'END'
9017 #include <sys/shm.h>
9018 void *shmat();
9019 END
9020         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9021                 shmattype='void *'
9022         else
9023                 shmattype='char *'
9024         fi
9025         echo "and it returns ($shmattype)." >&4
9026         : see if a prototype for shmat is available
9027         xxx=`./findhdr sys/shm.h`
9028         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9029         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9030                 val="$define"
9031         else
9032                 val="$undef"
9033         fi
9034         $rm -f shmat.[co]
9035         ;;
9036 *)
9037         val="$undef"
9038         ;;
9039 esac
9040 set d_shmatprototype
9041 eval $setvar
9042
9043 : see if shmdt exists
9044 set shmdt d_shmdt
9045 eval $inlibc
9046
9047 : see how much of the 'shm*(2)' library is present.
9048 h_shm=true
9049 echo " "
9050 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9051 *"$undef"*) h_shm=false;;
9052 esac
9053 case "$osname" in
9054 freebsd)
9055     case "`ipcs 2>&1`" in
9056     "SVID shared memory"*"not configured"*)
9057         echo "Your $osname does not have the shm*(2) configured." >&4
9058         h_shm=false
9059         val="$undef"
9060         set shmctl d_shmctl
9061         evat $setvar
9062         set shmget d_shmget
9063         evat $setvar
9064         set shmat d_shmat
9065         evat $setvar
9066         set shmdt d_shmdt
9067         evat $setvar
9068         ;;
9069     esac
9070     ;;
9071 esac
9072 : we could also check for sys/ipc.h ...
9073 if $h_shm && $test `./findhdr sys/shm.h`; then
9074         echo "You have the full shm*(2) library." >&4
9075         val="$define"
9076 else
9077         echo "You don't have the full shm*(2) library." >&4
9078         val="$undef"
9079 fi
9080 set d_shm
9081 eval $setvar
9082
9083 echo " "
9084 : see if we have sigaction
9085 if set sigaction val -f d_sigaction; eval $csym; $val; then
9086         echo 'sigaction() found.' >&4
9087         $cat > try.c <<'EOP'
9088 #include <stdio.h>
9089 #include <sys/types.h>
9090 #include <signal.h>
9091 main()
9092 {
9093     struct sigaction act, oact;
9094 }
9095 EOP
9096         set try
9097         if eval $compile_ok; then
9098                 val="$define"
9099         else
9100                 echo "But you don't seem to have a useable struct sigaction." >&4
9101                 val="$undef"
9102         fi
9103 else
9104         echo 'sigaction NOT found.' >&4
9105         val="$undef"
9106 fi
9107 set d_sigaction; eval $setvar
9108 $rm -f try try$_o try.c
9109
9110 : see if sigsetjmp exists
9111 echo " "
9112 case "$d_sigsetjmp" in
9113 '')
9114         $cat >try.c <<'EOP'
9115 #include <setjmp.h>
9116 sigjmp_buf env;
9117 int set = 1;
9118 main()
9119 {
9120         if (sigsetjmp(env,1))
9121                 exit(set);
9122         set = 0;
9123         siglongjmp(env, 1);
9124         exit(1);
9125 }
9126 EOP
9127         set try
9128         if eval $compile; then
9129                 if ./try >/dev/null 2>&1; then
9130                         echo "POSIX sigsetjmp found." >&4
9131                         val="$define"
9132                 else
9133                         $cat >&4 <<EOM
9134 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9135 I'll ignore them.
9136 EOM
9137                         val="$undef"
9138                 fi
9139         else
9140                 echo "sigsetjmp not found." >&4
9141                 val="$undef"
9142         fi
9143         ;;
9144 *) val="$d_sigsetjmp"
9145         case "$d_sigsetjmp" in
9146         $define) echo "POSIX sigsetjmp found." >&4;;
9147         $undef) echo "sigsetjmp not found." >&4;;
9148         esac
9149         ;;
9150 esac
9151 set d_sigsetjmp
9152 eval $setvar
9153 $rm -f try.c try
9154
9155 socketlib=''
9156 sockethdr=''
9157 : see whether socket exists
9158 echo " "
9159 $echo $n "Hmm... $c" >&4
9160 if set socket val -f d_socket; eval $csym; $val; then
9161         echo "Looks like you have Berkeley networking support." >&4
9162         d_socket="$define"
9163         if set setsockopt val -f; eval $csym; $val; then
9164                 d_oldsock="$undef"
9165         else
9166                 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
9167                 d_oldsock="$define"
9168         fi
9169 else
9170         if $contains socklib libc.list >/dev/null 2>&1; then
9171                 echo "Looks like you have Berkeley networking support." >&4
9172                 d_socket="$define"
9173                 : we will have to assume that it supports the 4.2 BSD interface
9174                 d_oldsock="$undef"
9175         else
9176                 echo "You don't have Berkeley networking in libc$_a..." >&4
9177                 if test -f /usr/lib/libnet$_a; then
9178                         ( ($nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) ||  \
9179                         $ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list
9180                         if $contains socket libc.list >/dev/null 2>&1; then
9181                         echo "...but the Wollongong group seems to have hacked it in." >&4
9182                                 socketlib="-lnet"
9183                                 sockethdr="-I/usr/netinclude"
9184                                 d_socket="$define"
9185                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9186                                         d_oldsock="$undef"
9187                                 else
9188                                         echo "...using the old 4.1c interface, rather than 4.2" >&4
9189                                         d_oldsock="$define"
9190                                 fi
9191                         else
9192                                 echo "or even in libnet$_a, which is peculiar." >&4
9193                                 d_socket="$undef"
9194                                 d_oldsock="$undef"
9195                         fi
9196                 else
9197                         echo "or anywhere else I see." >&4
9198                         d_socket="$undef"
9199                         d_oldsock="$undef"
9200                 fi
9201         fi
9202 fi
9203
9204 : see if socketpair exists
9205 set socketpair d_sockpair
9206 eval $inlibc
9207
9208 : see if stat knows about block sizes
9209 echo " "
9210 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9211 eval $hasfield
9212
9213 : see if _ptr and _cnt from stdio act std
9214 echo " "
9215 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9216         echo "(Looks like you have stdio.h from Linux.)"
9217         case "$stdio_ptr" in
9218         '') stdio_ptr='((fp)->_IO_read_ptr)'
9219                 ptr_lval=$define
9220                 ;;
9221         *)      ptr_lval=$d_stdio_ptr_lval;;
9222         esac
9223         case "$stdio_cnt" in
9224         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9225                 cnt_lval=$undef
9226                 ;;
9227         *)      cnt_lval=$d_stdio_cnt_lval;;
9228         esac
9229         case "$stdio_base" in
9230         '') stdio_base='((fp)->_IO_read_base)';;
9231         esac
9232         case "$stdio_bufsiz" in
9233         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9234         esac
9235 else
9236         case "$stdio_ptr" in
9237         '') stdio_ptr='((fp)->_ptr)'
9238                 ptr_lval=$define
9239                 ;;
9240         *)      ptr_lval=$d_stdio_ptr_lval;;
9241         esac
9242         case "$stdio_cnt" in
9243         '') stdio_cnt='((fp)->_cnt)'
9244                 cnt_lval=$define
9245                 ;;
9246         *)      cnt_lval=$d_stdio_cnt_lval;;
9247         esac
9248         case "$stdio_base" in
9249         '') stdio_base='((fp)->_base)';;
9250         esac
9251         case "$stdio_bufsiz" in
9252         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9253         esac
9254 fi
9255 : test whether _ptr and _cnt really work
9256 echo "Checking how std your stdio is..." >&4
9257 $cat >try.c <<EOP
9258 #include <stdio.h>
9259 #define FILE_ptr(fp)    $stdio_ptr
9260 #define FILE_cnt(fp)    $stdio_cnt
9261 main() {
9262         FILE *fp = fopen("try.c", "r");
9263         char c = getc(fp);
9264         if (
9265                 18 <= FILE_cnt(fp) &&
9266                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9267         )
9268                 exit(0);
9269         exit(1);
9270 }
9271 EOP
9272 val="$undef"
9273 set try
9274 if eval $compile; then
9275         if ./try; then
9276                 echo "Your stdio acts pretty std."
9277                 val="$define"
9278         else
9279                 echo "Your stdio isn't very std."
9280         fi
9281 else
9282         echo "Your stdio doesn't appear very std."
9283 fi
9284 $rm -f try.c try
9285 set d_stdstdio
9286 eval $setvar
9287
9288 : Can _ptr be used as an lvalue?
9289 case "$d_stdstdio$ptr_lval" in
9290 $define$define) val=$define ;;
9291 *) val=$undef ;;
9292 esac
9293 set d_stdio_ptr_lval
9294 eval $setvar
9295
9296 : Can _cnt be used as an lvalue?
9297 case "$d_stdstdio$cnt_lval" in
9298 $define$define) val=$define ;;
9299 *) val=$undef ;;
9300 esac
9301 set d_stdio_cnt_lval
9302 eval $setvar
9303
9304 : see if _base is also standard
9305 val="$undef"
9306 case "$d_stdstdio" in
9307 $define)
9308         $cat >try.c <<EOP
9309 #include <stdio.h>
9310 #define FILE_base(fp)   $stdio_base
9311 #define FILE_bufsiz(fp) $stdio_bufsiz
9312 main() {
9313         FILE *fp = fopen("try.c", "r");
9314         char c = getc(fp);
9315         if (
9316                 19 <= FILE_bufsiz(fp) &&
9317                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9318         )
9319                 exit(0);
9320         exit(1);
9321 }
9322 EOP
9323         set try
9324         if eval $compile; then
9325                 if ./try; then
9326                         echo "And its _base field acts std."
9327                         val="$define"
9328                 else
9329                         echo "But its _base field isn't std."
9330                 fi
9331         else
9332                 echo "However, it seems to be lacking the _base field."
9333         fi
9334         $rm -f try.c try
9335         ;;
9336 esac
9337 set d_stdiobase
9338 eval $setvar
9339
9340 : see if strcoll exists
9341 set strcoll d_strcoll
9342 eval $inlibc
9343
9344 : check for structure copying
9345 echo " "
9346 echo "Checking to see if your C compiler can copy structs..." >&4
9347 $cat >try.c <<'EOCP'
9348 main()
9349 {
9350         struct blurfl {
9351                 int dyick;
9352         } foo, bar;
9353
9354         foo = bar;
9355 }
9356 EOCP
9357 if $cc -c try.c >/dev/null 2>&1 ; then
9358         val="$define"
9359         echo "Yup, it can."
9360 else
9361         val="$undef"
9362         echo "Nope, it can't."
9363 fi
9364 set d_strctcpy
9365 eval $setvar
9366 $rm -f try.*
9367
9368 : see if strerror and/or sys_errlist[] exist
9369 echo " "
9370 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9371     if set strerror val -f d_strerror; eval $csym; $val; then
9372                 echo 'strerror() found.' >&4
9373                 d_strerror="$define"
9374                 d_strerrm='strerror(e)'
9375                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9376                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9377                         d_syserrlst="$define"
9378                 else
9379                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9380                         d_syserrlst="$undef"
9381                 fi
9382     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9383                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9384                 echo 'strerror() found in string header.' >&4
9385                 d_strerror="$define"
9386                 d_strerrm='strerror(e)'
9387                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9388                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9389                                 d_syserrlst="$define"
9390                 else
9391                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
9392                         d_syserrlst="$undef"
9393                 fi
9394     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9395                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9396                 d_strerror="$undef"
9397                 d_syserrlst="$define"
9398                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
9399     else
9400                 echo 'strerror() and sys_errlist[] NOT found.' >&4
9401                 d_strerror="$undef"
9402                 d_syserrlst="$undef"
9403                 d_strerrm='"unknown"'
9404     fi
9405 fi
9406
9407 : see if strtod exists
9408 set strtod d_strtod
9409 eval $inlibc
9410
9411 : see if strtol exists
9412 set strtol d_strtol
9413 eval $inlibc
9414
9415 : see if strtoul exists
9416 set strtoul d_strtoul
9417 eval $inlibc
9418
9419 : see if strxfrm exists
9420 set strxfrm d_strxfrm
9421 eval $inlibc
9422
9423 : see if symlink exists
9424 set symlink d_symlink
9425 eval $inlibc
9426
9427 : see if syscall exists
9428 set syscall d_syscall
9429 eval $inlibc
9430
9431 : see if sysconf exists
9432 set sysconf d_sysconf
9433 eval $inlibc
9434
9435 : see if system exists
9436 set system d_system
9437 eval $inlibc
9438
9439 : see if tcgetpgrp exists
9440 set tcgetpgrp d_tcgetpgrp
9441 eval $inlibc
9442
9443 : see if tcsetpgrp exists
9444 set tcsetpgrp d_tcsetpgrp
9445 eval $inlibc
9446
9447 : define an is-a-typedef? function
9448 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9449 case "$inclist" in
9450 "") inclist="sys/types.h";;
9451 esac;
9452 eval "varval=\$$var";
9453 case "$varval" in
9454 "")
9455         $rm -f temp.c;
9456         for inc in $inclist; do
9457                 echo "#include <$inc>" >>temp.c;
9458         done;
9459         echo "#ifdef $type" >> temp.c;
9460         echo "printf(\"We have $type\");" >> temp.c;
9461         echo "#endif" >> temp.c;
9462         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9463         if $contains $type temp.E >/dev/null 2>&1; then
9464                 eval "$var=\$type";
9465         else
9466                 eval "$var=\$def";
9467         fi;
9468         $rm -f temp.?;;
9469 *) eval "$var=\$varval";;
9470 esac'
9471
9472 : define an is-a-typedef? function that prompts if the type is not available.
9473 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9474 case "$inclist" in
9475 "") inclist="sys/types.h";;
9476 esac;
9477 eval "varval=\$$var";
9478 case "$varval" in
9479 "")
9480         $rm -f temp.c;
9481         for inc in $inclist; do
9482                 echo "#include <$inc>" >>temp.c;
9483         done;
9484         echo "#ifdef $type" >> temp.c;
9485         echo "printf(\"We have $type\");" >> temp.c;
9486         echo "#endif" >> temp.c;
9487         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9488         echo " " ;
9489         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
9490         if $contains $type temp.E >/dev/null 2>&1; then
9491                 echo "$type found." >&4;
9492                 eval "$var=\$type";
9493         else
9494                 echo "$type NOT found." >&4;
9495                 dflt="$def";
9496                 . ./myread ;
9497                 eval "$var=\$ans";
9498         fi;
9499         $rm -f temp.?;;
9500 *) eval "$var=\$varval";;
9501 esac'
9502
9503 : see if this is a sys/times.h system
9504 set sys/times.h i_systimes
9505 eval $inhdr
9506
9507 : see if times exists
9508 echo " "
9509 if set times val -f d_times; eval $csym; $val; then
9510         echo 'times() found.' >&4
9511         d_times="$define"
9512         inc=''
9513         case "$i_systimes" in
9514         "$define") inc='sys/times.h';;
9515         esac
9516         rp="What is the type returned by times() on this system?"
9517         set clock_t clocktype long stdio.h sys/types.h $inc
9518         eval $typedef_ask
9519 else
9520         echo 'times() NOT found, hope that will do.' >&4
9521         d_times="$undef"
9522         clocktype='int'
9523 fi
9524
9525 : see if truncate exists
9526 set truncate d_truncate
9527 eval $inlibc
9528
9529 : see if tzname[] exists
9530 echo " "
9531 if set tzname val -a d_tzname; eval $csym; $val; then
9532         val="$define"
9533         echo 'tzname[] found.' >&4
9534 else
9535         val="$undef"
9536         echo 'tzname[] NOT found.' >&4
9537 fi
9538 set d_tzname
9539 eval $setvar
9540
9541 : see if umask exists
9542 set umask d_umask
9543 eval $inlibc
9544
9545 : see how we will look up host name
9546 echo " "
9547 if false; then
9548         : dummy stub to allow use of elif
9549 elif set uname val -f d_uname; eval $csym; $val; then
9550         if ./xenix; then
9551                 $cat <<'EOM'
9552 uname() was found, but you're running xenix, and older versions of xenix
9553 have a broken uname(). If you don't really know whether your xenix is old
9554 enough to have a broken system call, use the default answer.
9555
9556 EOM
9557                 dflt=y
9558                 case "$d_uname" in
9559                 "$define") dflt=n;;
9560                 esac
9561                 rp='Is your uname() broken?'
9562                 . ./myread
9563                 case "$ans" in
9564                 n*) d_uname="$define"; call=uname;;
9565                 esac
9566         else
9567                 echo 'uname() found.' >&4
9568                 d_uname="$define"
9569                 call=uname
9570         fi
9571 fi
9572 case "$d_gethname" in
9573 '') d_gethname="$undef";;
9574 esac
9575 case "$d_uname" in
9576 '') d_uname="$undef";;
9577 esac
9578 case "$d_phostname" in
9579 '') d_phostname="$undef";;
9580 esac
9581
9582 : backward compatibility for d_hvfork
9583 if test X$d_hvfork != X; then
9584         d_vfork="$d_hvfork"
9585         d_hvfork=''
9586 fi
9587 : see if there is a vfork
9588 val=''
9589 set vfork val
9590 eval $inlibc
9591
9592 : Ok, but do we want to use it. vfork is reportedly unreliable in 
9593 : perl on Solaris 2.x, and probably elsewhere.
9594 case "$val" in
9595 $define)
9596         echo " "
9597         case "$usevfork" in
9598         false) dflt='n';;
9599         *) dflt='y';;
9600         esac
9601         rp="Some systems have problems with vfork().  Do you want to use it?"
9602         . ./myread
9603         case "$ans" in
9604         y|Y) ;;
9605         *)
9606                 echo "Ok, we won't use vfork()."
9607                 val="$undef"
9608                 ;;
9609         esac
9610         ;;
9611 esac
9612 set d_vfork
9613 eval $setvar
9614 case "$d_vfork" in
9615 $define) usevfork='true';;
9616 *) usevfork='false';;
9617 esac
9618
9619 : see if this is an sysdir system
9620 set sys/dir.h i_sysdir
9621 eval $inhdr
9622
9623 : see if this is an sysndir system
9624 set sys/ndir.h i_sysndir
9625 eval $inhdr
9626
9627 : see if sys/types.h has to be included
9628 set sys/types.h i_systypes
9629 eval $inhdr
9630
9631 : see if closedir exists
9632 set closedir d_closedir
9633 eval $inlibc
9634
9635 case "$d_closedir" in
9636 "$define")
9637         echo " "
9638         echo "Checking whether closedir() returns a status..." >&4
9639         cat > closedir.c <<EOM
9640 #$i_dirent I_DIRENT             /**/
9641 #$i_sysdir I_SYS_DIR            /**/
9642 #$i_sysndir I_SYS_NDIR          /**/
9643 #$i_systypes I_SYS_TYPES        /**/
9644
9645 #if defined(I_SYS_TYPES)
9646 #include <sys/types.h>
9647 #endif
9648 #if defined(I_DIRENT)
9649 #include <dirent.h>
9650 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9651 #include <sys/dir.h>
9652 #endif
9653 #else
9654 #ifdef I_SYS_NDIR
9655 #include <sys/ndir.h>
9656 #else
9657 #ifdef I_SYS_DIR
9658 #ifdef hp9000s500
9659 #include <ndir.h>       /* may be wrong in the future */
9660 #else
9661 #include <sys/dir.h>
9662 #endif
9663 #endif
9664 #endif
9665 #endif 
9666 int main() { return closedir(opendir(".")); }
9667 EOM
9668         set closedir
9669         if eval $compile_ok; then
9670                 if ./closedir > /dev/null 2>&1 ; then
9671                         echo "Yes, it does."
9672                         val="$undef"
9673                 else
9674                         echo "No, it doesn't."
9675                         val="$define"
9676                 fi
9677         else
9678                 echo "(I can't seem to compile the test program--assuming it doesn't)"
9679                 val="$define"
9680         fi
9681         ;;
9682 *)
9683         val="$undef";
9684         ;;
9685 esac
9686 set d_void_closedir
9687 eval $setvar
9688 $rm -f closedir*
9689 : check for volatile keyword
9690 echo " "
9691 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
9692 $cat >try.c <<'EOCP'
9693 main()
9694 {
9695         typedef struct _goo_struct goo_struct;
9696         goo_struct * volatile goo = ((goo_struct *)0);
9697         struct _goo_struct {
9698                 long long_int;
9699                 int reg_int;
9700                 char char_var;
9701         };
9702         typedef unsigned short foo_t;
9703         char *volatile foo;
9704         volatile int bar;
9705         volatile foo_t blech;
9706         foo = foo;
9707 }
9708 EOCP
9709 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
9710         val="$define"
9711         echo "Yup, it does."
9712 else
9713         val="$undef"
9714         echo "Nope, it doesn't."
9715 fi
9716 set d_volatile
9717 eval $setvar
9718 $rm -f try.*
9719
9720 : see if there is a wait4
9721 set wait4 d_wait4
9722 eval $inlibc
9723
9724 : see if waitpid exists
9725 set waitpid d_waitpid
9726 eval $inlibc
9727
9728 : see if wcstombs exists
9729 set wcstombs d_wcstombs
9730 eval $inlibc
9731
9732 : see if wctomb exists
9733 set wctomb d_wctomb
9734 eval $inlibc
9735
9736 : preserve RCS keywords in files with variable substitution, grrr
9737 Date='$Date'
9738 Id='$Id'
9739 Log='$Log'
9740 RCSfile='$RCSfile'
9741 Revision='$Revision'
9742
9743 : check for alignment requirements
9744 echo " "
9745 case "$alignbytes" in
9746 '') echo "Checking alignment constraints..." >&4
9747         $cat >try.c <<'EOCP'
9748 struct foobar {
9749         char foo;
9750         double bar;
9751 } try;
9752 main()
9753 {
9754         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
9755 }
9756 EOCP
9757         set try
9758         if eval $compile_ok; then
9759                 dflt=`./try`
9760         else
9761                 dflt='8'
9762                 echo "(I can't seem to compile the test program...)"
9763         fi
9764         ;;
9765 *) dflt="$alignbytes"
9766         ;;
9767 esac
9768 rp="Doubles must be aligned on a how-many-byte boundary?"
9769 . ./myread
9770 alignbytes="$ans"
9771 $rm -f try.c try
9772
9773 : check for ordering of bytes in a long
9774 case "$byteorder" in
9775 '')
9776         $cat <<'EOM'
9777   
9778 In the following, larger digits indicate more significance.  A big-endian
9779 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
9780 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
9781 machines may have weird orders like 3412.  A Cray will report 87654321. If
9782 the test program works the default is probably right.
9783 I'm now running the test program...
9784 EOM
9785         $cat >try.c <<'EOCP'
9786 #include <stdio.h>
9787 main()
9788 {
9789         int i;
9790         union {
9791                 unsigned long l;
9792                 char c[sizeof(long)];
9793         } u;
9794
9795         if (sizeof(long) > 4)
9796                 u.l = (0x08070605L << 32) | 0x04030201L;
9797         else
9798                 u.l = 0x04030201L;
9799         for (i = 0; i < sizeof(long); i++)
9800                 printf("%c", u.c[i]+'0');
9801         printf("\n");
9802         exit(0);
9803 }
9804 EOCP
9805         xxx_prompt=y
9806         set try
9807         if eval $compile && ./try > /dev/null; then
9808                 dflt=`./try`
9809                 case "$dflt" in
9810                 [1-4][1-4][1-4][1-4]|12345678|87654321)
9811                         echo "(The test program ran ok.)"
9812                         echo "byteorder=$dflt"
9813                         xxx_prompt=n
9814                         ;;
9815                 ????|????????) echo "(The test program ran ok.)" ;;
9816                 *) echo "(The test program didn't run right for some reason.)" ;;
9817                 esac
9818         else
9819                 dflt='4321'
9820                 cat <<'EOM'
9821 (I can't seem to compile the test program.  Guessing big-endian...)
9822 EOM
9823         fi
9824         case "$xxx_prompt" in
9825         y)
9826                 rp="What is the order of bytes in a long?"
9827                 . ./myread
9828                 byteorder="$ans"
9829                 ;;
9830         *)      byteorder=$dflt
9831                 ;;
9832         esac
9833         ;;
9834 esac
9835 $rm -f try.c try
9836
9837 : how do we catenate cpp tokens here?
9838 echo " "
9839 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
9840 $cat >cpp_stuff.c <<'EOCP'
9841 #define RCAT(a,b)a/**/b
9842 #define ACAT(a,b)a ## b
9843 RCAT(Rei,ser)
9844 ACAT(Cir,cus)
9845 EOCP
9846 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
9847 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
9848         echo "Oh!  Smells like ANSI's been here." >&4
9849         echo "We can catify or stringify, separately or together!"
9850         cpp_stuff=42
9851 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
9852         echo "Ah, yes!  The good old days!" >&4
9853         echo "However, in the good old days we don't know how to stringify and"
9854         echo "catify at the same time."
9855         cpp_stuff=1
9856 else
9857         $cat >&4 <<EOM
9858 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
9859 to have to edit the values of CAT[2-5] in config.h...
9860 EOM
9861         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
9862 fi
9863 $rm -f cpp_stuff.*
9864
9865 : see if this is a db.h system
9866 set db.h i_db
9867 eval $inhdr
9868
9869 case "$i_db" in
9870 $define)
9871         : Check db version.
9872         echo " "
9873         echo "Checking Berkeley DB version ..." >&4
9874         $cat >try.c <<EOCP
9875 #$d_const HASCONST
9876 #ifndef HASCONST
9877 #define const
9878 #endif
9879 #include <sys/types.h>
9880 #include <stdio.h>
9881 #include <db.h>
9882 main()
9883 {
9884 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
9885     int Major, Minor, Patch ;
9886     unsigned long Version ;
9887     (void)db_version(&Major, &Minor, &Patch) ;
9888     printf("You have Berkeley DB Version 2 or greater\n");
9889
9890     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
9891                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
9892     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
9893                 Major, Minor, Patch) ;
9894
9895     /* check that db.h & libdb are compatible */
9896     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
9897         printf("db.h and libdb are incompatible\n") ;
9898         exit(3);        
9899     }
9900
9901     printf("db.h and libdb are compatible\n") ;
9902
9903     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
9904                 + DB_VERSION_PATCH ;
9905
9906     /* needs to be >= 2.3.4 */
9907     if (Version < 2003004) {
9908     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
9909         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
9910         exit(2);        
9911     }
9912
9913     exit(0);
9914 #else
9915 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
9916     printf("You have Berkeley DB Version 1\n");
9917     exit(0);    /* DB version < 2: the coast is clear. */
9918 #else
9919     exit(1);    /* <db.h> not Berkeley DB? */
9920 #endif
9921 #endif
9922 }
9923 EOCP
9924         set try
9925         if eval $compile && ./try; then
9926                 echo 'Looks OK.' >&4
9927         else
9928                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
9929                 i_db=$undef
9930                 case " $libs " in
9931                 *"-ldb "*)
9932                         : Remove db from list of libraries to use
9933                         echo "Removing unusable -ldb from library list" >&4
9934                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
9935                         shift
9936                         libs="$*"
9937                         echo "libs = $libs" >&4
9938                         ;;
9939                 esac
9940         fi
9941         $rm -f try.*
9942         ;;
9943 esac
9944
9945 case "$i_db" in
9946 define)
9947         : Check the return type needed for hash 
9948         echo " "
9949         echo "Checking return type needed for hash for Berkeley DB ..." >&4
9950         $cat >try.c <<EOCP
9951 #$d_const HASCONST
9952 #ifndef HASCONST
9953 #define const
9954 #endif
9955 #include <sys/types.h>
9956 #include <db.h>
9957
9958 #ifndef DB_VERSION_MAJOR
9959 u_int32_t hash_cb (ptr, size)
9960 const void *ptr;
9961 size_t size;
9962 {
9963 }
9964 HASHINFO info;
9965 main()
9966 {
9967         info.hash = hash_cb;
9968 }
9969 #endif
9970 EOCP
9971         if $cc $ccflags -c try.c >try.out 2>&1 ; then
9972                 if $contains warning try.out >>/dev/null 2>&1 ; then
9973                         db_hashtype='int'
9974                 else
9975                         db_hashtype='u_int32_t'
9976                 fi
9977         else
9978                 : XXX Maybe we should just give up here.
9979                 db_hashtype=u_int32_t
9980                 $cat try.out >&4
9981                 echo "Help:  I can't seem to compile the db test program." >&4
9982                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
9983         fi
9984         $rm -f try.*
9985         echo "Your version of Berkeley DB uses $db_hashtype for hash."
9986         ;;
9987 *)      db_hashtype=u_int32_t
9988         ;;
9989 esac
9990 case "$i_db" in
9991 define)
9992         : Check the return type needed for prefix 
9993         echo " "
9994         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
9995         cat >try.c <<EOCP
9996 #$d_const HASCONST
9997 #ifndef HASCONST
9998 #define const
9999 #endif
10000 #include <sys/types.h>
10001 #include <db.h>
10002
10003 #ifndef DB_VERSION_MAJOR
10004 size_t prefix_cb (key1, key2)
10005 const DBT *key1;
10006 const DBT *key2;
10007 {
10008 }
10009 BTREEINFO info;
10010 main()
10011 {
10012         info.prefix = prefix_cb;
10013 }
10014 #endif
10015 EOCP
10016         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10017                 if $contains warning try.out >>/dev/null 2>&1 ; then
10018                         db_prefixtype='int'
10019                 else
10020                         db_prefixtype='size_t'
10021                 fi
10022         else
10023                 db_prefixtype='size_t'
10024                 : XXX Maybe we should just give up here.
10025                 $cat try.out >&4
10026                 echo "Help:  I can't seem to compile the db test program." >&4
10027                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10028         fi
10029         $rm -f try.*
10030         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10031         ;;
10032 *)      db_prefixtype='size_t'
10033         ;;
10034 esac
10035
10036 : check for void type
10037 echo " "
10038 echo "Checking to see how well your C compiler groks the void type..." >&4
10039 case "$voidflags" in
10040 '')
10041         $cat >try.c <<'EOCP'
10042 #if TRY & 1
10043 void sub() {
10044 #else
10045 sub() {
10046 #endif
10047         extern void moo();      /* function returning void */
10048         void (*goo)();          /* ptr to func returning void */
10049 #if TRY & 8
10050         void *hue;              /* generic ptr */
10051 #endif
10052 #if TRY & 2
10053         void (*foo[10])();
10054 #endif
10055
10056 #if TRY & 4
10057         if(goo == moo) {
10058                 exit(0);
10059         }
10060 #endif
10061         exit(0);
10062 }
10063 main() { sub(); }
10064 EOCP
10065         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10066                 voidflags=$defvoidused
10067         echo "Good.  It appears to support void to the level $package wants.">&4
10068                 if $contains warning .out >/dev/null 2>&1; then
10069                         echo "However, you might get some warnings that look like this:"
10070                         $cat .out
10071                 fi
10072         else
10073 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10074                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10075                         echo "It supports 1..."
10076                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10077                                 echo "It also supports 2..."
10078                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10079                                         voidflags=7
10080                                         echo "And it supports 4 but not 8 definitely."
10081                                 else
10082                                         echo "It doesn't support 4..."
10083                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10084                                                 voidflags=11
10085                                                 echo "But it supports 8."
10086                                         else
10087                                                 voidflags=3
10088                                                 echo "Neither does it support 8."
10089                                         fi
10090                                 fi
10091                         else
10092                                 echo "It does not support 2..."
10093                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10094                                         voidflags=13
10095                                         echo "But it supports 4 and 8."
10096                                 else
10097                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10098                                                 voidflags=5
10099                                                 echo "And it supports 4 but has not heard about 8."
10100                                         else
10101                                                 echo "However it supports 8 but not 4."
10102                                         fi
10103                                 fi
10104                         fi
10105                 else
10106                         echo "There is no support at all for void."
10107                         voidflags=0
10108                 fi
10109         fi
10110 esac
10111 case "$voidflags" in
10112 "$defvoidused") ;;
10113 *)      $cat >&4 <<'EOM'
10114   Support flag bits are:
10115     1: basic void declarations.
10116     2: arrays of pointers to functions returning void.
10117     4: operations between pointers to and addresses of void functions.
10118     8: generic void pointers.
10119 EOM
10120         dflt="$voidflags";
10121         rp="Your void support flags add up to what?"
10122         . ./myread
10123         voidflags="$ans"
10124         ;;
10125 esac
10126 $rm -f try.* .out
10127
10128
10129 : How can we generate normalized random numbers ?
10130 echo " "
10131 case "$randfunc" in
10132 '')
10133         if set drand48 val -f; eval $csym; $val; then
10134                 dflt="drand48"
10135                 echo "Good, found drand48()." >&4
10136         elif set random val -f; eval $csym; $val; then
10137                 dflt="random"
10138                 echo "OK, found random()." >&4
10139         else
10140                 dflt="rand"
10141                 echo "Yick, looks like I have to use rand()." >&4
10142         fi
10143         echo " "
10144         ;;
10145 *)
10146         dflt="$randfunc"
10147         ;;
10148 esac
10149 cont=true
10150
10151 case "$ccflags" in
10152 *-Dmy_rand=*|*-Dmy_srand=*)
10153         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10154         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10155         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10156         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10157         ;;
10158 esac
10159
10160 while $test "$cont"; do
10161         rp="Use which function to generate random numbers?"
10162         . ./myread
10163         if $test "$ans" = "$dflt"; then
10164                 : null
10165         else
10166                 randbits=''
10167         fi
10168         randfunc="$ans"
10169         if set $ans val -f; eval $csym; $val; then
10170                 cont=''
10171         else
10172                 dflt=n
10173                 rp="Function $ans does not exists. Use that name anyway?"
10174                 . ./myread
10175                 dflt=rand
10176                 case "$ans" in
10177                         [yY]*) cont='';;
10178                 esac
10179         fi
10180         case "$cont" in
10181         '')
10182                 case "$randfunc" in
10183                 drand48)
10184                         drand01="drand48()"
10185                         seedfunc="srand48"
10186                         randbits=48
10187                         randseedtype=long
10188                         ;;
10189                 rand|random)
10190                         case "$randbits" in
10191                         '')
10192 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10193                                 $cat >try.c <<EOCP
10194 #$i_unistd I_UNISTD
10195 #$i_stdlib I_STDLIB
10196 #include <stdio.h>
10197 #ifdef I_UNISTD
10198 #  include <unistd.h>
10199 #endif
10200 #ifdef I_STDLIB
10201 #  include <stdlib.h>
10202 #endif
10203 main()
10204 {
10205         register int i;
10206         register unsigned long tmp;
10207         register unsigned long max = 0L;
10208
10209         for (i = 1000; i; i--) {
10210                 tmp = (unsigned long) $randfunc();
10211                 if (tmp > max) max = tmp;
10212         }
10213         for (i = 0; max; i++)
10214                 max /= 2;
10215         printf("%d\n",i);
10216 }
10217 EOCP
10218                                 set try
10219                                 if eval $compile_ok; then
10220                                         dflt=`try`
10221                                 else
10222                                         dflt='?'
10223                                         echo "(I can't seem to compile the test program...)"
10224                                 fi
10225                                 ;;
10226                         *)
10227                                 dflt="$randbits"
10228                                 ;;
10229                         esac
10230                         rp="How many bits does your $randfunc() function produce?"
10231                         . ./myread
10232                         randbits="$ans"
10233                         $rm -f try.c try
10234                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10235                         seedfunc="s$randfunc"
10236                         randseedtype=unsigned
10237                         ;;
10238                 *)
10239                         dflt="31"
10240                         rp="How many bits does your $randfunc() function produce?"
10241                         . ./myread
10242                         randbits="$ans"
10243                         seedfunc="s$randfunc"
10244                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10245                         if set $seedfunc val -f; eval $csym; $val; then
10246                                 echo "(Using $seedfunc() to seed random generator)"
10247                         else
10248                                 echo "(Warning: no $seedfunc() to seed random generator)"
10249                                 seedfunc=rand
10250                         fi
10251                         randseedtype=unsigned
10252                         ;;
10253                 esac
10254                 ;;
10255         esac
10256 done
10257
10258 echo " "
10259 echo "Determining whether or not we are on an EBCDIC system..." >&4
10260 $cat >tebcdic.c <<'EOM'
10261 int main()
10262 {
10263   if ('M'==0xd4) return 0;
10264   return 1;
10265 }
10266 EOM
10267
10268 val=$undef
10269 set tebcdic
10270 if eval $compile_ok; then
10271         if ./tebcdic; then
10272                 echo "You have EBCDIC." >&4
10273                 val="$define"
10274         else
10275                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10276         fi
10277 else
10278         echo "$me: I'm unable to compile the test program." >&4
10279         echo "I'll assume ASCII or some ISO Latin." >&4
10280 fi
10281 $rm -f tebcdic.c tebcdic
10282 set ebcdic
10283 eval $setvar
10284
10285 : see what type file positions are declared as in the library
10286 rp="What is the type for file position used by fsetpos()?"
10287 set fpos_t fpostype long stdio.h sys/types.h
10288 eval $typedef_ask
10289
10290 : get csh whereabouts
10291 case "$csh" in
10292 'csh') val="$undef" ;;
10293 *) val="$define" ;;
10294 esac
10295 set d_csh
10296 eval $setvar
10297 : Respect a hint or command line value for full_csh.
10298 case "$full_csh" in
10299 '') full_csh=$csh ;;
10300 esac
10301
10302 : Store the full pathname to the sed program for use in the C program
10303 full_sed=$sed
10304
10305 : see what type gids are declared as in the kernel
10306 echo " "
10307 echo "Looking for the type for group ids returned by getgid()."
10308 set gid_t gidtype xxx stdio.h sys/types.h
10309 eval $typedef
10310 case "$gidtype" in
10311 xxx)
10312         xxx=`./findhdr sys/user.h`
10313         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10314         case $1 in
10315         unsigned) dflt="$1 $2" ;;
10316         *) dflt="$1" ;;
10317         esac
10318         ;;
10319 *) dflt="$gidtype";;
10320 esac
10321 case "$gidtype" in
10322 gid_t) echo "gid_t found." ;;
10323 *)      rp="What is the type for group ids returned by getgid()?"
10324         . ./myread
10325         gidtype="$ans"
10326         ;;
10327 esac
10328
10329 : see if getgroups exists
10330 set getgroups d_getgrps
10331 eval $inlibc
10332
10333 : see if setgroups exists
10334 set setgroups d_setgrps
10335 eval $inlibc
10336
10337
10338 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10339 echo " "
10340 case "$d_getgrps$d_setgrps" in
10341 *define*)
10342         case "$groupstype" in
10343         '') dflt="$gidtype" ;;
10344         *)  dflt="$groupstype" ;;
10345         esac
10346         $cat <<EOM
10347 What type of pointer is the second argument to getgroups() and setgroups()?
10348 Usually this is the same as group ids, $gidtype, but not always.
10349
10350 EOM
10351         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10352         . ./myread
10353         groupstype="$ans"
10354         ;;
10355 *)  groupstype="$gidtype";;
10356 esac
10357
10358 : see what type lseek is declared as in the kernel
10359 rp="What is the type used for lseek's offset on this system?"
10360 set off_t lseektype long stdio.h sys/types.h
10361 eval $typedef_ask
10362
10363 echo " "
10364 $echo $n "Checking to see how big your file offsets are...$c" >&4
10365 $cat >try.c <<EOCP
10366 #include <sys/types.h>
10367 #include <stdio.h>
10368 main()
10369 {
10370         printf("%d\n", sizeof($lseektype));
10371 }
10372 EOCP
10373 set try
10374 if eval $compile_ok; then
10375         lseeksize=`./try`
10376         $echo " $lseeksize bytes." >&4
10377 else
10378         dflt='4'
10379         echo " "
10380         echo "(I can't seem to compile the test program.  Guessing...)"
10381         rp="What is the size of your file offsets (in bytes)?"
10382         . ./myread
10383         lseeksize="$ans"
10384 fi
10385 $rm -f try.c try
10386
10387 echo " "
10388 echo "Checking if your $make program sets \$(MAKE)..." >&4
10389 case "$make_set_make" in
10390 '')
10391         $sed 's/^X //' > testmake.mak << 'EOF'
10392 Xall:
10393 X       @echo 'maketemp="$(MAKE)"'
10394 EOF
10395         case "`$make -f testmake.mak 2>/dev/null`" in
10396         *maketemp=*) make_set_make='#' ;;
10397         *)      make_set_make="MAKE=$make" ;;
10398         esac
10399         $rm -f testmake.mak
10400         ;;
10401 esac
10402 case "$make_set_make" in
10403 '#') echo "Yup, it does.";;
10404 *) echo "Nope, it doesn't.";;
10405 esac
10406
10407 : see what type is used for mode_t
10408 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
10409 set mode_t modetype int stdio.h sys/types.h
10410 eval $typedef_ask
10411
10412 : define a fucntion to check prototypes
10413 $cat > protochk <<EOSH
10414 $startsh
10415 cc="$cc"
10416 optimize="$optimize"
10417 ccflags="$ccflags"
10418 prototype="$prototype"
10419 define="$define"
10420 rm=$rm
10421 EOSH
10422
10423 $cat >> protochk <<'EOSH'
10424
10425 $rm -f try.c
10426 foo="$1"
10427 shift
10428 while test $# -ge 2; do
10429         case "$1" in
10430                 $define) echo "#include <$2>" >> try.c ;;
10431                 literal) echo "$2" >> try.c ;;
10432         esac
10433     shift 2
10434 done
10435 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
10436 cat >> try.c <<'EOCP'
10437 #ifdef CAN_PROTOTYPE
10438 #define _(args) args
10439 #else
10440 #define _(args) ()
10441 #endif
10442 EOCP
10443 echo "$foo" >> try.c
10444 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
10445 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
10446 status=$?
10447 $rm -f try.[co]
10448 exit $status
10449 EOSH
10450 chmod +x protochk
10451 $eunicefix protochk
10452
10453 : see what type is used for size_t
10454 rp="What is the type used for the length parameter for string functions?"
10455 set size_t sizetype 'unsigned int' stdio.h sys/types.h
10456 eval $typedef_ask
10457
10458 : check for type of arguments to gethostbyaddr. 
10459 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
10460         case "$d_gethbyaddr" in
10461         $define)
10462                 $cat <<EOM
10463
10464 Checking to see what type of arguments are accepted by gethostbyaddr().
10465 EOM
10466                 hdrs="$define sys/types.h
10467                         $d_socket sys/socket.h 
10468                         $i_niin netinet/in.h 
10469                         $i_netdb netdb.h
10470                         $i_unistd unistd.h"
10471                 : The first arg can 'char *' or 'void *'
10472                 : The second arg is some of integral type
10473                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
10474                         for yyy in size_t long int; do
10475                                 case "$netdb_host_type" in
10476                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
10477                                         if ./protochk "$try" $hdrs; then
10478                                                 echo "Your system accepts $xxx for the first arg."
10479                                                 echo "...and $yyy for the second arg."
10480                                                 netdb_host_type="$xxx"
10481                                                 netdb_hlen_type="$yyy"
10482                                         fi
10483                                         ;;
10484                                 esac
10485                         done
10486                 done
10487                 : In case none of those worked, prompt the user.
10488                 case "$netdb_host_type" in
10489                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
10490                         dflt='char *'
10491                         . ./myread
10492                         netdb_host_type=$ans
10493                         rp='What is the type for the 2nd argument to gethostbyaddr?'
10494                         dflt="$sizetype"
10495                         . ./myread
10496                         netdb_hlen_type=$ans
10497                         ;;
10498                 esac
10499                 ;;
10500         *)      : no gethostbyaddr, so pick harmless defaults
10501                 netdb_host_type='char *'
10502                 netdb_hlen_type="$sizetype"
10503                 ;;
10504         esac
10505         # Remove the "const" if needed. -- but then we'll have a 
10506         # prototype clash!
10507         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
10508 fi
10509
10510 : check for type of argument to gethostbyname. 
10511 if test "X$netdb_name_type" = X ; then
10512         case "$d_gethbyname" in
10513         $define)
10514                 $cat <<EOM
10515
10516 Checking to see what type of argument is accepted by gethostbyname().
10517 EOM
10518                 hdrs="$define sys/types.h
10519                         $d_socket sys/socket.h 
10520                         $i_niin netinet/in.h 
10521                         $i_netdb netdb.h
10522                         $i_unistd unistd.h"
10523                 for xxx in "const char *" "char *"; do
10524                         case "$netdb_name_type" in
10525                         '')     try="extern struct hostent *gethostbyname($xxx);"
10526                                 if ./protochk "$try" $hdrs; then
10527                                         echo "Your system accepts $xxx."
10528                                         netdb_name_type="$xxx"
10529                                 fi
10530                                 ;;
10531                         esac
10532                 done
10533                 : In case none of those worked, prompt the user.
10534                 case "$netdb_name_type" in
10535                 '')     rp='What is the type for the 1st argument to gethostbyname?'
10536                         dflt='char *'
10537                         . ./myread
10538                         netdb_name_type=$ans
10539                         ;;
10540                 esac
10541                 ;;
10542         *)      : no gethostbyname, so pick harmless default
10543                 netdb_name_type='char *'
10544                 ;;
10545         esac
10546 fi
10547
10548 : check for type of 1st argument to getnetbyaddr. 
10549 if test "X$netdb_net_type" = X ; then
10550         case "$d_getnbyaddr" in
10551         $define)
10552                 $cat <<EOM
10553
10554 Checking to see what type of 1st argument is accepted by getnetbyaddr().
10555 EOM
10556                 hdrs="$define sys/types.h
10557                         $d_socket sys/socket.h 
10558                         $i_niin netinet/in.h 
10559                         $i_netdb netdb.h
10560                         $i_unistd unistd.h"
10561                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
10562                         case "$netdb_net_type" in
10563                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
10564                                 if ./protochk "$try" $hdrs; then
10565                                         echo "Your system accepts $xxx."
10566                                         netdb_net_type="$xxx"
10567                                 fi
10568                                 ;;
10569                         esac
10570                 done
10571                 : In case none of those worked, prompt the user.
10572                 case "$netdb_net_type" in
10573                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
10574                         dflt='long'
10575                         . ./myread
10576                         netdb_net_type=$ans
10577                         ;;
10578                 esac
10579                 ;;
10580         *)      : no getnetbyaddr, so pick harmless default
10581                 netdb_net_type='long'
10582                 ;;
10583         esac
10584 fi
10585 : locate the preferred pager for this system
10586 case "$pager" in
10587 '')
10588         dflt=''
10589         case "$pg" in
10590         /*) dflt=$pg;;
10591         esac
10592         case "$more" in
10593         /*) dflt=$more;;
10594         esac
10595         case "$less" in
10596         /*) dflt=$less;;
10597         esac
10598         case "$dflt" in
10599         '') dflt=/usr/ucb/more;;
10600         esac
10601         ;;
10602 *) dflt="$pager";;
10603 esac
10604 echo " "
10605 fn=f/
10606 rp='What pager is used on your system?'
10607 . ./getfile
10608 pager="$ans"
10609
10610 : see what type pids are declared as in the kernel
10611 rp="What is the type of process ids on this system?"
10612 set pid_t pidtype int stdio.h sys/types.h
10613 eval $typedef_ask
10614
10615 : check for length of pointer
10616 echo " "
10617 case "$ptrsize" in
10618 '')
10619         $echo $n "Checking to see how big your pointers are...$c" >&4
10620         if test "$voidflags" -gt 7; then
10621                 echo '#define VOID_PTR char *' > try.c
10622         else
10623                 echo '#define VOID_PTR void *' > try.c
10624         fi
10625         $cat >>try.c <<'EOCP'
10626 #include <stdio.h>
10627 main()
10628 {
10629         printf("%d\n", sizeof(VOID_PTR));
10630         exit(0);
10631 }
10632 EOCP
10633         set try
10634         if eval $compile_ok; then
10635                 ptrsize=`./try`
10636                 $echo " $ptrsize bytes." >&4
10637         else
10638                 dflt='4'
10639                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
10640                 rp="What is the size of a pointer (in bytes)?"
10641                 . ./myread
10642                 ptrsize="$ans"
10643         fi
10644         ;;
10645 esac
10646 $rm -f try.c try
10647
10648 : see if ar generates random libraries by itself
10649 echo " "
10650 echo "Checking how to generate random libraries on your machine..." >&4
10651 echo 'int bar1() { return bar2(); }' > bar1.c
10652 echo 'int bar2() { return 2; }' > bar2.c
10653 $cat > foo.c <<'EOP'
10654 main() { printf("%d\n", bar1()); exit(0); }
10655 EOP
10656 $cc $ccflags -c bar1.c >/dev/null 2>&1
10657 $cc $ccflags -c bar2.c >/dev/null 2>&1
10658 $cc $ccflags -c foo.c >/dev/null 2>&1
10659 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
10660 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
10661         ./foobar >/dev/null 2>&1; then
10662         echo "$ar appears to generate random libraries itself."
10663         orderlib=false
10664         ranlib=":"
10665 elif $ar ts bar$_a >/dev/null 2>&1 &&
10666         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
10667         ./foobar >/dev/null 2>&1; then
10668                 echo "a table of contents needs to be added with '$ar ts'."
10669                 orderlib=false
10670                 ranlib="$ar ts"
10671 else
10672         case "$ranlib" in
10673         :) ranlib='';;
10674         '')
10675                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
10676                 $test -f $ranlib || ranlib=''
10677                 ;;
10678         esac
10679         if $test -n "$ranlib"; then
10680                 echo "your system has '$ranlib'; we'll use that."
10681                 orderlib=false
10682         else
10683                 echo "your system doesn't seem to support random libraries"
10684                 echo "so we'll use lorder and tsort to order the libraries."
10685                 orderlib=true
10686                 ranlib=":"
10687         fi
10688 fi
10689 $rm -f foo* bar* 
10690
10691 : see if sys/select.h has to be included
10692 set sys/select.h i_sysselct
10693 eval $inhdr
10694
10695 : see if we should include time.h, sys/time.h, or both
10696 echo " "
10697 if test "X$timeincl" = X; then
10698         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10699         $echo $n "I'm now running the test program...$c"
10700         $cat >try.c <<'EOCP'
10701 #include <sys/types.h>
10702 #ifdef I_TIME
10703 #include <time.h>
10704 #endif
10705 #ifdef I_SYSTIME
10706 #ifdef SYSTIMEKERNEL
10707 #define KERNEL
10708 #endif
10709 #include <sys/time.h>
10710 #endif
10711 #ifdef I_SYSSELECT
10712 #include <sys/select.h>
10713 #endif
10714 main()
10715 {
10716         struct tm foo;
10717 #ifdef S_TIMEVAL
10718         struct timeval bar;
10719 #endif
10720 #ifdef S_TIMEZONE
10721         struct timezone tzp;
10722 #endif
10723         if (foo.tm_sec == foo.tm_sec)
10724                 exit(0);
10725 #ifdef S_TIMEVAL
10726         if (bar.tv_sec == bar.tv_sec)
10727                 exit(0);
10728 #endif
10729         exit(1);
10730 }
10731 EOCP
10732         flags=''
10733         for s_timezone in '-DS_TIMEZONE' ''; do
10734         sysselect=''
10735         for s_timeval in '-DS_TIMEVAL' ''; do
10736         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10737         for i_time in '' '-DI_TIME'; do
10738         for i_systime in '-DI_SYSTIME' ''; do
10739                 case "$flags" in
10740                 '') $echo $n ".$c"
10741                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10742                         if eval $compile; then
10743                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10744                                 shift
10745                                 flags="$*"
10746                                 echo " "
10747                                 $echo $n "Succeeded with $flags$c"
10748                         fi
10749                         ;;
10750                 esac
10751         done
10752         done
10753         done
10754         done
10755         done
10756         timeincl=''
10757         echo " "
10758         case "$flags" in
10759         *SYSTIMEKERNEL*) i_systimek="$define"
10760                 timeincl=`./findhdr sys/time.h`
10761                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10762         *) i_systimek="$undef";;
10763         esac
10764         case "$flags" in
10765         *I_TIME*) i_time="$define"
10766                 timeincl=`./findhdr time.h`" $timeincl"
10767                 echo "We'll include <time.h>." >&4;;
10768         *) i_time="$undef";;
10769         esac
10770         case "$flags" in
10771         *I_SYSTIME*) i_systime="$define"
10772                 timeincl=`./findhdr sys/time.h`" $timeincl"
10773                 echo "We'll include <sys/time.h>." >&4;;
10774         *) i_systime="$undef";;
10775         esac
10776         $rm -f try.c try
10777 fi
10778
10779 : check for fd_set items
10780 $cat <<EOM
10781
10782 Checking to see how well your C compiler handles fd_set and friends ...
10783 EOM
10784 $cat >fd_set.c <<EOCP
10785 #$i_systime I_SYS_TIME
10786 #$i_sysselct I_SYS_SELECT
10787 #$d_socket HAS_SOCKET
10788 #include <sys/types.h>
10789 #ifdef HAS_SOCKET
10790 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10791 #endif
10792 #ifdef I_SYS_TIME
10793 #include <sys/time.h>
10794 #endif
10795 #ifdef I_SYS_SELECT
10796 #include <sys/select.h>
10797 #endif
10798 main() {
10799         fd_set fds;
10800
10801 #ifdef TRYBITS
10802         if(fds.fds_bits);
10803 #endif
10804
10805 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10806         exit(0);
10807 #else
10808         exit(1);
10809 #endif
10810 }
10811 EOCP
10812 set fd_set -DTRYBITS
10813 if eval $compile; then
10814         d_fds_bits="$define"
10815         d_fd_set="$define"
10816         echo "Well, your system knows about the normal fd_set typedef..." >&4
10817         if ./fd_set; then
10818                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10819                 d_fd_macros="$define"
10820         else
10821                 $cat >&4 <<'EOM'
10822 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10823 EOM
10824                 d_fd_macros="$undef"
10825         fi
10826 else
10827         $cat <<'EOM'
10828 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10829 EOM
10830         set fd_set
10831         if eval $compile; then
10832                 d_fds_bits="$undef"
10833                 d_fd_set="$define"
10834                 echo "Well, your system has some sort of fd_set available..." >&4
10835                 if ./fd_set; then
10836                         echo "and you have the normal fd_set macros." >&4
10837                         d_fd_macros="$define"
10838                 else
10839                         $cat <<'EOM'
10840 but not the normal fd_set macros!  Gross!  More work for me...
10841 EOM
10842                         d_fd_macros="$undef"
10843                 fi
10844         else
10845         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10846                 d_fd_set="$undef"
10847                 d_fds_bits="$undef"
10848                 d_fd_macros="$undef"
10849         fi
10850 fi
10851 $rm -f fd_set*
10852
10853 : check for type of arguments to select. 
10854 case "$selecttype" in
10855 '') case "$d_select" in
10856         $define)
10857                 $cat <<EOM
10858 Checking to see what type of arguments are accepted by select().
10859 EOM
10860                 hdrs="$define sys/types.h
10861                         $i_systime sys/time.h 
10862                         $i_sysselct sys/select.h
10863                         $d_socket sys/socket.h"
10864                 : The first arg can be int, unsigned, or size_t
10865                 : The last arg may or may not be 'const'
10866                 val=''
10867                 for xxx in 'fd_set *' 'int *' 'void *'; do
10868                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
10869                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
10870                                         case "$val" in
10871                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
10872                                                 if ./protochk "$try" $hdrs; then
10873                                                         echo "Your system accepts $xxx."
10874                                                         val="$xxx"
10875                                                 fi
10876                                                 ;;
10877                                         esac
10878                                 done
10879                         done
10880                 done
10881                 case "$val" in
10882                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
10883                         case "$d_fd_set" in
10884                                 $define) dflt="fd_set *" ;;
10885                                 *)              dflt="int *" ;;
10886                         esac
10887                         . ./myread
10888                         val=$ans
10889                         ;;
10890                 esac
10891                 selecttype="$val"
10892                 ;;
10893         *)      : no select, so pick a harmless default
10894                 selecttype='int *'
10895                 ;;
10896         esac
10897         ;;
10898 esac
10899
10900 : check for the select 'width'
10901 case "$selectminbits" in
10902 '') case "$d_select" in
10903         $define)
10904                 $cat <<EOM
10905
10906 Checking to see on how many bits at a time your select() operates...
10907 EOM
10908                 $cat >try.c <<EOCP
10909 #include <sys/types.h>
10910 #$i_time I_TIME
10911 #$i_systime I_SYS_TIME
10912 #$i_systimek I_SYS_TIME_KERNEL
10913 #ifdef I_TIME
10914 #   include <time.h>
10915 #endif
10916 #ifdef I_SYS_TIME
10917 #   ifdef I_SYS_TIME_KERNEL
10918 #       define KERNEL
10919 #   endif
10920 #   include <sys/time.h>
10921 #   ifdef I_SYS_TIME_KERNEL
10922 #       undef KERNEL
10923 #   endif
10924 #endif
10925 #$i_sysselct I_SYS_SELECT
10926 #ifdef I_SYS_SELECT
10927 #include <sys/select.h>
10928 #endif
10929 #include <stdio.h>
10930 $selecttype b;
10931 #define S sizeof(*(b))
10932 #define MINBITS 64
10933 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
10934 #define NBITS  (NBYTES * 8)
10935 int main() {
10936     char s[NBYTES];
10937     struct timeval t;
10938     int i;
10939     FILE* fp;
10940     int fd;
10941
10942     fclose(stdin);
10943     fp = fopen("try.c", "r");
10944     if (fp == 0)
10945       exit(1);
10946     fd = fileno(fp);
10947     if (fd < 0)
10948       exit(2);
10949     b = ($selecttype)s;
10950     for (i = 0; i < NBITS; i++)
10951         FD_SET(i, b);
10952     t.tv_sec  = 0;
10953     t.tv_usec = 0;
10954     select(fd + 1, b, 0, 0, &t);
10955     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
10956     printf("%d\n", i + 1);
10957     return 0;
10958 }
10959 EOCP
10960                 set try
10961                 if eval $compile_ok; then
10962                         selectminbits=`./try`
10963                         case "$selectminbits" in
10964                         '')     cat >&4 <<EOM
10965 Cannot figure out on how many bits at a time your select() operates.
10966 I'll play safe and guess it is 32 bits.
10967 EOM
10968                                 selectminbits=32
10969                                 bits="32 bits"
10970                                 ;;
10971                         1)      bits="1 bit" ;;
10972                         *)      bits="$selectminbits bits" ;;
10973                         esac
10974                         echo "Your select() operates on $bits at a time." >&4
10975                 else
10976                         rp='What is the minimum number of bits your select() operates on?'
10977                         case "$byteorder" in
10978                         1234|12345678)  dflt=32 ;;
10979                         *)              dflt=1  ;;
10980                         esac
10981                         . ./myread
10982                         val=$ans
10983                         selectminbits="$val"
10984                 fi
10985                 $rm -f try.* try
10986                 ;;
10987         *)      : no select, so pick a harmless default
10988                 selectminbits='32'
10989                 ;;
10990         esac
10991         ;;
10992 esac
10993
10994 : Trace out the files included by signal.h, then look for SIGxxx names.
10995 : Remove SIGARRAYSIZE used by HPUX.
10996 : Remove SIGTYP void lines used by OS2.
10997 xxx=`echo '#include <signal.h>' |
10998         $cppstdin $cppminus $cppflags 2>/dev/null |
10999         $grep '^[       ]*#.*include' | 
11000         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11001 : Check this list of files to be sure we have parsed the cpp output ok.
11002 : This will also avoid potentially non-existent files, such 
11003 : as ../foo/bar.h
11004 xxxfiles=''
11005 for xx in $xxx /dev/null ; do
11006         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11007 done
11008 : If we have found no files, at least try signal.h
11009 case "$xxxfiles" in
11010 '')     xxxfiles=`./findhdr signal.h` ;;
11011 esac
11012 xxx=`awk '
11013 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
11014         print substr($2, 4, 20)
11015 }
11016 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11017         print substr($3, 4, 20)
11018 }' $xxxfiles`
11019 : Append some common names just in case the awk scan failed.
11020 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11021 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11022 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11023 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11024 : generate a few handy files for later
11025 $cat > signal.c <<'EOCP'
11026 #include <sys/types.h>
11027 #include <signal.h>
11028 #include <stdio.h>
11029 int main() {
11030
11031 /* Strange style to avoid deeply-nested #if/#else/#endif */
11032 #ifndef NSIG
11033 #  ifdef _NSIG
11034 #    define NSIG (_NSIG)
11035 #  endif
11036 #endif
11037
11038 #ifndef NSIG
11039 #  ifdef SIGMAX
11040 #    define NSIG (SIGMAX+1)
11041 #  endif
11042 #endif
11043
11044 #ifndef NSIG
11045 #  ifdef SIG_MAX
11046 #    define NSIG (SIG_MAX+1)
11047 #  endif
11048 #endif
11049
11050 #ifndef NSIG
11051 #  ifdef MAXSIG
11052 #    define NSIG (MAXSIG+1)
11053 #  endif
11054 #endif
11055
11056 #ifndef NSIG
11057 #  ifdef MAX_SIG
11058 #    define NSIG (MAX_SIG+1)
11059 #  endif
11060 #endif
11061
11062 #ifndef NSIG
11063 #  ifdef SIGARRAYSIZE
11064 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11065 #  endif
11066 #endif
11067
11068 #ifndef NSIG
11069 #  ifdef _sys_nsig
11070 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11071 #  endif
11072 #endif
11073
11074 /* Default to some arbitrary number that's big enough to get most
11075    of the common signals.
11076 */
11077 #ifndef NSIG
11078 #    define NSIG 50
11079 #endif
11080
11081 printf("NSIG %d\n", NSIG);
11082
11083 #ifndef JUST_NSIG
11084
11085 EOCP
11086
11087 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11088 {
11089         printf "#ifdef SIG"; printf $1; printf "\n"
11090         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11091         printf $1; printf ");\n"
11092         printf "#endif\n"
11093 }
11094 END {
11095         printf "#endif /* JUST_NSIG */\n";
11096         printf "}\n";
11097 }
11098 ' >>signal.c
11099 $cat >signal.awk <<'EOP'
11100 BEGIN { ndups = 0 }
11101 $1 ~ /^NSIG$/ { nsig = $2 }
11102 ($1 !~ /^NSIG$/) && (NF == 2) {
11103     if ($2 > maxsig) { maxsig = $2 }
11104     if (sig_name[$2]) {
11105         dup_name[ndups] = $1
11106         dup_num[ndups] = $2
11107         ndups++ 
11108     }
11109     else {
11110         sig_name[$2] = $1
11111         sig_num[$2] = $2
11112     }
11113
11114 }
11115 END { 
11116     if (nsig == 0) { nsig = maxsig + 1 }
11117         for (n = 1; n < nsig; n++) {
11118                 if (sig_name[n]) {
11119                         printf("%s %d\n", sig_name[n], sig_num[n])
11120                 }
11121                 else {
11122                         printf("NUM%d %d\n", n, n) 
11123                 }
11124         }
11125     for (n = 0; n < ndups; n++) {
11126                 printf("%s %d\n", dup_name[n], dup_num[n])
11127     }
11128 }
11129 EOP
11130 $cat >signal_cmd <<EOS
11131 $startsh
11132 if $test -s signal.lst; then
11133     echo "Using your existing signal.lst file"
11134         exit 0
11135 fi
11136 xxx="$xxx"
11137 EOS
11138 $cat >>signal_cmd <<'EOS'
11139
11140 set signal
11141 if eval $compile_ok; then
11142         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11143 else
11144         echo "(I can't seem be able to compile the whole test program)" >&4
11145         echo "(I'll try it in little pieces.)" >&4
11146         set signal -DJUST_NSIG
11147         if eval $compile_ok; then
11148                 ./signal$_exe > signal.nsg
11149                 $cat signal.nsg
11150         else
11151                 echo "I can't seem to figure out how many signals you have." >&4
11152                 echo "Guessing 50." >&4
11153                 echo 'NSIG 50' > signal.nsg
11154         fi
11155         : Now look at all the signal names, one at a time.
11156         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11157                 $cat > signal.c <<EOCP
11158 #include <sys/types.h>
11159 #include <signal.h>
11160 #include <stdio.h>
11161 int main() {
11162 printf("$xx %d\n", SIG${xx});
11163 return 0;
11164 }
11165 EOCP
11166                 set signal
11167                 if eval $compile; then
11168                         echo "SIG${xx} found."
11169                         ./signal$_exe  >> signal.ls1
11170                 else
11171                         echo "SIG${xx} NOT found."
11172                 fi
11173         done
11174         if $test -s signal.ls1; then
11175                 $cat signal.nsg signal.ls1 |
11176                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11177         fi
11178
11179 fi
11180 if $test -s signal.lst; then
11181         :
11182 else
11183         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11184         echo 'kill -l' >signal
11185         set X `csh -f <signal`
11186         $rm -f signal
11187         shift
11188         case $# in
11189         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11190         esac
11191         echo $@ | $tr ' ' $trnl | \
11192                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
11193 fi
11194 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11195 EOS
11196 chmod a+x signal_cmd
11197 $eunicefix signal_cmd
11198
11199 : generate list of signal names
11200 echo " "
11201 case "$sig_name_init" in
11202 '')
11203         echo "Generating a list of signal names and numbers..." >&4
11204         . ./signal_cmd
11205         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11206         sig_name="ZERO $sig_name"
11207         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11208                                                 { printf "\"%s\", ", $1 }
11209                                                 END { printf "0\n" }' signal.lst`
11210         sig_num=`$awk 'BEGIN { printf "0, " }
11211                                         { printf "%d, ", $2}
11212                                         END { printf "0\n"}' signal.lst`
11213         ;;
11214 esac
11215 echo "The following signals are available:"
11216 echo " "
11217 echo $sig_name | $awk \
11218 'BEGIN { linelen = 0 }
11219 {
11220         for (i = 1; i <= NF; i++) {
11221                 name = "SIG" $i " "
11222                 linelen = linelen + length(name)
11223                 if (linelen > 70) {
11224                         printf "\n"
11225                         linelen = length(name)
11226                 }
11227                 printf "%s", name
11228         }
11229         printf "\n"
11230 }'
11231 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11232
11233 : see what type is used for signed size_t
11234 set ssize_t ssizetype int stdio.h sys/types.h
11235 eval $typedef
11236 dflt="$ssizetype"
11237 $cat > ssize.c <<EOM
11238 #include <stdio.h>
11239 #include <sys/types.h>
11240 #define Size_t $sizetype
11241 #define SSize_t $dflt
11242 main()
11243 {
11244         if (sizeof(Size_t) == sizeof(SSize_t))
11245                 printf("$dflt\n");
11246         else if (sizeof(Size_t) == sizeof(int))
11247                 printf("int\n");
11248         else 
11249                 printf("long\n");
11250         exit(0);
11251 }
11252 EOM
11253 echo " "
11254 set ssize
11255 if eval $compile_ok && ./ssize > /dev/null; then
11256         ssizetype=`./ssize`
11257         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11258 else
11259         $cat >&4 <<EOM
11260 Help! I can't compile and run the ssize_t test program: please enlighten me!
11261 (This is probably a misconfiguration in your system or libraries, and
11262 you really ought to fix it.  Still, I'll try anyway.)
11263
11264 I need a type that is the same size as $sizetype, but is guaranteed to
11265 be signed.  Common values are ssize_t, int and long.
11266
11267 EOM
11268         rp="What signed type is the same size as $sizetype?"
11269         . ./myread
11270         ssizetype="$ans"
11271 fi
11272 $rm -f ssize ssize.*
11273
11274 : see what type of char stdio uses.
11275 echo " "
11276 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11277         echo "Your stdio uses unsigned chars." >&4
11278         stdchar="unsigned char"
11279 else
11280         echo "Your stdio uses signed chars." >&4
11281         stdchar="char"
11282 fi
11283
11284 : see if time exists
11285 echo " "
11286 if test "X$d_time" = X -o X"$timetype" = X; then
11287     if set time val -f d_time; eval $csym; $val; then
11288                 echo 'time() found.' >&4
11289                 val="$define"
11290                 rp="What is the type returned by time() on this system?"
11291                 set time_t timetype long stdio.h sys/types.h
11292                 eval $typedef_ask
11293     else
11294                 echo 'time() not found, hope that will do.' >&4
11295                 val="$undef"
11296                 timetype='int';
11297     fi
11298     set d_time
11299     eval $setvar
11300 fi
11301
11302 : see what type uids are declared as in the kernel
11303 echo " "
11304 echo "Looking for the type for user ids returned by getuid()."
11305 set uid_t uidtype xxx stdio.h sys/types.h
11306 eval $typedef
11307 case "$uidtype" in
11308 xxx)
11309         xxx=`./findhdr sys/user.h`
11310         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11311         case $1 in
11312         unsigned) dflt="$1 $2" ;;
11313         *) dflt="$1" ;;
11314         esac
11315         ;;
11316 *) dflt="$uidtype";;
11317 esac
11318 case "$uidtype" in
11319 uid_t)  echo "uid_t found." ;;
11320 *)      rp="What is the type for user ids returned by getuid()?"
11321         . ./myread
11322         uidtype="$ans"
11323         ;;
11324 esac
11325
11326 : see if dbm.h is available
11327 : see if dbmclose exists
11328 set dbmclose d_dbmclose
11329 eval $inlibc
11330
11331 case "$d_dbmclose" in
11332 $define)
11333         set dbm.h i_dbm
11334         eval $inhdr
11335         case "$i_dbm" in
11336         $define)
11337                 val="$undef"
11338                 set i_rpcsvcdbm
11339                 eval $setvar
11340                 ;;
11341         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11342                 eval $inhdr
11343                 ;;
11344         esac
11345         ;;
11346 *)      echo "We won't be including <dbm.h>"
11347         val="$undef"
11348         set i_dbm
11349         eval $setvar
11350         val="$undef"
11351         set i_rpcsvcdbm
11352         eval $setvar
11353         ;;
11354 esac
11355
11356 : see if this is a sys/file.h system
11357 val=''
11358 set sys/file.h val
11359 eval $inhdr
11360
11361 : do we need to include sys/file.h ?
11362 case "$val" in
11363 "$define")
11364         echo " "
11365         if $h_sysfile; then
11366                 val="$define"
11367                 echo "We'll be including <sys/file.h>." >&4
11368         else
11369                 val="$undef"
11370                 echo "We won't be including <sys/file.h>." >&4
11371         fi
11372         ;;
11373 *)
11374         h_sysfile=false
11375         ;;
11376 esac
11377 set i_sysfile
11378 eval $setvar
11379
11380 : see if fcntl.h is there
11381 val=''
11382 set fcntl.h val
11383 eval $inhdr
11384
11385 : see if we can include fcntl.h
11386 case "$val" in
11387 "$define")
11388         echo " "
11389         if $h_fcntl; then
11390                 val="$define"
11391                 echo "We'll be including <fcntl.h>." >&4
11392         else
11393                 val="$undef"
11394                 if $h_sysfile; then
11395         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11396                 else
11397                         echo "We won't be including <fcntl.h>." >&4
11398                 fi
11399         fi
11400         ;;
11401 *)
11402         h_fcntl=false
11403         val="$undef"
11404         ;;
11405 esac
11406 set i_fcntl
11407 eval $setvar
11408
11409 : see if locale.h is available
11410 set locale.h i_locale
11411 eval $inhdr
11412
11413 : see if this is a math.h system
11414 set math.h i_math
11415 eval $inhdr
11416
11417 : see if ndbm.h is available
11418 set ndbm.h t_ndbm
11419 eval $inhdr
11420 case "$t_ndbm" in
11421 $define)
11422         : see if dbm_open exists
11423         set dbm_open d_dbm_open
11424         eval $inlibc
11425         case "$d_dbm_open" in
11426         $undef)
11427                 t_ndbm="$undef"
11428                 echo "We won't be including <ndbm.h>"
11429                 ;;
11430         esac
11431         ;;
11432 esac
11433 val="$t_ndbm"
11434 set i_ndbm
11435 eval $setvar
11436
11437 : see if net/errno.h is available
11438 val=''
11439 set net/errno.h val
11440 eval $inhdr
11441
11442 : Unfortunately, it causes problems on some systems.  Arrgh.
11443 case "$val" in
11444 $define)
11445         cat > try.c <<'EOM'
11446 #include <stdio.h>
11447 #include <errno.h>
11448 #include <net/errno.h>
11449 int func()
11450 {
11451         return ENOTSOCK;
11452 }
11453 EOM
11454         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11455                 echo "We'll be including <net/errno.h>." >&4
11456         else
11457                 echo "We won't be including <net/errno.h>." >&4
11458                 val="$undef"
11459         fi
11460         $rm -f try.* try
11461         ;;
11462 esac
11463 set i_neterrno
11464 eval $setvar
11465
11466 : get C preprocessor symbols handy
11467 echo " "
11468 $echo $n "Hmm... $c"
11469 echo $al | $tr ' ' $trnl >Cppsym.know
11470 $cat <<EOSS >Cppsym
11471 $startsh
11472 case "\$1" in
11473 -l) list=true
11474         shift
11475         ;;
11476 esac
11477 unknown=''
11478 case "\$list\$#" in
11479 1|2)
11480         for sym do
11481                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11482                         exit 0
11483                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11484                         :
11485                 else
11486                         unknown="\$unknown \$sym"
11487                 fi
11488         done
11489         set X \$unknown
11490         shift
11491         ;;
11492 esac
11493 case \$# in
11494 0) exit 1;;
11495 esac
11496 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11497 #ifdef \1\\
11498 exit 0; _ _ _ _\1\\      \1\\
11499 #endif\\
11500 /' >Cppsym\$\$
11501 echo "exit 1; _ _ _" >>Cppsym\$\$
11502 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
11503 case "\$list" in
11504 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11505 *)
11506         sh Cppsym2\$\$
11507         status=\$?
11508         ;;
11509 esac
11510 $rm -f Cppsym\$\$ Cppsym2\$\$
11511 exit \$status
11512 EOSS
11513 chmod +x Cppsym
11514 $eunicefix Cppsym
11515 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11516
11517 : now check the C compiler for additional symbols
11518 $cat >ccsym <<EOS
11519 $startsh
11520 $cat >tmp.c <<EOF
11521 extern int foo;
11522 EOF
11523 for i in \`$cc -v -c tmp.c 2>&1\`
11524 do
11525         case "\$i" in
11526         -D*) echo "\$i" | $sed 's/^-D//';;
11527         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11528         esac
11529 done
11530 $rm -f try.c
11531 EOS
11532 chmod +x ccsym
11533 $eunicefix ccsym
11534 ./ccsym > ccsym1.raw
11535 if $test -s ccsym1.raw; then
11536        $sort ccsym1.raw | $uniq >ccsym.raw
11537 else
11538        mv ccsym1.raw ccsym.raw
11539 fi
11540
11541 $awk '/\=/ { print $0; next }
11542         { print $0"=1" }' ccsym.raw >ccsym.list
11543 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
11544 $comm -13 ccsym.true ccsym.list >ccsym.own
11545 $comm -12 ccsym.true ccsym.list >ccsym.com
11546 $comm -23 ccsym.true ccsym.list >ccsym.cpp
11547 also=''
11548 symbols='symbols'
11549 if $test -z ccsym.raw; then
11550         echo "Your C compiler doesn't seem to define any symbol!" >&4
11551         echo " "
11552         echo "However, your C preprocessor defines the following ones:"
11553         $cat Cppsym.true
11554 else
11555         if $test -s ccsym.com; then
11556                 echo "Your C compiler and pre-processor define these symbols:"
11557                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
11558                 also='also '
11559                 symbols='ones'
11560                 $test "$silent" || sleep 1
11561         fi
11562         if $test -s ccsym.cpp; then
11563                 $test "$also" && echo " "
11564                 echo "Your C pre-processor ${also}defines the following $symbols:"
11565                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
11566                 also='further '
11567                 $test "$silent" || sleep 1
11568         fi
11569         if $test -s ccsym.own; then
11570                 $test "$also" && echo " "
11571                 echo "Your C compiler ${also}defines the following cpp variables:"
11572                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
11573                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
11574                 $test "$silent" || sleep 1
11575         fi
11576 fi
11577 $rm -f ccsym*
11578
11579 : see if this is a termio system
11580 val="$undef"
11581 val2="$undef"
11582 val3="$undef"
11583 if $test `./findhdr termios.h`; then
11584         set tcsetattr i_termios
11585         eval $inlibc
11586         val3="$i_termios"
11587 fi
11588 echo " "
11589 case "$val3" in
11590 "$define") echo "You have POSIX termios.h... good!" >&4;;
11591 *) if ./Cppsym pyr; then
11592                 case "`/bin/universe`" in
11593                 ucb) if $test `./findhdr sgtty.h`; then
11594                                 val2="$define"
11595                                 echo "<sgtty.h> found." >&4
11596                         else
11597                                 echo "System is pyramid with BSD universe."
11598                                 echo "<sgtty.h> not found--you could have problems." >&4
11599                         fi;;
11600                 *) if $test `./findhdr termio.h`; then
11601                                 val="$define"
11602                                 echo "<termio.h> found." >&4
11603                         else
11604                                 echo "System is pyramid with USG universe."
11605                                 echo "<termio.h> not found--you could have problems." >&4
11606                         fi;;
11607                 esac
11608         elif ./usg; then
11609                 if $test `./findhdr termio.h`; then
11610                         echo "<termio.h> found." >&4
11611                         val="$define"
11612                 elif $test `./findhdr sgtty.h`; then
11613                         echo "<sgtty.h> found." >&4
11614                         val2="$define"
11615                 else
11616 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
11617                 fi
11618         else
11619                 if $test `./findhdr sgtty.h`; then
11620                         echo "<sgtty.h> found." >&4
11621                         val2="$define"
11622                 elif $test `./findhdr termio.h`; then
11623                         echo "<termio.h> found." >&4
11624                         val="$define"
11625                 else
11626 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
11627                 fi
11628         fi;;
11629 esac
11630 set i_termio; eval $setvar
11631 val=$val2; set i_sgtty; eval $setvar
11632 val=$val3; set i_termios; eval $setvar
11633
11634 : see if stdarg is available
11635 echo " "
11636 if $test `./findhdr stdarg.h`; then
11637         echo "<stdarg.h> found." >&4
11638         valstd="$define"
11639 else
11640         echo "<stdarg.h> NOT found." >&4
11641         valstd="$undef"
11642 fi
11643
11644 : see if varags is available
11645 echo " "
11646 if $test `./findhdr varargs.h`; then
11647         echo "<varargs.h> found." >&4
11648 else
11649         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
11650 fi
11651
11652 : set up the varargs testing programs
11653 $cat > varargs.c <<EOP
11654 #ifdef I_STDARG
11655 #include <stdarg.h>
11656 #endif
11657 #ifdef I_VARARGS
11658 #include <varargs.h>
11659 #endif
11660
11661 #ifdef I_STDARG
11662 int f(char *p, ...)
11663 #else
11664 int f(va_alist)
11665 va_dcl
11666 #endif
11667 {
11668         va_list ap;
11669 #ifndef I_STDARG
11670         char *p;
11671 #endif
11672 #ifdef I_STDARG
11673         va_start(ap,p);
11674 #else
11675         va_start(ap);
11676         p = va_arg(ap, char *);
11677 #endif
11678         va_end(ap);
11679 }
11680 EOP
11681 $cat > varargs <<EOP
11682 $startsh
11683 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
11684         echo "true"
11685 else
11686         echo "false"
11687 fi
11688 $rm -f varargs$_o
11689 EOP
11690 chmod +x varargs
11691
11692 : now check which varargs header should be included
11693 echo " "
11694 i_varhdr=''
11695 case "$valstd" in
11696 "$define")
11697         if `./varargs I_STDARG`; then
11698                 val='stdarg.h'
11699         elif `./varargs I_VARARGS`; then
11700                 val='varargs.h'
11701         fi
11702         ;;
11703 *)
11704         if `./varargs I_VARARGS`; then
11705                 val='varargs.h'
11706         fi
11707         ;;
11708 esac
11709 case "$val" in
11710 '')
11711 echo "I could not find the definition for va_dcl... You have problems..." >&4
11712         val="$undef"; set i_stdarg; eval $setvar
11713         val="$undef"; set i_varargs; eval $setvar
11714         ;;
11715 *) 
11716         set i_varhdr
11717         eval $setvar
11718         case "$i_varhdr" in
11719         stdarg.h)
11720                 val="$define"; set i_stdarg; eval $setvar
11721                 val="$undef"; set i_varargs; eval $setvar
11722                 ;;
11723         varargs.h)
11724                 val="$undef"; set i_stdarg; eval $setvar
11725                 val="$define"; set i_varargs; eval $setvar
11726                 ;;
11727         esac
11728         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
11729 esac
11730 $rm -f varargs*
11731
11732 : see if stddef is available
11733 set stddef.h i_stddef
11734 eval $inhdr
11735
11736 : see if sys/access.h is available
11737 set sys/access.h i_sysaccess
11738 eval $inhdr
11739
11740 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
11741 set sys/filio.h i_sysfilio
11742 eval $inhdr
11743 echo " "
11744 if $test `./findhdr sys/ioctl.h`; then
11745         val="$define"
11746         echo '<sys/ioctl.h> found.' >&4
11747 else
11748         val="$undef"
11749         if $test $i_sysfilio = "$define"; then
11750             echo '<sys/ioctl.h> NOT found.' >&4
11751         else
11752                 $test $i_sgtty = "$define" && xxx="sgtty.h"
11753                 $test $i_termio = "$define" && xxx="termio.h"
11754                 $test $i_termios = "$define" && xxx="termios.h"
11755 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
11756         fi
11757 fi
11758 set i_sysioctl
11759 eval $setvar
11760
11761 : see if this is a sys/param system
11762 set sys/param.h i_sysparam
11763 eval $inhdr
11764
11765 : see if sys/resource.h has to be included
11766 set sys/resource.h i_sysresrc
11767 eval $inhdr
11768
11769 : see if sys/security.h is available
11770 set sys/security.h i_syssecrt
11771 eval $inhdr
11772
11773 : see if this is a sys/un.h system
11774 set sys/un.h i_sysun
11775 eval $inhdr
11776
11777 : see if this is a syswait system
11778 set sys/wait.h i_syswait
11779 eval $inhdr
11780
11781 : see if this is an utime system
11782 set utime.h i_utime
11783 eval $inhdr
11784
11785 : see if this is a values.h system
11786 set values.h i_values
11787 eval $inhdr
11788
11789 : see if this is a vfork system
11790 case "$d_vfork" in
11791 "$define")
11792         set vfork.h i_vfork
11793         eval $inhdr
11794         ;;
11795 *)
11796         i_vfork="$undef"
11797         ;;
11798 esac
11799
11800 : see if gdbm.h is available
11801 set gdbm.h t_gdbm
11802 eval $inhdr
11803 case "$t_gdbm" in
11804 $define)
11805         : see if gdbm_open exists
11806         set gdbm_open d_gdbm_open
11807         eval $inlibc
11808         case "$d_gdbm_open" in
11809         $undef)
11810                 t_gdbm="$undef"
11811                 echo "We won't be including <gdbm.h>"
11812                 ;;
11813         esac
11814         ;;
11815 esac
11816 val="$t_gdbm"
11817 set i_gdbm
11818 eval $setvar
11819
11820 echo " "
11821 echo "Looking for extensions..." >&4
11822 tdir=`pwd`
11823 cd $rsrc/ext
11824 : If we are using the old config.sh, known_extensions may contain
11825 : old or inaccurate or duplicate values.
11826 known_extensions=''
11827 nonxs_extensions=''
11828 : We do not use find because it might not be available.
11829 : We do not just use MANIFEST because the user may have dropped
11830 : some additional extensions into the source tree and expect them
11831 : to be built.
11832 for xxx in * ; do
11833         case "$xxx" in
11834         DynaLoader|dynaload) ;;
11835         *)      if $test -f $xxx/$xxx.xs; then
11836                         known_extensions="$known_extensions $xxx"
11837                 elif $test -f $xxx/Makefile.PL; then
11838                         nonxs_extensions="$nonxs_extensions $xxx"
11839                 else
11840                         if $test -d $xxx; then
11841                                 # Look for nested extensions, eg. Devel/Dprof.
11842                                 cd $xxx
11843                                 for yyy in * ; do
11844                                 if $test -f $yyy/$yyy.xs; then
11845                                         known_extensions="$known_extensions $xxx/$yyy"
11846                                 elif $test -f $yyy/Makefile.PL; then
11847                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
11848                                 fi
11849                                 done
11850                                 cd ..
11851                         fi
11852                 fi 
11853                 ;;
11854         esac
11855 done
11856 set X $nonxs_extensions
11857 shift
11858 nonxs_extensions="$*"
11859 set X $known_extensions
11860 shift
11861 known_extensions="$*"
11862 cd $tdir
11863
11864 : Now see which are supported on this system.
11865 avail_ext=''
11866 for xxx in $known_extensions ; do
11867         case "$xxx" in
11868         DB_File|db_file)
11869                 case "$i_db" in
11870                 $define) avail_ext="$avail_ext $xxx" ;;
11871                 esac
11872                 ;;
11873         GDBM_File|gdbm_fil)
11874                 case "$i_gdbm" in 
11875                 $define) avail_ext="$avail_ext $xxx" ;;
11876                 esac
11877                 ;;
11878         NDBM_File|ndbm_fil)
11879                 case "$i_ndbm" in
11880                 $define) avail_ext="$avail_ext $xxx" ;;
11881                 esac
11882                 ;;
11883         ODBM_File|odbm_fil) 
11884                 case "${i_dbm}${i_rpcsvcdbm}" in
11885                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
11886                 esac
11887                 ;;
11888         POSIX|posix)
11889                 case "$useposix" in
11890                 true|define|y) avail_ext="$avail_ext $xxx" ;;
11891                 esac
11892                 ;;
11893         Opcode|opcode)
11894                 case "$useopcode" in
11895                 true|define|y) avail_ext="$avail_ext $xxx" ;;
11896                 esac
11897                 ;;
11898         Socket|socket)
11899                 case "$d_socket" in 
11900                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
11901                 esac
11902                 ;;
11903         Thread|thread)
11904                 case "$usethreads" in 
11905                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
11906                 esac
11907                 ;;
11908         IPC/SysV|ipc/sysv)
11909                 : XXX Do we need a useipcsysv variable here
11910                 case "${d_msg}${d_sem}${d_shm}" in 
11911                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
11912                 esac
11913                 ;;
11914         *)      avail_ext="$avail_ext $xxx"
11915                 ;;
11916         esac
11917 done
11918
11919 set X $avail_ext
11920 shift
11921 avail_ext="$*"
11922
11923 : Now see which nonxs extensions are supported on this system.
11924 : For now assume all are.
11925 nonxs_ext=''
11926 for xxx in $nonxs_extensions ; do
11927         case "$xxx" in
11928         *)      nonxs_ext="$nonxs_ext $xxx"
11929                 ;;
11930         esac
11931 done
11932
11933 set X $nonxs_ext
11934 shift
11935 nonxs_ext="$*"
11936
11937 case $usedl in
11938 $define)
11939         $cat <<EOM
11940 A number of extensions are supplied with $package.  You may choose to
11941 compile these extensions for dynamic loading (the default), compile
11942 them into the $package executable (static loading), or not include
11943 them at all.  Answer "none" to include no extensions.
11944 Note that DynaLoader is always built and need not be mentioned here.
11945
11946 EOM
11947         case "$dynamic_ext" in
11948         '') dflt="$avail_ext" ;;
11949         *)      dflt="$dynamic_ext"
11950                 # Perhaps we are reusing an old out-of-date config.sh.
11951                 case "$hint" in
11952                 previous)
11953                         if test X"$dynamic_ext" != X"$avail_ext"; then
11954                                 $cat <<EOM
11955 NOTICE:  Your previous config.sh list may be incorrect. 
11956 The extensions now available to you are 
11957         ${avail_ext}
11958 but the default list from your previous config.sh is
11959         ${dynamic_ext} 
11960
11961 EOM
11962                         fi
11963                         ;;
11964                 esac
11965                 ;;
11966         esac
11967         case "$dflt" in
11968         '')     dflt=none;;
11969         esac
11970         rp="What extensions do you wish to load dynamically?"
11971         . ./myread
11972         case "$ans" in
11973         none) dynamic_ext=' ' ;;
11974         *) dynamic_ext="$ans" ;;
11975         esac
11976
11977         case "$static_ext" in
11978         '')
11979                 : Exclude those already listed in dynamic linking
11980                 dflt=''
11981                 for xxx in $avail_ext; do
11982                         case " $dynamic_ext " in
11983                         *" $xxx "*) ;;
11984                         *) dflt="$dflt $xxx" ;;
11985                         esac
11986                 done
11987                 set X $dflt
11988                 shift
11989                 dflt="$*"
11990                 ;;
11991         *)  dflt="$static_ext" 
11992                 ;;
11993         esac
11994
11995         case "$dflt" in
11996         '')     dflt=none;;
11997         esac
11998         rp="What extensions do you wish to load statically?"
11999         . ./myread
12000         case "$ans" in
12001         none) static_ext=' ' ;;
12002         *) static_ext="$ans" ;;
12003         esac
12004         ;;
12005 *)
12006         $cat <<EOM
12007 A number of extensions are supplied with $package.  Answer "none" 
12008 to include no extensions. 
12009 Note that DynaLoader is always built and need not be mentioned here.
12010
12011 EOM
12012         case "$static_ext" in
12013         '') dflt="$avail_ext" ;;
12014         *)      dflt="$static_ext"
12015                 # Perhaps we are reusing an old out-of-date config.sh.
12016                 case "$hint" in
12017                 previous)
12018                         if test X"$static_ext" != X"$avail_ext"; then
12019                                 $cat <<EOM
12020 NOTICE:  Your previous config.sh list may be incorrect. 
12021 The extensions now available to you are 
12022         ${avail_ext}
12023 but the default list from your previous config.sh is
12024         ${static_ext} 
12025
12026 EOM
12027                         fi
12028                         ;;
12029                 esac
12030                 ;;
12031         esac
12032         : Exclude those that are not xs extensions
12033         case "$dflt" in
12034         '')     dflt=none;;
12035         esac
12036         rp="What extensions do you wish to include?"
12037         . ./myread
12038         case "$ans" in
12039         none) static_ext=' ' ;;
12040         *) static_ext="$ans" ;;
12041         esac
12042         ;;
12043 esac
12044
12045 set X $dynamic_ext $static_ext $nonxs_ext
12046 shift
12047 extensions="$*"
12048
12049 : Remove build directory name from cppstdin so it can be used from
12050 : either the present location or the final installed location.
12051 echo " "
12052 : Get out of the UU directory to get correct path name.
12053 cd ..
12054 case "$cppstdin" in
12055 `pwd`/cppstdin)
12056         echo "Stripping down cppstdin path name"
12057         cppstdin=cppstdin
12058         ;;
12059 esac
12060 cd UU
12061
12062 : end of configuration questions
12063 echo " "
12064 echo "End of configuration questions."
12065 echo " "
12066
12067 : back to where it started
12068 if test -d ../UU; then
12069         cd ..
12070 fi
12071
12072 : configuration may be patched via a 'config.over' file
12073 if $test -f config.over; then
12074         echo " "
12075         dflt=y
12076         rp='I see a config.over file.  Do you wish to load it?'
12077         . UU/myread
12078         case "$ans" in
12079         n*) echo "OK, I'll ignore it.";;
12080         *)      . ./config.over
12081                 echo "Configuration override changes have been loaded."
12082                 ;;
12083         esac
12084 fi
12085
12086 : in case they want portability, strip down executable paths
12087 case "$d_portable" in
12088 "$define")
12089         echo " "
12090         echo "Stripping down executable paths..." >&4
12091         for file in $loclist $trylist; do
12092                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12093                         eval $file="\$file"
12094                 fi
12095         done
12096         ;;
12097 esac
12098
12099 : create config.sh file
12100 echo " "
12101 echo "Creating config.sh..." >&4
12102 $spitshell <<EOT >config.sh
12103 $startsh
12104 #
12105 # This file was produced by running the Configure script. It holds all the
12106 # definitions figured out by Configure. Should you modify one of these values,
12107 # do not forget to propagate your changes by running "Configure -der". You may
12108 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12109 #
12110
12111 # Package name      : $package
12112 # Source directory  : $src
12113 # Configuration time: $cf_time
12114 # Configured by     : $cf_by
12115 # Target system     : $myuname
12116
12117 Author='$Author'
12118 Date='$Date'
12119 Header='$Header'
12120 Id='$Id'
12121 Locker='$Locker'
12122 Log='$Log'
12123 Mcc='$Mcc'
12124 RCSfile='$RCSfile'
12125 Revision='$Revision'
12126 Source='$Source'
12127 State='$State'
12128 _a='$_a'
12129 _exe='$_exe'
12130 _o='$_o'
12131 afs='$afs'
12132 alignbytes='$alignbytes'
12133 ansi2knr='$ansi2knr'
12134 aphostname='$aphostname'
12135 apiversion='$apiversion'
12136 ar='$ar'
12137 archlib='$archlib'
12138 archlibexp='$archlibexp'
12139 archname64='$archname64'
12140 archname='$archname'
12141 archobjs='$archobjs'
12142 awk='$awk'
12143 baserev='$baserev'
12144 bash='$bash'
12145 bin='$bin'
12146 binexp='$binexp'
12147 bison='$bison'
12148 byacc='$byacc'
12149 byteorder='$byteorder'
12150 c='$c'
12151 castflags='$castflags'
12152 cat='$cat'
12153 cc='$cc'
12154 cccdlflags='$cccdlflags'
12155 ccdlflags='$ccdlflags'
12156 ccflags='$ccflags'
12157 cf_by='$cf_by'
12158 cf_email='$cf_email'
12159 cf_time='$cf_time'
12160 chgrp='$chgrp'
12161 chmod='$chmod'
12162 chown='$chown'
12163 clocktype='$clocktype'
12164 comm='$comm'
12165 compress='$compress'
12166 contains='$contains'
12167 cp='$cp'
12168 cpio='$cpio'
12169 cpp='$cpp'
12170 cpp_stuff='$cpp_stuff'
12171 cppflags='$cppflags'
12172 cpplast='$cpplast'
12173 cppminus='$cppminus'
12174 cpprun='$cpprun'
12175 cppstdin='$cppstdin'
12176 cryptlib='$cryptlib'
12177 csh='$csh'
12178 d_Gconvert='$d_Gconvert'
12179 d_access='$d_access'
12180 d_accessx='$d_accessx'
12181 d_alarm='$d_alarm'
12182 d_archlib='$d_archlib'
12183 d_attribut='$d_attribut'
12184 d_bcmp='$d_bcmp'
12185 d_bcopy='$d_bcopy'
12186 d_bsd='$d_bsd'
12187 d_bsdgetpgrp='$d_bsdgetpgrp'
12188 d_bsdsetpgrp='$d_bsdsetpgrp'
12189 d_bzero='$d_bzero'
12190 d_casti32='$d_casti32'
12191 d_castneg='$d_castneg'
12192 d_charvspr='$d_charvspr'
12193 d_chown='$d_chown'
12194 d_chroot='$d_chroot'
12195 d_chsize='$d_chsize'
12196 d_closedir='$d_closedir'
12197 d_const='$d_const'
12198 d_crypt='$d_crypt'
12199 d_csh='$d_csh'
12200 d_cuserid='$d_cuserid'
12201 d_dbl_dig='$d_dbl_dig'
12202 d_dbmclose64='$d_dbmclose64'
12203 d_dbminit64='$d_dbminit64'
12204 d_delete64='$d_delete64'
12205 d_difftime='$d_difftime'
12206 d_dirent64s='$d_dirent64s'
12207 d_dirnamlen='$d_dirnamlen'
12208 d_dlerror='$d_dlerror'
12209 d_dlopen='$d_dlopen'
12210 d_dlsymun='$d_dlsymun'
12211 d_dosuid='$d_dosuid'
12212 d_drand48proto='$d_drand48proto'
12213 d_dup2='$d_dup2'
12214 d_eaccess='$d_eaccess'
12215 d_endgrent='$d_endgrent'
12216 d_endhent='$d_endhent'
12217 d_endnent='$d_endnent'
12218 d_endpent='$d_endpent'
12219 d_endpwent='$d_endpwent'
12220 d_endsent='$d_endsent'
12221 d_eofnblk='$d_eofnblk'
12222 d_eunice='$d_eunice'
12223 d_fchmod='$d_fchmod'
12224 d_fchown='$d_fchown'
12225 d_fcntl='$d_fcntl'
12226 d_fd_macros='$d_fd_macros'
12227 d_fd_set='$d_fd_set'
12228 d_fds_bits='$d_fds_bits'
12229 d_fetch64='$d_fetch64'
12230 d_fgetpos64='$d_fgetpos64'
12231 d_fgetpos='$d_fgetpos'
12232 d_firstkey64='$d_firstkey64'
12233 d_flexfnam='$d_flexfnam'
12234 d_flock64s='$d_flock64s'
12235 d_flock='$d_flock'
12236 d_fopen64='$d_fopen64'
12237 d_fork='$d_fork'
12238 d_fpathconf='$d_fpathconf'
12239 d_freopen64='$d_freopen64'
12240 d_fseek64='$d_fseek64'
12241 d_fseeko64='$d_fseeko64'
12242 d_fseeko='$d_fseeko'
12243 d_fsetpos64='$d_fsetpos64'
12244 d_fsetpos='$d_fsetpos'
12245 d_fstat64='$d_fstat64'
12246 d_ftell64='$d_ftell64'
12247 d_ftello64='$d_ftello64'
12248 d_ftello='$d_ftello'
12249 d_ftime='$d_ftime'
12250 d_ftruncate64='$d_ftruncate64'
12251 d_getgrent='$d_getgrent'
12252 d_getgrps='$d_getgrps'
12253 d_gethbyaddr='$d_gethbyaddr'
12254 d_gethbyname='$d_gethbyname'
12255 d_gethent='$d_gethent'
12256 d_gethname='$d_gethname'
12257 d_gethostprotos='$d_gethostprotos'
12258 d_getlogin='$d_getlogin'
12259 d_getnbyaddr='$d_getnbyaddr'
12260 d_getnbyname='$d_getnbyname'
12261 d_getnent='$d_getnent'
12262 d_getnetprotos='$d_getnetprotos'
12263 d_getpbyname='$d_getpbyname'
12264 d_getpbynumber='$d_getpbynumber'
12265 d_getpent='$d_getpent'
12266 d_getpgid='$d_getpgid'
12267 d_getpgrp2='$d_getpgrp2'
12268 d_getpgrp='$d_getpgrp'
12269 d_getppid='$d_getppid'
12270 d_getprior='$d_getprior'
12271 d_getprotoprotos='$d_getprotoprotos'
12272 d_getpwent='$d_getpwent'
12273 d_getsbyname='$d_getsbyname'
12274 d_getsbyport='$d_getsbyport'
12275 d_getsent='$d_getsent'
12276 d_getservprotos='$d_getservprotos'
12277 d_gettimeod='$d_gettimeod'
12278 d_gnulibc='$d_gnulibc'
12279 d_grpasswd='$d_grpasswd'
12280 d_htonl='$d_htonl'
12281 d_index='$d_index'
12282 d_inetaton='$d_inetaton'
12283 d_ino64t='$d_ino64t'
12284 d_int64t='$d_int64t'
12285 d_isascii='$d_isascii'
12286 d_killpg='$d_killpg'
12287 d_lchown='$d_lchown'
12288 d_link='$d_link'
12289 d_locconv='$d_locconv'
12290 d_lockf64='$d_lockf64'
12291 d_lockf='$d_lockf'
12292 d_longdbl='$d_longdbl'
12293 d_longlong='$d_longlong'
12294 d_lseek64='$d_lseek64'
12295 d_lstat64='$d_lstat64'
12296 d_lstat='$d_lstat'
12297 d_mblen='$d_mblen'
12298 d_mbstowcs='$d_mbstowcs'
12299 d_mbtowc='$d_mbtowc'
12300 d_memcmp='$d_memcmp'
12301 d_memcpy='$d_memcpy'
12302 d_memmove='$d_memmove'
12303 d_memset='$d_memset'
12304 d_mkdir='$d_mkdir'
12305 d_mkfifo='$d_mkfifo'
12306 d_mktime='$d_mktime'
12307 d_msg='$d_msg'
12308 d_msgctl='$d_msgctl'
12309 d_msgget='$d_msgget'
12310 d_msgrcv='$d_msgrcv'
12311 d_msgsnd='$d_msgsnd'
12312 d_mymalloc='$d_mymalloc'
12313 d_nextkey64='$d_nextkey64'
12314 d_nice='$d_nice'
12315 d_off64t='$d_off64t'
12316 d_oldpthreads='$d_oldpthreads'
12317 d_oldsock='$d_oldsock'
12318 d_open3='$d_open3'
12319 d_open64='$d_open64'
12320 d_opendir64='$d_opendir64'
12321 d_pathconf='$d_pathconf'
12322 d_pause='$d_pause'
12323 d_phostname='$d_phostname'
12324 d_pipe='$d_pipe'
12325 d_poll='$d_poll'
12326 d_portable='$d_portable'
12327 d_pthread_yield='$d_pthread_yield'
12328 d_pthreads_created_joinable='$d_pthreads_created_joinable'
12329 d_pwage='$d_pwage'
12330 d_pwchange='$d_pwchange'
12331 d_pwclass='$d_pwclass'
12332 d_pwcomment='$d_pwcomment'
12333 d_pwexpire='$d_pwexpire'
12334 d_pwgecos='$d_pwgecos'
12335 d_pwpasswd='$d_pwpasswd'
12336 d_pwquota='$d_pwquota'
12337 d_readdir64='$d_readdir64'
12338 d_readdir='$d_readdir'
12339 d_readlink='$d_readlink'
12340 d_rename='$d_rename'
12341 d_rewinddir='$d_rewinddir'
12342 d_rmdir='$d_rmdir'
12343 d_safebcpy='$d_safebcpy'
12344 d_safemcpy='$d_safemcpy'
12345 d_sanemcmp='$d_sanemcmp'
12346 d_sched_yield='$d_sched_yield'
12347 d_seekdir64='$d_seekdir64'
12348 d_seekdir='$d_seekdir'
12349 d_select='$d_select'
12350 d_sem='$d_sem'
12351 d_semctl='$d_semctl'
12352 d_semctl_semid_ds='$d_semctl_semid_ds'
12353 d_semctl_semun='$d_semctl_semun'
12354 d_semget='$d_semget'
12355 d_semop='$d_semop'
12356 d_setegid='$d_setegid'
12357 d_seteuid='$d_seteuid'
12358 d_setgrent='$d_setgrent'
12359 d_setgrps='$d_setgrps'
12360 d_sethent='$d_sethent'
12361 d_setlinebuf='$d_setlinebuf'
12362 d_setlocale='$d_setlocale'
12363 d_setnent='$d_setnent'
12364 d_setpent='$d_setpent'
12365 d_setpgid='$d_setpgid'
12366 d_setpgrp2='$d_setpgrp2'
12367 d_setpgrp='$d_setpgrp'
12368 d_setprior='$d_setprior'
12369 d_setpwent='$d_setpwent'
12370 d_setregid='$d_setregid'
12371 d_setresgid='$d_setresgid'
12372 d_setresuid='$d_setresuid'
12373 d_setreuid='$d_setreuid'
12374 d_setrgid='$d_setrgid'
12375 d_setruid='$d_setruid'
12376 d_setsent='$d_setsent'
12377 d_setsid='$d_setsid'
12378 d_setvbuf='$d_setvbuf'
12379 d_sfio='$d_sfio'
12380 d_shm='$d_shm'
12381 d_shmat='$d_shmat'
12382 d_shmatprototype='$d_shmatprototype'
12383 d_shmctl='$d_shmctl'
12384 d_shmdt='$d_shmdt'
12385 d_shmget='$d_shmget'
12386 d_sigaction='$d_sigaction'
12387 d_sigsetjmp='$d_sigsetjmp'
12388 d_socket='$d_socket'
12389 d_sockpair='$d_sockpair'
12390 d_stat64='$d_stat64'
12391 d_statblks='$d_statblks'
12392 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12393 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12394 d_stdiobase='$d_stdiobase'
12395 d_stdstdio='$d_stdstdio'
12396 d_store64='$d_store64'
12397 d_strchr='$d_strchr'
12398 d_strcoll='$d_strcoll'
12399 d_strctcpy='$d_strctcpy'
12400 d_strerrm='$d_strerrm'
12401 d_strerror='$d_strerror'
12402 d_strtod='$d_strtod'
12403 d_strtol='$d_strtol'
12404 d_strtoul='$d_strtoul'
12405 d_strxfrm='$d_strxfrm'
12406 d_suidsafe='$d_suidsafe'
12407 d_symlink='$d_symlink'
12408 d_syscall='$d_syscall'
12409 d_sysconf='$d_sysconf'
12410 d_sysernlst='$d_sysernlst'
12411 d_syserrlst='$d_syserrlst'
12412 d_system='$d_system'
12413 d_tcgetpgrp='$d_tcgetpgrp'
12414 d_tcsetpgrp='$d_tcsetpgrp'
12415 d_telldir64='$d_telldir64'
12416 d_telldir='$d_telldir'
12417 d_time='$d_time'
12418 d_times='$d_times'
12419 d_tmpfile64='$d_tmpfile64'
12420 d_truncate64='$d_truncate64'
12421 d_truncate='$d_truncate'
12422 d_tzname='$d_tzname'
12423 d_umask='$d_umask'
12424 d_uname='$d_uname'
12425 d_union_semun='$d_union_semun'
12426 d_vfork='$d_vfork'
12427 d_void_closedir='$d_void_closedir'
12428 d_voidsig='$d_voidsig'
12429 d_voidtty='$d_voidtty'
12430 d_volatile='$d_volatile'
12431 d_vprintf='$d_vprintf'
12432 d_wait4='$d_wait4'
12433 d_waitpid='$d_waitpid'
12434 d_wcstombs='$d_wcstombs'
12435 d_wctomb='$d_wctomb'
12436 d_xenix='$d_xenix'
12437 date='$date'
12438 db_hashtype='$db_hashtype'
12439 db_prefixtype='$db_prefixtype'
12440 defvoidused='$defvoidused'
12441 direntrytype='$direntrytype'
12442 dlext='$dlext'
12443 dlsrc='$dlsrc'
12444 doublesize='$doublesize'
12445 drand01='$drand01'
12446 dynamic_ext='$dynamic_ext'
12447 eagain='$eagain'
12448 ebcdic='$ebcdic'
12449 echo='$echo'
12450 egrep='$egrep'
12451 emacs='$emacs'
12452 eunicefix='$eunicefix'
12453 exe_ext='$exe_ext'
12454 expr='$expr'
12455 extensions='$extensions'
12456 find='$find'
12457 firstmakefile='$firstmakefile'
12458 flex='$flex'
12459 fpostype='$fpostype'
12460 freetype='$freetype'
12461 full_csh='$full_csh'
12462 full_sed='$full_sed'
12463 gccversion='$gccversion'
12464 gidtype='$gidtype'
12465 glibpth='$glibpth'
12466 grep='$grep'
12467 groupcat='$groupcat'
12468 groupstype='$groupstype'
12469 gzip='$gzip'
12470 h_fcntl='$h_fcntl'
12471 h_sysfile='$h_sysfile'
12472 hint='$hint'
12473 hostcat='$hostcat'
12474 huge='$huge'
12475 i_arpainet='$i_arpainet'
12476 i_bsdioctl='$i_bsdioctl'
12477 i_db='$i_db'
12478 i_dbm='$i_dbm'
12479 i_dirent='$i_dirent'
12480 i_dld='$i_dld'
12481 i_dlfcn='$i_dlfcn'
12482 i_fcntl='$i_fcntl'
12483 i_float='$i_float'
12484 i_gdbm='$i_gdbm'
12485 i_grp='$i_grp'
12486 i_inttypes='$i_inttypes'
12487 i_limits='$i_limits'
12488 i_locale='$i_locale'
12489 i_malloc='$i_malloc'
12490 i_math='$i_math'
12491 i_memory='$i_memory'
12492 i_ndbm='$i_ndbm'
12493 i_netdb='$i_netdb'
12494 i_neterrno='$i_neterrno'
12495 i_niin='$i_niin'
12496 i_pwd='$i_pwd'
12497 i_rpcsvcdbm='$i_rpcsvcdbm'
12498 i_sfio='$i_sfio'
12499 i_sgtty='$i_sgtty'
12500 i_stdarg='$i_stdarg'
12501 i_stddef='$i_stddef'
12502 i_stdlib='$i_stdlib'
12503 i_string='$i_string'
12504 i_sysaccess='$i_sysaccess'
12505 i_sysdir='$i_sysdir'
12506 i_sysfile='$i_sysfile'
12507 i_sysfilio='$i_sysfilio'
12508 i_sysin='$i_sysin'
12509 i_sysioctl='$i_sysioctl'
12510 i_sysndir='$i_sysndir'
12511 i_sysparam='$i_sysparam'
12512 i_sysresrc='$i_sysresrc'
12513 i_syssecrt='$i_syssecrt'
12514 i_sysselct='$i_sysselct'
12515 i_syssockio='$i_syssockio'
12516 i_sysstat='$i_sysstat'
12517 i_systime='$i_systime'
12518 i_systimek='$i_systimek'
12519 i_systimes='$i_systimes'
12520 i_systypes='$i_systypes'
12521 i_sysun='$i_sysun'
12522 i_syswait='$i_syswait'
12523 i_termio='$i_termio'
12524 i_termios='$i_termios'
12525 i_time='$i_time'
12526 i_unistd='$i_unistd'
12527 i_utime='$i_utime'
12528 i_values='$i_values'
12529 i_varargs='$i_varargs'
12530 i_varhdr='$i_varhdr'
12531 i_vfork='$i_vfork'
12532 ignore_versioned_solibs='$ignore_versioned_solibs'
12533 incpath='$incpath'
12534 inews='$inews'
12535 installarchlib='$installarchlib'
12536 installbin='$installbin'
12537 installman1dir='$installman1dir'
12538 installman3dir='$installman3dir'
12539 installprivlib='$installprivlib'
12540 installscript='$installscript'
12541 installsitearch='$installsitearch'
12542 installsitelib='$installsitelib'
12543 intsize='$intsize'
12544 known_extensions='$known_extensions'
12545 ksh='$ksh'
12546 large='$large'
12547 ld='$ld'
12548 lddlflags='$lddlflags'
12549 ldflags='$ldflags'
12550 less='$less'
12551 lib_ext='$lib_ext'
12552 libc='$libc'
12553 libperl='$libperl'
12554 libpth='$libpth'
12555 libs='$libs'
12556 libswanted='$libswanted'
12557 line='$line'
12558 lint='$lint'
12559 lkflags='$lkflags'
12560 ln='$ln'
12561 lns='$lns'
12562 locincpth='$locincpth'
12563 loclibpth='$loclibpth'
12564 longdblsize='$longdblsize'
12565 longlongsize='$longlongsize'
12566 longsize='$longsize'
12567 lp='$lp'
12568 lpr='$lpr'
12569 ls='$ls'
12570 lseeksize='$lseeksize'
12571 lseektype='$lseektype'
12572 mail='$mail'
12573 mailx='$mailx'
12574 make='$make'
12575 make_set_make='$make_set_make'
12576 mallocobj='$mallocobj'
12577 mallocsrc='$mallocsrc'
12578 malloctype='$malloctype'
12579 man1dir='$man1dir'
12580 man1direxp='$man1direxp'
12581 man1ext='$man1ext'
12582 man3dir='$man3dir'
12583 man3direxp='$man3direxp'
12584 man3ext='$man3ext'
12585 medium='$medium'
12586 mips='$mips'
12587 mips_type='$mips_type'
12588 mkdir='$mkdir'
12589 models='$models'
12590 modetype='$modetype'
12591 more='$more'
12592 mv='$mv'
12593 myarchname='$myarchname'
12594 mydomain='$mydomain'
12595 myhostname='$myhostname'
12596 myuname='$myuname'
12597 n='$n'
12598 netdb_hlen_type='$netdb_hlen_type'
12599 netdb_host_type='$netdb_host_type'
12600 netdb_name_type='$netdb_name_type'
12601 netdb_net_type='$netdb_net_type'
12602 nm='$nm'
12603 nm_opt='$nm_opt'
12604 nm_so_opt='$nm_so_opt'
12605 nonxs_ext='$nonxs_ext'
12606 nroff='$nroff'
12607 o_nonblock='$o_nonblock'
12608 obj_ext='$obj_ext'
12609 optimize='$optimize'
12610 orderlib='$orderlib'
12611 osname='$osname'
12612 osvers='$osvers'
12613 package='$package'
12614 pager='$pager'
12615 passcat='$passcat'
12616 patchlevel='$patchlevel'
12617 path_sep='$path_sep'
12618 perl='$perl'
12619 perladmin='$perladmin'
12620 perlpath='$perlpath'
12621 pg='$pg'
12622 phostname='$phostname'
12623 pidtype='$pidtype'
12624 plibpth='$plibpth'
12625 pmake='$pmake'
12626 pr='$pr'
12627 prefix='$prefix'
12628 prefixexp='$prefixexp'
12629 privlib='$privlib'
12630 privlibexp='$privlibexp'
12631 prototype='$prototype'
12632 ptrsize='$ptrsize'
12633 randbits='$randbits'
12634 randfunc='$randfunc'
12635 randseedtype='$randseedtype'
12636 ranlib='$ranlib'
12637 rd_nodata='$rd_nodata'
12638 rm='$rm'
12639 rmail='$rmail'
12640 runnm='$runnm'
12641 sched_yield='$sched_yield'
12642 scriptdir='$scriptdir'
12643 scriptdirexp='$scriptdirexp'
12644 sed='$sed'
12645 seedfunc='$seedfunc'
12646 selectminbits='$selectminbits'
12647 selecttype='$selecttype'
12648 sendmail='$sendmail'
12649 sh='$sh'
12650 shar='$shar'
12651 sharpbang='$sharpbang'
12652 shmattype='$shmattype'
12653 shortsize='$shortsize'
12654 shrpenv='$shrpenv'
12655 shsharp='$shsharp'
12656 sig_name='$sig_name'
12657 sig_name_init='$sig_name_init'
12658 sig_num='$sig_num'
12659 signal_t='$signal_t'
12660 sitearch='$sitearch'
12661 sitearchexp='$sitearchexp'
12662 sitelib='$sitelib'
12663 sitelibexp='$sitelibexp'
12664 sizetype='$sizetype'
12665 sleep='$sleep'
12666 smail='$smail'
12667 small='$small'
12668 so='$so'
12669 sockethdr='$sockethdr'
12670 socketlib='$socketlib'
12671 sort='$sort'
12672 spackage='$spackage'
12673 spitshell='$spitshell'
12674 split='$split'
12675 src='$src'
12676 ssizetype='$ssizetype'
12677 startperl='$startperl'
12678 startsh='$startsh'
12679 static_ext='$static_ext'
12680 stdchar='$stdchar'
12681 stdio_base='$stdio_base'
12682 stdio_bufsiz='$stdio_bufsiz'
12683 stdio_cnt='$stdio_cnt'
12684 stdio_filbuf='$stdio_filbuf'
12685 stdio_ptr='$stdio_ptr'
12686 strings='$strings'
12687 submit='$submit'
12688 subversion='$subversion'
12689 sysman='$sysman'
12690 tail='$tail'
12691 tar='$tar'
12692 tbl='$tbl'
12693 tee='$tee'
12694 test='$test'
12695 timeincl='$timeincl'
12696 timetype='$timetype'
12697 touch='$touch'
12698 tr='$tr'
12699 trnl='$trnl'
12700 troff='$troff'
12701 uidtype='$uidtype'
12702 uname='$uname'
12703 uniq='$uniq'
12704 use64bits='$use64bits'
12705 usedl='$usedl'
12706 usemultiplicity='$usemultiplicity'
12707 usemymalloc='$usemymalloc'
12708 usenm='$usenm'
12709 useopcode='$useopcode'
12710 useperlio='$useperlio'
12711 useposix='$useposix'
12712 usesfio='$usesfio'
12713 useshrplib='$useshrplib'
12714 usethreads='$usethreads'
12715 usevfork='$usevfork'
12716 usrinc='$usrinc'
12717 uuname='$uuname'
12718 version='$version'
12719 vi='$vi'
12720 voidflags='$voidflags'
12721 xlibpth='$xlibpth'
12722 zcat='$zcat'
12723 zip='$zip'
12724 EOT
12725
12726 : Add in command line options if available
12727 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
12728
12729 : add special variables
12730 $test -f $src/patchlevel.h && \
12731 awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
12732 echo "CONFIG=true" >>config.sh
12733
12734 : propagate old symbols
12735 if $test -f UU/config.sh; then
12736         <UU/config.sh sort | uniq >UU/oldconfig.sh
12737         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
12738         sort | uniq -u >UU/oldsyms
12739         set X `cat UU/oldsyms`
12740         shift
12741         case $# in
12742         0) ;;
12743         *)
12744                 cat <<EOM
12745 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
12746 EOM
12747                 echo "# Variables propagated from previous config.sh file." >>config.sh
12748                 for sym in `cat UU/oldsyms`; do
12749                         echo "    Propagating $hint variable "'$'"$sym..."
12750                         eval 'tmp="$'"${sym}"'"'
12751                         echo "$tmp" | \
12752                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
12753                 done
12754                 ;;
12755         esac
12756 fi
12757
12758 : Finish up by extracting the .SH files
12759 case "$alldone" in
12760 exit)
12761         $rm -rf UU
12762         echo "Done."
12763         exit 0
12764         ;;
12765 cont)
12766         ;;
12767 '')
12768         dflt=''
12769         nostick=true
12770         $cat <<EOM
12771
12772 If you'd like to make any changes to the config.sh file before I begin
12773 to configure things, do it as a shell escape now (e.g. !vi config.sh).
12774
12775 EOM
12776         rp="Press return or use a shell escape to edit config.sh:"
12777         . UU/myread
12778         nostick=''
12779         case "$ans" in
12780         '') ;;
12781         *) : in case they cannot read
12782                 sh 1>&4 -c "$ans";;
12783         esac
12784         ;;
12785 esac
12786
12787 : if this fails, just run all the .SH files by hand
12788 . ./config.sh
12789
12790 echo " "
12791 exec 1>&4
12792 . ./UU/extract
12793
12794 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
12795         dflt=y
12796         case "$silent" in
12797         true) ;;
12798         *)
12799                 $cat <<EOM
12800
12801 Now you need to generate make dependencies by running "$make depend".
12802 You might prefer to run it in background: "$make depend > makedepend.out &"
12803 It can take a while, so you might not want to run it right now.
12804
12805 EOM
12806                 ;;
12807         esac
12808         rp="Run $make depend now?"
12809         . UU/myread
12810         case "$ans" in
12811         y*)
12812                 $make depend && echo "Now you must run a $make."
12813                 ;;
12814         *)
12815                 echo "You must run '$make depend' then '$make'."
12816                 ;;
12817         esac
12818 elif test -f [Mm]akefile; then
12819         echo " "
12820         echo "Now you must run a $make."
12821 else
12822         echo "Done."
12823 fi
12824
12825 if $test -f Policy.sh; then
12826     $cat <<EOM
12827
12828 If you compile $package on a different machine or from a different object
12829 directory, copy the Policy.sh file from this object directory to the
12830 new one before you run Configure -- this will help you with most of
12831 the policy defaults.
12832
12833 EOM
12834 fi
12835 if $test -f config.msg; then
12836     echo "Hmm.  I also noted the following information while running:"
12837     echo " "
12838     $cat config.msg >&4
12839     $rm -f config.msg
12840 fi
12841 $rm -f kit*isdone ark*isdone
12842 $rm -rf UU
12843
12844 : End of Configure
12845