Fix the HALF_UPGRADE() macro introduced in #6263.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Sat Jul 29 02:48:03 EET DST 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 ccflags=''
292 cppflags=''
293 ldflags=''
294 lkflags=''
295 locincpth=''
296 optimize=''
297 cf_email=''
298 cf_by=''
299 cf_time=''
300 charsize=''
301 contains=''
302 cpp_stuff=''
303 cpplast=''
304 cppminus=''
305 cpprun=''
306 cppstdin=''
307 crosscompile=''
308 d_access=''
309 d_accessx=''
310 d_alarm=''
311 d_attribut=''
312 d_bcmp=''
313 d_bcopy=''
314 d_bzero=''
315 d_casti32=''
316 castflags=''
317 d_castneg=''
318 d_chown=''
319 d_chroot=''
320 d_chsize=''
321 d_closedir=''
322 d_void_closedir=''
323 d_const=''
324 cryptlib=''
325 d_crypt=''
326 d_csh=''
327 full_csh=''
328 d_cuserid=''
329 d_dbl_dig=''
330 d_difftime=''
331 d_dlerror=''
332 d_dlopen=''
333 d_dlsymun=''
334 d_dosuid=''
335 d_suidsafe=''
336 d_drand48proto=''
337 d_dup2=''
338 d_eaccess=''
339 d_endgrent=''
340 d_endhent=''
341 d_endnent=''
342 d_endpent=''
343 d_endpwent=''
344 d_endsent=''
345 d_fchmod=''
346 d_fchown=''
347 d_fcntl=''
348 d_fd_macros=''
349 d_fd_set=''
350 d_fds_bits=''
351 d_fgetpos=''
352 d_flexfnam=''
353 d_flock=''
354 d_fork=''
355 d_fpos64_t=''
356 d_frexpl=''
357 d_fs_data_s=''
358 d_fseeko=''
359 d_fsetpos=''
360 d_fstatfs=''
361 d_ftello=''
362 d_ftime=''
363 d_gettimeod=''
364 d_Gconvert=''
365 d_getcwd=''
366 d_getespwnam=''
367 d_getfsstat=''
368 d_getgrent=''
369 d_getgrps=''
370 d_gethbyaddr=''
371 d_gethbyname=''
372 d_gethent=''
373 aphostname=''
374 d_gethname=''
375 d_phostname=''
376 d_uname=''
377 d_gethostprotos=''
378 d_getlogin=''
379 d_getmnt=''
380 d_getmntent=''
381 d_getnbyaddr=''
382 d_getnbyname=''
383 d_getnent=''
384 d_getnetprotos=''
385 d_getpent=''
386 d_getpgid=''
387 d_getpgrp2=''
388 d_bsdgetpgrp=''
389 d_getpgrp=''
390 d_getppid=''
391 d_getprior=''
392 d_getpbyname=''
393 d_getpbynumber=''
394 d_getprotoprotos=''
395 d_getprpwnam=''
396 d_getpwent=''
397 d_getsent=''
398 d_getservprotos=''
399 d_getspnam=''
400 d_getsbyname=''
401 d_getsbyport=''
402 d_gnulibc=''
403 d_hasmntopt=''
404 d_htonl=''
405 d_iconv=''
406 d_inetaton=''
407 d_int64_t=''
408 d_isascii=''
409 d_isnan=''
410 d_isnanl=''
411 d_killpg=''
412 d_lchown=''
413 d_ldbl_dig=''
414 d_link=''
415 d_locconv=''
416 d_lockf=''
417 d_longdbl=''
418 longdblsize=''
419 d_longlong=''
420 longlongsize=''
421 d_lseekproto=''
422 d_lstat=''
423 d_madvise=''
424 d_mblen=''
425 d_mbstowcs=''
426 d_mbtowc=''
427 d_memchr=''
428 d_memcmp=''
429 d_memcpy=''
430 d_memmove=''
431 d_memset=''
432 d_mkdir=''
433 d_mkdtemp=''
434 d_mkfifo=''
435 d_mkstemp=''
436 d_mkstemps=''
437 d_mktime=''
438 d_mmap=''
439 mmaptype=''
440 d_modfl=''
441 d_mprotect=''
442 d_msg=''
443 d_msgctl=''
444 d_msgget=''
445 d_msgrcv=''
446 d_msgsnd=''
447 d_msync=''
448 d_munmap=''
449 d_nice=''
450 d_off64_t=''
451 d_open3=''
452 d_fpathconf=''
453 d_pathconf=''
454 d_pause=''
455 d_pipe=''
456 d_poll=''
457 d_portable=''
458 d_old_pthread_create_joinable=''
459 old_pthread_create_joinable=''
460 d_pthread_yield=''
461 d_sched_yield=''
462 sched_yield=''
463 d_qgcvt=''
464 d_readdir=''
465 d_rewinddir=''
466 d_seekdir=''
467 d_telldir=''
468 d_readlink=''
469 d_rename=''
470 d_rmdir=''
471 d_safebcpy=''
472 d_safemcpy=''
473 d_sanemcmp=''
474 d_select=''
475 d_sem=''
476 d_semctl=''
477 d_semget=''
478 d_semop=''
479 d_setegid=''
480 d_seteuid=''
481 d_setgrent=''
482 d_setgrps=''
483 d_sethent=''
484 d_setlinebuf=''
485 d_setlocale=''
486 d_setnent=''
487 d_setpent=''
488 d_setpgid=''
489 d_setpgrp2=''
490 d_bsdsetpgrp=''
491 d_setpgrp=''
492 d_setprior=''
493 d_setproctitle=''
494 d_setpwent=''
495 d_setregid=''
496 d_setresgid=''
497 d_setresuid=''
498 d_setreuid=''
499 d_setrgid=''
500 d_setruid=''
501 d_setsent=''
502 d_setsid=''
503 d_setvbuf=''
504 d_sfio=''
505 usesfio=''
506 d_shm=''
507 d_shmat=''
508 d_shmatprototype=''
509 shmattype=''
510 d_shmctl=''
511 d_shmdt=''
512 d_shmget=''
513 d_sigaction=''
514 d_sigsetjmp=''
515 d_msg_ctrunc=''
516 d_msg_dontroute=''
517 d_msg_oob=''
518 d_msg_peek=''
519 d_msg_proxy=''
520 d_oldsock=''
521 d_scm_rights=''
522 d_socket=''
523 d_sockpair=''
524 sockethdr=''
525 socketlib=''
526 d_socklen_t=''
527 d_sqrtl=''
528 d_statblks=''
529 d_statfs_f_flags=''
530 d_statfs_s=''
531 d_fstatvfs=''
532 d_statvfs=''
533 d_stdio_cnt_lval=''
534 d_stdio_ptr_lval=''
535 d_stdiobase=''
536 d_stdstdio=''
537 stdio_base=''
538 stdio_bufsiz=''
539 stdio_cnt=''
540 stdio_filbuf=''
541 stdio_ptr=''
542 d_index=''
543 d_strchr=''
544 d_strcoll=''
545 d_strctcpy=''
546 d_strerrm=''
547 d_strerror=''
548 d_sysernlst=''
549 d_syserrlst=''
550 d_strtod=''
551 d_strtol=''
552 d_strtold=''
553 d_strtoll=''
554 d_strtoul=''
555 d_strtoull=''
556 d_strtouq=''
557 d_strxfrm=''
558 d_symlink=''
559 d_syscall=''
560 d_sysconf=''
561 d_system=''
562 d_tcgetpgrp=''
563 d_tcsetpgrp=''
564 d_telldirproto=''
565 d_time=''
566 timetype=''
567 clocktype=''
568 d_times=''
569 d_truncate=''
570 d_tzname=''
571 d_umask=''
572 d_semctl_semid_ds=''
573 d_semctl_semun=''
574 d_union_semun=''
575 d_ustat=''
576 d_vfork=''
577 usevfork=''
578 d_voidsig=''
579 signal_t=''
580 d_volatile=''
581 d_charvspr=''
582 d_vprintf=''
583 d_wait4=''
584 d_waitpid=''
585 d_wcstombs=''
586 d_wctomb=''
587 dlext=''
588 cccdlflags=''
589 ccdlflags=''
590 dlsrc=''
591 ld=''
592 lddlflags=''
593 usedl=''
594 doublesize=''
595 ebcdic=''
596 fflushNULL=''
597 fflushall=''
598 fpossize=''
599 fpostype=''
600 gccosandvers=''
601 gccversion=''
602 gidformat=''
603 gidsign=''
604 gidsize=''
605 gidtype=''
606 groupstype=''
607 h_fcntl=''
608 h_sysfile=''
609 i_arpainet=''
610 db_hashtype=''
611 db_prefixtype=''
612 i_db=''
613 i_dbm=''
614 i_rpcsvcdbm=''
615 d_dirnamlen=''
616 direntrytype=''
617 i_dirent=''
618 i_dld=''
619 i_dlfcn=''
620 i_fcntl=''
621 i_float=''
622 i_gdbm=''
623 d_grpasswd=''
624 i_grp=''
625 i_iconv=''
626 i_ieeefp=''
627 i_inttypes=''
628 i_limits=''
629 i_locale=''
630 i_machcthr=''
631 i_malloc=''
632 i_math=''
633 i_memory=''
634 i_mntent=''
635 i_ndbm=''
636 i_netdb=''
637 i_neterrno=''
638 i_netinettcp=''
639 i_niin=''
640 i_sysin=''
641 i_poll=''
642 i_prot=''
643 i_pthread=''
644 d_pwage=''
645 d_pwchange=''
646 d_pwclass=''
647 d_pwcomment=''
648 d_pwexpire=''
649 d_pwgecos=''
650 d_pwpasswd=''
651 d_pwquota=''
652 i_pwd=''
653 i_sfio=''
654 i_shadow=''
655 i_socks=''
656 i_stddef=''
657 i_stdlib=''
658 i_string=''
659 strings=''
660 i_sunmath=''
661 i_sysaccess=''
662 i_sysdir=''
663 i_sysfile=''
664 d_voidtty=''
665 i_bsdioctl=''
666 i_sysfilio=''
667 i_sysioctl=''
668 i_syssockio=''
669 i_syslog=''
670 i_sysmman=''
671 i_sysmode=''
672 i_sysmount=''
673 i_sysndir=''
674 i_sysparam=''
675 i_sysresrc=''
676 i_syssecrt=''
677 i_sysselct=''
678 i_sysstat=''
679 i_sysstatfs=''
680 i_sysstatvfs=''
681 i_systimes=''
682 i_systypes=''
683 i_sysuio=''
684 i_sysun=''
685 i_sysutsname=''
686 i_sysvfs=''
687 i_syswait=''
688 i_sgtty=''
689 i_termio=''
690 i_termios=''
691 i_systime=''
692 i_systimek=''
693 i_time=''
694 timeincl=''
695 i_unistd=''
696 i_ustat=''
697 i_utime=''
698 i_values=''
699 i_stdarg=''
700 i_varargs=''
701 i_varhdr=''
702 i_vfork=''
703 inc_version_list=''
704 inc_version_list_init=''
705 installprefix=''
706 installprefixexp=''
707 installstyle=''
708 installusrbinperl=''
709 intsize=''
710 longsize=''
711 shortsize=''
712 libc=''
713 ldlibpthname=''
714 libperl=''
715 shrpenv=''
716 useshrplib=''
717 glibpth=''
718 libpth=''
719 loclibpth=''
720 plibpth=''
721 xlibpth=''
722 ignore_versioned_solibs=''
723 libs=''
724 libsdirs=''
725 libsfiles=''
726 libsfound=''
727 libspath=''
728 lns=''
729 d_PRIEldbl=''
730 d_PRIFldbl=''
731 d_PRIGldbl=''
732 d_PRIeldbl=''
733 d_PRIfldbl=''
734 d_PRIgldbl=''
735 sPRIEldbl=''
736 sPRIFldbl=''
737 sPRIGldbl=''
738 sPRIeldbl=''
739 sPRIfldbl=''
740 sPRIgldbl=''
741 lseeksize=''
742 lseektype=''
743 make_set_make=''
744 d_mymalloc=''
745 freetype=''
746 mallocobj=''
747 mallocsrc=''
748 malloctype=''
749 usemymalloc=''
750 installman1dir=''
751 man1dir=''
752 man1direxp=''
753 man1ext=''
754 installman3dir=''
755 man3dir=''
756 man3direxp=''
757 man3ext=''
758 huge=''
759 large=''
760 medium=''
761 models=''
762 small=''
763 split=''
764 modetype=''
765 multiarch=''
766 mydomain=''
767 myhostname=''
768 phostname=''
769 c=''
770 n=''
771 d_eofnblk=''
772 eagain=''
773 o_nonblock=''
774 rd_nodata=''
775 netdb_hlen_type=''
776 netdb_host_type=''
777 netdb_name_type=''
778 netdb_net_type=''
779 groupcat=''
780 hostcat=''
781 passcat=''
782 orderlib=''
783 ranlib=''
784 d_perl_otherlibdirs=''
785 otherlibdirs=''
786 package=''
787 spackage=''
788 pager=''
789 api_revision=''
790 api_subversion=''
791 api_version=''
792 api_versionstring=''
793 patchlevel=''
794 revision=''
795 subversion=''
796 version=''
797 perl5=''
798 perladmin=''
799 perlpath=''
800 d_nv_preserves_uv=''
801 d_nv_preserves_uv_bits=''
802 i16size=''
803 i16type=''
804 i32size=''
805 i32type=''
806 i64size=''
807 i64type=''
808 i8size=''
809 i8type=''
810 ivsize=''
811 ivtype=''
812 nvsize=''
813 nvtype=''
814 u16size=''
815 u16type=''
816 u32size=''
817 u32type=''
818 u64size=''
819 u64type=''
820 u8size=''
821 u8type=''
822 uvsize=''
823 uvtype=''
824 ivdformat=''
825 uvoformat=''
826 uvuformat=''
827 uvxformat=''
828 pidtype=''
829 prefix=''
830 prefixexp=''
831 installprivlib=''
832 privlib=''
833 privlibexp=''
834 prototype=''
835 ptrsize=''
836 d_PRIX64=''
837 d_PRId64=''
838 d_PRIi64=''
839 d_PRIo64=''
840 d_PRIu64=''
841 d_PRIx64=''
842 sPRIX64=''
843 sPRId64=''
844 sPRIi64=''
845 sPRIo64=''
846 sPRIu64=''
847 sPRIx64=''
848 d_quad=''
849 quadkind=''
850 quadtype=''
851 uquadtype=''
852 drand01=''
853 randbits=''
854 randfunc=''
855 randseedtype=''
856 seedfunc=''
857 installscript=''
858 scriptdir=''
859 scriptdirexp=''
860 selectminbits=''
861 selecttype=''
862 sh=''
863 sig_count=''
864 sig_name=''
865 sig_name_init=''
866 sig_num=''
867 sig_num_init=''
868 installsitearch=''
869 sitearch=''
870 sitearchexp=''
871 installsitebin=''
872 sitebin=''
873 sitebinexp=''
874 installsitelib=''
875 sitelib=''
876 sitelib_stem=''
877 sitelibexp=''
878 siteprefix=''
879 siteprefixexp=''
880 sizesize=''
881 sizetype=''
882 so=''
883 socksizetype=''
884 sharpbang=''
885 shsharp=''
886 spitshell=''
887 src=''
888 ssizetype=''
889 startperl=''
890 startsh=''
891 stdchar=''
892 d_stdio_stream_array=''
893 stdio_stream_array=''
894 sysman=''
895 trnl=''
896 uidformat=''
897 uidsign=''
898 uidsize=''
899 uidtype=''
900 archname64=''
901 use64bitall=''
902 use64bitint=''
903 uselargefiles=''
904 uselongdouble=''
905 usemorebits=''
906 usemultiplicity=''
907 nm_opt=''
908 nm_so_opt=''
909 runnm=''
910 usenm=''
911 useperlio=''
912 usesocks=''
913 d_oldpthreads=''
914 use5005threads=''
915 useithreads=''
916 usethreads=''
917 incpath=''
918 mips_type=''
919 usrinc=''
920 d_vendorarch=''
921 installvendorarch=''
922 vendorarch=''
923 vendorarchexp=''
924 d_vendorbin=''
925 installvendorbin=''
926 vendorbin=''
927 vendorbinexp=''
928 d_vendorlib=''
929 installvendorlib=''
930 vendorlib=''
931 vendorlib_stem=''
932 vendorlibexp=''
933 usevendorprefix=''
934 vendorprefix=''
935 vendorprefixexp=''
936 defvoidused=''
937 voidflags=''
938 pm_apiversion=''
939 xs_apiversion=''
940 CONFIG=''
941
942 define='define'
943 undef='undef'
944 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
945 rmlist=''
946
947 : We must find out about Eunice early
948 eunicefix=':'
949 if test -f /etc/unixtovms; then
950         eunicefix=/etc/unixtovms
951 fi
952 if test -f /etc/unixtovms.exe; then
953         eunicefix=/etc/unixtovms.exe
954 fi
955
956 i_whoami=''
957 : set useposix=false in your hint file to disable the POSIX extension.
958 useposix=true
959 : set useopcode=false in your hint file to disable the Opcode extension.
960 useopcode=true
961 : Trailing extension.  Override this in a hint file, if needed.
962 _exe=''
963 : Extra object files, if any, needed on this platform.
964 archobjs=''
965 : Possible local include directories to search.
966 : Set locincpth to "" in a hint file to defeat local include searches.
967 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
968 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
969 :
970 : no include file wanted by default
971 inclwanted=''
972
973 groupstype=''
974 : change the next line if compiling for Xenix/286 on Xenix/386
975 xlibpth='/usr/lib/386 /lib/386'
976 : Possible local library directories to search.
977 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
978 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
979
980 : general looking path for locating libraries
981 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
982 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
983 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
984 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
985 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
986
987 : Private path used by Configure to find libraries.  Its value
988 : is prepended to libpth. This variable takes care of special
989 : machines, like the mips.  Usually, it should be empty.
990 plibpth=''
991
992 : default library list
993 libswanted=''
994 : some systems want to use only the non-versioned libso:s
995 ignore_versioned_solibs=''
996 : set usemultiplicity on the Configure command line to enable multiplicity.
997 : set usesocks on the Configure command line to enable socks.
998 : set usethreads on the Configure command line to enable threads.
999 : full support for void wanted by default
1000 defvoidused=15
1001
1002 : List of libraries we want.
1003 : If anyone needs -lnet, put it in a hint file.
1004 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1005 libswanted="$libswanted dld ld sun m c cposix posix"
1006 libswanted="$libswanted ndir dir crypt sec"
1007 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1008 : We probably want to search /usr/shlib before most other libraries.
1009 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1010 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1011 glibpth="/usr/shlib $glibpth"
1012 : Do not use vfork unless overridden by a hint file.
1013 usevfork=false
1014
1015 : Find the basic shell for Bourne shell scripts
1016 case "$sh" in
1017 '')
1018         case "$SYSTYPE" in
1019         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1020         *) xxx='/bin/sh';;
1021         esac
1022         if test -f "$xxx"; then
1023                 sh="$xxx"
1024         else
1025                 : Build up a list and do a single loop so we can 'break' out.
1026                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1027                 for xxx in sh bash ksh pdksh ash; do
1028                         for p in $pth; do
1029                                 try="$try ${p}/${xxx}"
1030                         done
1031                 done
1032                 for xxx in $try; do
1033                         if test -f "$xxx"; then
1034                                 sh="$xxx";
1035                                 break
1036                         elif test -f "$xxx.exe"; then
1037                                 sh="$xxx";
1038                                 break
1039                         fi
1040                 done
1041         fi
1042         ;;
1043 esac
1044
1045 case "$sh" in
1046 '')     cat <<EOM >&2
1047 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1048
1049 Usually it's in /bin/sh.  How did you even get this far?
1050 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1051 we'll try to straighten this all out.
1052 EOM
1053         exit 1
1054         ;;
1055 esac
1056
1057 : see if sh knows # comments
1058 if `$sh -c '#' >/dev/null 2>&1`; then
1059         shsharp=true
1060         spitshell=cat
1061         xcat=/bin/cat
1062         test -f $xcat || xcat=/usr/bin/cat
1063         echo "#!$xcat" >try
1064         $eunicefix try
1065         chmod +x try
1066         ./try > today
1067         if test -s today; then
1068                 sharpbang='#!'
1069         else
1070                 echo "#! $xcat" > try
1071                 $eunicefix try
1072                 chmod +x try
1073                 ./try > today
1074                 if test -s today; then
1075                         sharpbang='#! '
1076                 else
1077                         sharpbang=': use '
1078                 fi
1079         fi
1080 else
1081         echo " "
1082         echo "Your $sh doesn't grok # comments--I will strip them later on."
1083         shsharp=false
1084         cd ..
1085         echo "exec grep -v '^[  ]*#'" >spitshell
1086         chmod +x spitshell
1087         $eunicefix spitshell
1088         spitshell=`pwd`/spitshell
1089         cd UU
1090         echo "I presume that if # doesn't work, #! won't work either!"
1091         sharpbang=': use '
1092 fi
1093 rm -f try today
1094
1095 : figure out how to guarantee sh startup
1096 case "$startsh" in
1097 '') startsh=${sharpbang}${sh} ;;
1098 *)
1099 esac
1100 cat >try <<EOSS
1101 $startsh
1102 set abc
1103 test "$?abc" != 1
1104 EOSS
1105
1106 chmod +x try
1107 $eunicefix try
1108 if ./try; then
1109         : echo "Yup, it does."
1110 else
1111         echo "Hmm... '$startsh' does not guarantee sh startup..."
1112         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1113 fi
1114 rm -f try
1115
1116
1117 : Save command line options in file UU/cmdline.opt for later use in
1118 : generating config.sh.
1119 cat > cmdline.opt <<EOSH
1120 # Configure command line arguments.
1121 config_arg0='$0'
1122 config_args='$*'
1123 config_argc=$#
1124 EOSH
1125 argn=1
1126 for arg in "$@"; do
1127         cat >>cmdline.opt <<EOSH
1128 config_arg$argn='$arg'
1129 EOSH
1130         argn=`expr $argn + 1`
1131 done
1132
1133 : produce awk script to parse command line options
1134 cat >options.awk <<'EOF'
1135 BEGIN {
1136         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1137
1138         len = length(optstr);
1139         for (i = 1; i <= len; i++) {
1140                 c = substr(optstr, i, 1);
1141                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1142                 if (a == ":") {
1143                         arg[c] = 1;
1144                         i++;
1145                 }
1146                 opt[c] = 1;
1147         }
1148 }
1149 {
1150         expect = 0;
1151         str = $0;
1152         if (substr(str, 1, 1) != "-") {
1153                 printf("'%s'\n", str);
1154                 next;
1155         }
1156         len = length($0);
1157         for (i = 2; i <= len; i++) {
1158                 c = substr(str, i, 1);
1159                 if (!opt[c]) {
1160                         printf("-%s\n", substr(str, i));
1161                         next;
1162                 }
1163                 printf("-%s\n", c);
1164                 if (arg[c]) {
1165                         if (i < len)
1166                                 printf("'%s'\n", substr(str, i + 1));
1167                         else
1168                                 expect = 1;
1169                         next;
1170                 }
1171         }
1172 }
1173 END {
1174         if (expect)
1175                 print "?";
1176 }
1177 EOF
1178
1179 : process the command line options
1180 set X `for arg in "$@"; do echo "X$arg"; done |
1181         sed -e s/X// | awk -f options.awk`
1182 eval "set $*"
1183 shift
1184 rm -f options.awk
1185
1186 : set up default values
1187 fastread=''
1188 reuseval=false
1189 config_sh=''
1190 alldone=''
1191 error=''
1192 silent=''
1193 extractsh=''
1194 override=''
1195 knowitall=''
1196 rm -f optdef.sh posthint.sh
1197 cat >optdef.sh <<EOS
1198 $startsh
1199 EOS
1200
1201
1202 : option parsing
1203 while test $# -gt 0; do
1204         case "$1" in
1205         -d) shift; fastread=yes;;
1206         -e) shift; alldone=cont;;
1207         -f)
1208                 shift
1209                 cd ..
1210                 if test -r "$1"; then
1211                         config_sh="$1"
1212                 else
1213                         echo "$me: cannot read config file $1." >&2
1214                         error=true
1215                 fi
1216                 cd UU
1217                 shift;;
1218         -h) shift; error=true;;
1219         -r) shift; reuseval=true;;
1220         -s) shift; silent=true; realsilent=true;;
1221         -E) shift; alldone=exit;;
1222         -K) shift; knowitall=true;;
1223         -O) shift; override=true;;
1224         -S) shift; silent=true; extractsh=true;;
1225         -D)
1226                 shift
1227                 case "$1" in
1228                 *=)
1229                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1230                         echo "$me: ignoring -D $1" >&2
1231                         ;;
1232                 *=*) echo "$1" | \
1233                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1234                 *) echo "$1='define'" >> optdef.sh;;
1235                 esac
1236                 shift
1237                 ;;
1238         -U)
1239                 shift
1240                 case "$1" in
1241                 *=) echo "$1" >> optdef.sh;;
1242                 *=*)
1243                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1244                         echo "$me: ignoring -U $1" >&2
1245                         ;;
1246                 *) echo "$1='undef'" >> optdef.sh;;
1247                 esac
1248                 shift
1249                 ;;
1250         -A)
1251             shift
1252             xxx=''
1253             yyy="$1"
1254             zzz=''
1255             uuu=undef
1256             case "$yyy" in
1257             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1258                  case "$zzz" in
1259                  *:*) zzz='' ;;
1260                  *)   xxx=append
1261                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1262                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1263                  esac
1264                  ;;
1265             esac
1266             case "$xxx" in
1267             '')  case "$yyy" in
1268                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1269                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1270                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1271                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1272                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1273                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1274                  esac
1275                  ;;       
1276             esac
1277             case "$xxx" in
1278             append)
1279                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1280             clear)
1281                 echo "$yyy=''"                  >> posthint.sh ;;
1282             define)
1283                 case "$zzz" in
1284                 '') zzz=define ;;
1285                 esac
1286                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1287             eval)
1288                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1289             prepend)
1290                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1291             undef)
1292                 case "$zzz" in
1293                 '') zzz="$uuu" ;;
1294                 esac
1295                 echo "$yyy=$zzz"                >> posthint.sh ;;
1296             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1297             esac
1298             shift
1299             ;;
1300         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1301             exit 0;;
1302         --) break;;
1303         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1304         *) break;;
1305         esac
1306 done
1307
1308 case "$error" in
1309 true)
1310         cat >&2 <<EOM
1311 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1312                  [-U symbol] [-U symbol=] [-A command:symbol...]
1313   -d : use defaults for all answers.
1314   -e : go on without questioning past the production of config.sh.
1315   -f : specify an alternate default configuration file.
1316   -h : print this help message and exit (with an error status).
1317   -r : reuse C symbols value if possible (skips costly nm extraction).
1318   -s : silent mode, only echoes questions and essential information.
1319   -D : define symbol to have some value:
1320          -D symbol         symbol gets the value 'define'
1321          -D symbol=value   symbol gets the value 'value'
1322   -E : stop at the end of questions, after having produced config.sh.
1323   -K : do not use unless you know what you are doing.
1324   -O : let -D and -U override definitions from loaded configuration file.
1325   -S : perform variable substitutions on all .SH files (can mix with -f)
1326   -U : undefine symbol:
1327          -U symbol    symbol gets the value 'undef'
1328          -U symbol=   symbol gets completely empty
1329   -A : manipulate symbol after the platform specific hints have been applied:
1330          -A symbol=value                append " "value to symbol
1331          -A append:symbol=value         append value to symbol
1332          -A define:symbol=value         define symbol to have value
1333          -A clear:symbol                define symbol to be ''
1334          -A define:symbol               define symbol to be 'define'
1335          -A eval:symbol=value           define symbol to be eval of value
1336          -A prepend:symbol=value        prepend value to symbol
1337          -A undef:symbol                define symbol to be 'undef'
1338          -A undef:symbol=               define symbol to be ''
1339   -V : print version number and exit (with a zero status).
1340 EOM
1341         exit 1
1342         ;;
1343 esac
1344
1345 : Sanity checks
1346 case "$fastread$alldone" in
1347 yescont|yesexit) ;;
1348 *)
1349         case "$extractsh" in
1350         true) ;;
1351         *)
1352                 if test ! -t 0; then
1353                         echo "Say 'sh Configure', not 'sh <Configure'"
1354                         exit 1
1355                 fi
1356                 ;;
1357         esac
1358         ;;
1359 esac
1360
1361 exec 4>&1
1362 case "$silent" in
1363 true) exec 1>/dev/null;;
1364 esac
1365
1366 : run the defines and the undefines, if any, but leave the file out there...
1367 touch optdef.sh
1368 . ./optdef.sh
1369 : create the posthint manipulation script and leave the file out there...
1370 touch posthint.sh
1371
1372 : set package name
1373 package=perl5
1374 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1375 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1376 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1377 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1378 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1379 esac
1380
1381 : Some greps do not return status, grrr.
1382 echo "grimblepritz" >grimble
1383 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1384         contains=contains
1385 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1386         contains=grep
1387 else
1388         contains=contains
1389 fi
1390 rm -f grimble
1391 : the following should work in any shell
1392 case "$contains" in
1393 contains*)
1394         echo " "
1395         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1396         cat >contains <<'EOSS'
1397 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1398 EOSS
1399 chmod +x contains
1400 esac
1401
1402 : Find the path to the source tree
1403 case "$src" in
1404 '') case "$0" in
1405     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1406          case "$src" in
1407          /*)    ;;
1408          *)     src=`cd ../$src && pwd` ;;
1409          esac
1410          ;;
1411     *)   src='.';;
1412     esac;;
1413 esac
1414 case "$src" in
1415 '')     src=/
1416         rsrc=/
1417         ;;
1418 /*) rsrc="$src";;
1419 *) rsrc="../$src";;
1420 esac
1421 if test -f $rsrc/Configure && \
1422         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1423 then
1424    : found it, so we are ok.
1425 else
1426         rsrc=''
1427         for src in . .. ../.. ../../.. ../../../..; do
1428                 if test -f ../$src/Configure && \
1429                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1430                 then
1431                         rsrc=../$src
1432                         break
1433                 fi
1434         done
1435 fi
1436 case "$rsrc" in
1437 '')
1438         cat <<EOM >&4
1439
1440 Sorry, I can't seem to locate the source dir for $package.  Please start
1441 Configure with an explicit path -- i.e. /some/path/Configure.
1442
1443 EOM
1444         exit 1
1445         ;;
1446 ../.)   rsrc='..';;
1447 *)
1448         echo " "
1449         echo "Sources for $package found in \"$src\"." >&4
1450         ;;
1451 esac
1452
1453 : script used to extract .SH files with variable substitutions
1454 cat >extract <<'EOS'
1455 CONFIGDOTSH=true
1456 echo "Doing variable substitutions on .SH files..."
1457 if test -f $src/MANIFEST; then
1458         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1459 else
1460         echo "(Looking for .SH files under the source directory.)"
1461         set x `(cd $src; find . -name "*.SH" -print)`
1462 fi
1463 shift
1464 case $# in
1465 0) set x `(cd $src; echo *.SH)`; shift;;
1466 esac
1467 if test ! -f $src/$1; then
1468         shift
1469 fi
1470 mkdir_p='
1471 name=$1;
1472 create="";
1473 while test $name; do
1474         if test ! -d "$name"; then
1475                 create="$name $create";
1476                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1477                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1478         else
1479                 name="";
1480         fi;
1481 done;
1482 for file in $create; do
1483         mkdir $file;
1484 done
1485 '
1486 for file in $*; do
1487         case "$src" in
1488         ".")
1489                 case "$file" in
1490                 */*)
1491                         dir=`expr X$file : 'X\(.*\)/'`
1492                         file=`expr X$file : 'X.*/\(.*\)'`
1493                         (cd $dir && . ./$file)
1494                         ;;
1495                 *)
1496                         . ./$file
1497                         ;;
1498                 esac
1499                 ;;
1500         *)
1501                 case "$file" in
1502                 */*)
1503                         dir=`expr X$file : 'X\(.*\)/'`
1504                         file=`expr X$file : 'X.*/\(.*\)'`
1505                         (set x $dir; shift; eval $mkdir_p)
1506                         sh <$src/$dir/$file
1507                         ;;
1508                 *)
1509                         sh <$src/$file
1510                         ;;
1511                 esac
1512                 ;;
1513         esac
1514 done
1515 if test -f $src/config_h.SH; then
1516         if test ! -f config.h; then
1517         : oops, they left it out of MANIFEST, probably, so do it anyway.
1518         . $src/config_h.SH
1519         fi
1520 fi
1521 EOS
1522
1523 : extract files and exit if asked to do so
1524 case "$extractsh" in
1525 true)
1526         case "$realsilent" in
1527         true) ;;
1528         *) exec 1>&4;;
1529         esac
1530         case "$config_sh" in
1531         '') config_sh='config.sh';;
1532         esac
1533         echo " "
1534         echo "Fetching answers from $config_sh..."
1535         cd ..
1536         . $config_sh
1537         test "$override" && . ./optdef.sh
1538         echo " "
1539         . UU/extract
1540         rm -rf UU
1541         echo "Done."
1542         exit 0
1543         ;;
1544 esac
1545
1546 : Eunice requires " " instead of "", can you believe it
1547 echo " "
1548 : Here we go...
1549 echo "Beginning of configuration questions for $package."
1550
1551 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1552
1553 : first determine how to suppress newline on echo command
1554 echo " "
1555 echo "Checking echo to see how to suppress newlines..."
1556 (echo "hi there\c" ; echo " ") >.echotmp
1557 if $contains c .echotmp >/dev/null 2>&1 ; then
1558         echo "...using -n."
1559         n='-n'
1560         c=''
1561 else
1562         cat <<'EOM'
1563 ...using \c
1564 EOM
1565         n=''
1566         c='\c'
1567 fi
1568 echo $n "The star should be here-->$c"
1569 echo '*'
1570 rm -f .echotmp
1571
1572 : Now test for existence of everything in MANIFEST
1573 echo " "
1574 if test -f $rsrc/MANIFEST; then
1575         echo "First let's make sure your kit is complete.  Checking..." >&4
1576         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1577         rm -f missing
1578         tmppwd=`pwd`
1579         for filelist in x??; do
1580                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1581         done
1582         if test -s missing; then
1583                 cat missing >&4
1584                 cat >&4 <<'EOM'
1585
1586 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1587
1588 You have the option of continuing the configuration process, despite the
1589 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1590 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1591 and contact the author (perlbug@perl.com).
1592
1593 EOM
1594                 echo $n "Continue? [n] $c" >&4
1595                 read ans
1596                 case "$ans" in
1597                 y*)
1598                         echo "Continuing..." >&4
1599                         rm -f missing
1600                         ;;
1601                 *)
1602                         echo "ABORTING..." >&4
1603                         kill $$
1604                         ;;
1605                 esac
1606         else
1607                 echo "Looks good..."
1608         fi
1609 else
1610         echo "There is no MANIFEST file.  I hope your kit is complete !"
1611 fi
1612 rm -f missing x??
1613
1614 echo " "
1615 : Find the appropriate value for a newline for tr
1616 if test -n "$DJGPP"; then
1617        trnl='\012'
1618 fi
1619 if test X"$trnl" = X; then
1620         case "`echo foo|tr '\n' x 2>/dev/null`" in
1621         foox) trnl='\n' ;;
1622         esac
1623 fi
1624 if test X"$trnl" = X; then
1625         case "`echo foo|tr '\012' x 2>/dev/null`" in
1626         foox) trnl='\012' ;;
1627         esac
1628 fi
1629 if test X"$trnl" = X; then
1630         cat <<EOM >&2
1631
1632 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1633
1634 EOM
1635         exit 1
1636 fi
1637
1638 : compute the number of columns on the terminal for proper question formatting
1639 case "$COLUMNS" in
1640 '') COLUMNS='80';;
1641 esac
1642
1643 : set up the echo used in my read
1644 myecho="case \"\$xxxm\" in
1645 '') echo $n \"\$rp $c\" >&4;;
1646 *) case \"\$rp\" in
1647         '') echo $n \"[\$xxxm] $c\";;
1648         *)
1649                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1650                         echo \"\$rp\" >&4
1651                         echo $n \"[\$xxxm] $c\" >&4
1652                 else
1653                         echo $n \"\$rp [\$xxxm] $c\" >&4
1654                 fi
1655                 ;;
1656         esac;;
1657 esac"
1658
1659 : now set up to do reads with possible shell escape and default assignment
1660 cat <<EOSC >myread
1661 $startsh
1662 xxxm=\$dflt
1663 $myecho
1664 ans='!'
1665 case "\$fastread" in
1666 yes) case "\$dflt" in
1667         '') ;;
1668         *) ans='';
1669                 case "\$silent-\$rp" in
1670                 true-) ;;
1671                 *) echo " " >&4;;
1672                 esac;;
1673         esac;;
1674 *) case "\$silent" in
1675         true) case "\$rp" in
1676                 '') ans='';;
1677                 esac;;
1678         esac;;
1679 esac
1680 while expr "X\$ans" : "X!" >/dev/null; do
1681         read answ
1682         set x \$xxxm
1683         shift
1684         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1685         case  "\$answ" in
1686         "!")
1687                 sh 1>&4
1688                 echo " "
1689                 $myecho
1690                 ;;
1691         !*)
1692                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1693                 shift
1694                 sh 1>&4 -c "\$*"
1695                 echo " "
1696                 $myecho
1697                 ;;
1698         "\$ans")
1699                 case "\$ans" in
1700                 \\&*)
1701                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1702                         shift
1703                         case "\$1" in
1704                         -d)
1705                                 fastread=yes
1706                                 echo "(OK, I'll run with -d after this question.)" >&4
1707                                 ;;
1708                         -*)
1709                                 echo "*** Sorry, \$1 not supported yet." >&4
1710                                 ;;
1711                         esac
1712                         $myecho
1713                         ans=!
1714                         ;;
1715                 esac;;
1716         *)
1717                 case "\$aok" in
1718                 y)
1719                         echo "*** Substitution done -- please confirm."
1720                         xxxm="\$ans"
1721                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1722                         xxxm="\$ans"
1723                         ans=!
1724                         ;;
1725                 *)
1726                         echo "*** Error -- try again."
1727                         ans=!
1728                         ;;
1729                 esac
1730                 $myecho
1731                 ;;
1732         esac
1733         case "\$ans\$xxxm\$nostick" in
1734         '')
1735                 ans=!
1736                 $myecho
1737                 ;;
1738         esac
1739 done
1740 case "\$ans" in
1741 '') ans="\$xxxm";;
1742 esac
1743 EOSC
1744
1745 : create .config dir to save info across Configure sessions
1746 test -d ../.config || mkdir ../.config
1747 cat >../.config/README <<EOF
1748 This directory created by Configure to save information that should
1749 persist across sessions for $package.
1750
1751 You may safely delete it if you wish.
1752 EOF
1753
1754 : general instructions
1755 needman=true
1756 firsttime=true
1757 user=`(logname) 2>/dev/null`
1758 case "$user" in
1759 '') user=`whoami 2>&1`;;
1760 esac
1761 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1762         firsttime=false
1763         echo " "
1764         rp='Would you like to see the instructions?'
1765         dflt=n
1766         . ./myread
1767         case "$ans" in
1768         [yY]*) ;;
1769         *) needman=false;;
1770         esac
1771 fi
1772 if $needman; then
1773         cat <<EOH
1774
1775 This installation shell script will examine your system and ask you questions
1776 to determine how the perl5 package should be installed. If you get
1777 stuck on a question, you may use a ! shell escape to start a subshell or
1778 execute a command.  Many of the questions will have default answers in square
1779 brackets; typing carriage return will give you the default.
1780
1781 On some of the questions which ask for file or directory names you are allowed
1782 to use the ~name construct to specify the login directory belonging to "name",
1783 even if you don't have a shell which knows about that.  Questions where this is
1784 allowed will be marked "(~name ok)".
1785
1786 EOH
1787         rp=''
1788         dflt='Type carriage return to continue'
1789         . ./myread
1790         cat <<'EOH'
1791
1792 The prompter used in this script allows you to use shell variables and
1793 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1794 in the default answer, as if the default line was a set of arguments given to a
1795 script shell.  This means you may also use $* to repeat the whole default line,
1796 so you do not have to re-type everything to add something to the default.
1797
1798 Everytime there is a substitution, you will have to confirm.  If there is an
1799 error (e.g. an unmatched backtick), the default answer will remain unchanged
1800 and you will be prompted again.
1801
1802 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1803 the questions and use the computed defaults (or the previous answers if there
1804 was already a config.sh file). Type 'Configure -h' for a list of options.
1805 You may also start interactively and then answer '& -d' at any prompt to turn
1806 on the non-interactive behaviour for the remainder of the execution.
1807
1808 EOH
1809         . ./myread
1810         cat <<EOH
1811
1812 Much effort has been expended to ensure that this shell script will run on any
1813 Unix system.  If despite that it blows up on yours, your best bet is to edit
1814 Configure and run it again.  If you can't run Configure for some reason,
1815 you'll have to generate a config.sh file by hand.  Whatever problems you
1816 have, let me (perlbug@perl.com) know how I blew it.
1817
1818 This installation script affects things in two ways:
1819
1820 1) it may do direct variable substitutions on some of the files included
1821    in this kit.
1822 2) it builds a config.h file for inclusion in C programs.  You may edit
1823    any of these files as the need arises after running this script.
1824
1825 If you make a mistake on a question, there is no easy way to back up to it
1826 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1827 files.  Configure will offer to let you do this before it runs the SH files.
1828
1829 EOH
1830         dflt='Type carriage return to continue'
1831         . ./myread
1832         case "$firsttime" in
1833         true) echo $user >>../.config/instruct;;
1834         esac
1835 fi
1836
1837 : find out where common programs are
1838 echo " "
1839 echo "Locating common programs..." >&4
1840 cat <<EOSC >loc
1841 $startsh
1842 case \$# in
1843 0) exit 1;;
1844 esac
1845 thing=\$1
1846 shift
1847 dflt=\$1
1848 shift
1849 for dir in \$*; do
1850         case "\$thing" in
1851         .)
1852         if test -d \$dir/\$thing; then
1853                 echo \$dir
1854                 exit 0
1855         fi
1856         ;;
1857         *)
1858         for thisthing in \$dir/\$thing; do
1859                 : just loop through to pick last item
1860         done
1861         if test -f \$thisthing; then
1862                 echo \$thisthing
1863                 exit 0
1864         elif test -f \$dir/\$thing.exe; then
1865                 if test -n "$DJGPP"; then
1866                         echo \$dir/\$thing.exe
1867                 else
1868                         : on Eunice apparently
1869                         echo \$dir/\$thing
1870                 fi
1871                 exit 0
1872         fi
1873         ;;
1874         esac
1875 done
1876 echo \$dflt
1877 exit 1
1878 EOSC
1879 chmod +x loc
1880 $eunicefix loc
1881 loclist="
1882 awk
1883 cat
1884 comm
1885 cp
1886 echo
1887 expr
1888 grep
1889 ls
1890 make
1891 mkdir
1892 rm
1893 sed
1894 sort
1895 touch
1896 tr
1897 uniq
1898 "
1899 trylist="
1900 Mcc
1901 ar
1902 byacc
1903 cpp
1904 csh
1905 date
1906 egrep
1907 gzip
1908 less
1909 ln
1910 more
1911 nm
1912 nroff
1913 pg
1914 test
1915 uname
1916 zip
1917 "
1918 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1919 pth="$pth /lib /usr/lib"
1920 for file in $loclist; do
1921         eval xxx=\$$file
1922         case "$xxx" in
1923         /*|?:[\\/]*)
1924                 if test -f "$xxx"; then
1925                         : ok
1926                 else
1927                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1928                         xxx=`./loc $file $file $pth`
1929                 fi
1930                 ;;
1931         '') xxx=`./loc $file $file $pth`;;
1932         *) xxx=`./loc $xxx $xxx $pth`;;
1933         esac
1934         eval $file=$xxx
1935         eval _$file=$xxx
1936         case "$xxx" in
1937         /*)
1938                 echo $file is in $xxx.
1939                 ;;
1940         ?:[\\/]*)
1941                 echo $file is in $xxx.
1942                 ;;
1943         *)
1944                 echo "I don't know where '$file' is, and my life depends on it." >&4
1945                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1946                 exit 1
1947                 ;;
1948         esac
1949 done
1950 echo " "
1951 echo "Don't worry if any of the following aren't found..."
1952 say=offhand
1953 for file in $trylist; do
1954         eval xxx=\$$file
1955         case "$xxx" in
1956         /*|?:[\\/]*)
1957                 if test -f "$xxx"; then
1958                         : ok
1959                 else
1960                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1961                         xxx=`./loc $file $file $pth`
1962                 fi
1963                 ;;
1964         '') xxx=`./loc $file $file $pth`;;
1965         *) xxx=`./loc $xxx $xxx $pth`;;
1966         esac
1967         eval $file=$xxx
1968         eval _$file=$xxx
1969         case "$xxx" in
1970         /*)
1971                 echo $file is in $xxx.
1972                 ;;
1973         ?:[\\/]*)
1974                 echo $file is in $xxx.
1975                 ;;
1976         *)
1977                 echo "I don't see $file out there, $say."
1978                 say=either
1979                 ;;
1980         esac
1981 done
1982 case "$egrep" in
1983 egrep)
1984         echo "Substituting grep for egrep."
1985         egrep=$grep
1986         ;;
1987 esac
1988 case "$ln" in
1989 ln)
1990         echo "Substituting cp for ln."
1991         ln=$cp
1992         ;;
1993 esac
1994 case "$test" in
1995 test)
1996         echo "Hopefully test is built into your sh."
1997         ;;
1998 *)
1999         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2000                 echo "Using the test built into your sh."
2001                 test=test
2002                 _test=test
2003         fi
2004         ;;
2005 esac
2006 case "$echo" in
2007 echo)
2008         echo "Hopefully echo is built into your sh."
2009         ;;
2010 '') ;;
2011 *)
2012         echo " "
2013 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2014         $echo $n "hi there$c" >foo1
2015         echo $n "hi there$c" >foo2
2016         if cmp foo1 foo2 >/dev/null 2>&1; then
2017                 echo "They are compatible.  In fact, they may be identical."
2018         else
2019                 case "$n" in
2020                 '-n') n='' c='\c';;
2021                 *) n='-n' c='';;
2022                 esac
2023                 cat <<FOO
2024 They are not compatible!  You are probably running ksh on a non-USG system.
2025 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2026 have echo built in and we may have to run some Bourne shell scripts.  That
2027 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2028
2029 FOO
2030                 $echo $n "The star should be here-->$c"
2031                 $echo "*"
2032         fi
2033         $rm -f foo1 foo2
2034         ;;
2035 esac
2036
2037 cat <<EOS >checkcc
2038 $startsh
2039 EOS
2040 cat <<'EOSC' >>checkcc
2041 case "$cc" in
2042 '') ;;
2043 *)  $rm -f try try.*
2044     $cat >try.c <<EOM
2045 int main(int argc, char *argv[]) {
2046   return 0;
2047 }
2048 EOM
2049     if $cc -o try try.c; then
2050        :
2051     else
2052         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2053         despair=yes
2054         trygcc=yes
2055         case "$cc" in
2056         *gcc*) trygcc=no ;;
2057         esac
2058         case "`$cc -v -c try.c 2>&1`" in
2059         *gcc*) trygcc=no ;;
2060         esac
2061         if $test X"$trygcc" = Xyes; then
2062             if gcc -o try -c try.c; then
2063                 echo " "
2064                 echo "You seem to have a working gcc, though." >&4
2065                 rp="Would you like to use it?"
2066                 dflt=y
2067                 if $test -f myread; then
2068                     . ./myread
2069                 else
2070                     if $test -f UU/myread; then
2071                         . ./UU/myread
2072                     else
2073                         echo "Cannot find myread, sorry.  Aborting." >&2
2074                         exit 1
2075                     fi
2076                 fi  
2077                 case "$ans" in
2078                 [yY]*) cc=gcc; ccflags=''; despair=no ;;
2079                 esac
2080             fi
2081         fi
2082         if $test X"$despair" = Xyes; then
2083             echo "You need to find a working C compiler." >&4
2084             echo "I cannot continue any further, aborting." >&4
2085             exit 1
2086         fi
2087     fi
2088     $rm -f try try.*
2089     ;;
2090 esac
2091 EOSC
2092
2093 : determine whether symbolic links are supported
2094 echo " "
2095 $touch blurfl
2096 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2097         echo "Symbolic links are supported." >&4
2098         lns="$ln -s"
2099 else
2100         echo "Symbolic links are NOT supported." >&4
2101         lns="$ln"
2102 fi
2103 $rm -f blurfl sym
2104
2105 : see whether [:lower:] and [:upper:] are supported character classes
2106 echo " "
2107 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2108 ABYZ)
2109         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2110         up='[:upper:]'
2111         low='[:lower:]'
2112         ;;
2113 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2114         # (0xc9 and 0xd1), therefore that is a nice testing point.
2115         if test "X$up" = X -o "X$low" = X; then
2116             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2117             ij) up='[A-Z]'
2118                 low='[a-z]'
2119                 ;;
2120             esac
2121         fi
2122         if test "X$up" = X -o "X$low" = X; then
2123             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2124             ij) up='A-Z'
2125                 low='a-z'
2126                 ;;
2127             esac
2128         fi
2129         if test "X$up" = X -o "X$low" = X; then
2130             case "`echo IJ | od -x 2>/dev/null`" in
2131             *C9D1*|*c9d1*)
2132                 echo "Hey, this might be EBCDIC." >&4
2133                 if test "X$up" = X -o "X$low" = X; then
2134                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2135                     ij) up='[A-IJ-RS-Z]'
2136                         low='[a-ij-rs-z]'
2137                         ;;
2138                     esac
2139                 fi
2140                 if test "X$up" = X -o "X$low" = X; then
2141                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2142                     ij) up='A-IJ-RS-Z'
2143                         low='a-ij-rs-z'
2144                         ;;
2145                     esac
2146                 fi
2147                 ;;
2148             esac
2149         fi
2150 esac
2151 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2152 ij)
2153     echo "Using $up and $low to convert case." >&4
2154     ;;
2155 *)
2156     echo "I don't know how to translate letters from upper to lower case." >&4
2157     echo "Your tr is not acting any way I know of." >&4
2158     exit 1
2159     ;;
2160 esac
2161 : set up the translation script tr, must be called with ./tr of course
2162 cat >tr <<EOSC
2163 $startsh
2164 case "\$1\$2" in
2165 '[A-Z][a-z]') exec $tr '$up' '$low';;
2166 '[a-z][A-Z]') exec $tr '$low' '$up';;
2167 esac
2168 exec $tr "\$@"
2169 EOSC
2170 chmod +x tr
2171 $eunicefix tr
2172
2173 : Try to determine whether config.sh was made on this system
2174 case "$config_sh" in
2175 '')
2176 myuname=`$uname -a 2>/dev/null`
2177 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2178 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2179 # because the A-Z/a-z are not consecutive.
2180 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2181         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2182 newmyuname="$myuname"
2183 dflt=n
2184 case "$knowitall" in
2185 '')
2186         if test -f ../config.sh; then
2187                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2188                         eval "`grep myuname= ../config.sh`"
2189                 fi
2190                 if test "X$myuname" = "X$newmyuname"; then
2191                         dflt=y
2192                 fi
2193         fi
2194         ;;
2195 *) dflt=y;;
2196 esac
2197
2198 : Get old answers from old config file if Configure was run on the
2199 : same system, otherwise use the hints.
2200 hint=default
2201 cd ..
2202 if test -f config.sh; then
2203         echo " "
2204         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2205         . UU/myread
2206         case "$ans" in
2207         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2208         *)  echo "Fetching default answers from your old config.sh file..." >&4
2209                 tmp_n="$n"
2210                 tmp_c="$c"
2211                 tmp_sh="$sh"
2212                 . ./config.sh
2213                 cp config.sh UU
2214                 n="$tmp_n"
2215                 c="$tmp_c"
2216                 : Older versions did not always set $sh.  Catch re-use of such
2217                 : an old config.sh.
2218                 case "$sh" in
2219                 '') sh="$tmp_sh" ;;
2220                 esac
2221                 hint=previous
2222                 ;;
2223         esac
2224 fi
2225 . ./UU/checkcc
2226 if test ! -f config.sh; then
2227         $cat <<EOM
2228
2229 First time through, eh?  I have some defaults handy for some systems
2230 that need some extra help getting the Configure answers right:
2231
2232 EOM
2233         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2234         dflt=''
2235         : Half the following guesses are probably wrong... If you have better
2236         : tests or hints, please send them to perlbug@perl.com
2237         : The metaconfig authors would also appreciate a copy...
2238         $test -f /irix && osname=irix
2239         $test -f /xenix && osname=sco_xenix
2240         $test -f /dynix && osname=dynix
2241         $test -f /dnix && osname=dnix
2242         $test -f /lynx.os && osname=lynxos
2243         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2244         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2245         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2246         $test -f /bin/mips && /bin/mips && osname=mips
2247         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2248                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2249         $test -d /usr/apollo/bin && osname=apollo
2250         $test -f /etc/saf/_sactab && osname=svr4
2251         $test -d /usr/include/minix && osname=minix
2252         if $test -d /MachTen -o -d /MachTen_Folder; then
2253                 osname=machten
2254                 if $test -x /sbin/version; then
2255                         osvers=`/sbin/version | $awk '{print $2}' |
2256                         $sed -e 's/[A-Za-z]$//'`
2257                 elif $test -x /usr/etc/version; then
2258                         osvers=`/usr/etc/version | $awk '{print $2}' |
2259                         $sed -e 's/[A-Za-z]$//'`
2260                 else
2261                         osvers="$2.$3"
2262                 fi
2263         fi
2264
2265         $test -f /sys/posix.dll &&
2266                 $test -f /usr/bin/what &&
2267                 set X `/usr/bin/what /sys/posix.dll` &&
2268                 $test "$3" = UWIN &&
2269                 osname=uwin &&
2270                 osvers="$5"
2271
2272         if $test -f $uname; then
2273                 set X $myuname
2274                 shift
2275
2276                 case "$5" in
2277                 fps*) osname=fps ;;
2278                 mips*)
2279                         case "$4" in
2280                         umips) osname=umips ;;
2281                         *) osname=mips ;;
2282                         esac;;
2283                 [23]100) osname=mips ;;
2284                 next*) osname=next ;;
2285                 i386*)
2286                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2287                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2288                                 osname='sco'
2289                                 osvers=$tmp
2290                         elif $test -f /etc/kconfig; then
2291                                 osname=isc
2292                                 if test "$lns" = "$ln -s"; then
2293                                         osvers=4
2294                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2295                                         osvers=3
2296                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2297                                         osvers=2
2298                                 fi
2299                         fi
2300                         tmp=''
2301                         ;;
2302                 pc*)
2303                         if test -n "$DJGPP"; then
2304                                 osname=dos
2305                                 osvers=djgpp
2306                         fi
2307                         ;;
2308                 esac
2309
2310                 case "$1" in
2311                 aix) osname=aix
2312                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2313                         case "$tmp" in
2314                         'not found') osvers="$4"."$3" ;;
2315                         '<3240'|'<>3240') osvers=3.2.0 ;;
2316                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2317                         '=3250'|'>3250') osvers=3.2.5 ;;
2318                         *) osvers=$tmp;;
2319                         esac
2320                         ;;
2321                 bsd386) osname=bsd386
2322                         osvers=`$uname -r`
2323                         ;;
2324                 cygwin*) osname=cygwin
2325                         osvers="$3"
2326                         ;;
2327                 *dc.osx) osname=dcosx
2328                         osvers="$3"
2329                         ;;
2330                 dnix) osname=dnix
2331                         osvers="$3"
2332                         ;;
2333                 domainos) osname=apollo
2334                         osvers="$3"
2335                         ;;
2336                 dgux) osname=dgux 
2337                         osvers="$3"
2338                         ;;
2339                 dynixptx*) osname=dynixptx
2340                         osvers=`echo "$4"|sed 's/^v//'`
2341                         ;;
2342                 freebsd) osname=freebsd 
2343                         osvers="$3" ;;
2344                 genix) osname=genix ;;
2345                 hp*) osname=hpux 
2346                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2347                         ;;
2348                 irix*) osname=irix
2349                         case "$3" in
2350                         4*) osvers=4 ;;
2351                         5*) osvers=5 ;;
2352                         *)      osvers="$3" ;;
2353                         esac
2354                         ;;
2355                 linux) osname=linux
2356                         case "$3" in
2357                         *)      osvers="$3" ;;
2358                         esac
2359                         ;;
2360                 MiNT) osname=mint
2361                         ;;
2362                 netbsd*) osname=netbsd
2363                         osvers="$3"
2364                         ;;
2365                 news-os) osvers="$3"
2366                         case "$3" in
2367                         4*) osname=newsos4 ;;
2368                         *) osname=newsos ;;
2369                         esac
2370                         ;;
2371                 next*) osname=next ;;
2372                 POSIX-BC | posix-bc ) osname=posix-bc
2373                         osvers="$3"
2374                         ;;
2375                 powerux | power_ux | powermax_os | powermaxos | \
2376                 powerunix | power_unix) osname=powerux
2377                         osvers="$3"
2378                         ;;
2379                 qnx) osname=qnx
2380                         osvers="$4"
2381                         ;;
2382                 solaris) osname=solaris
2383                         case "$3" in
2384                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2385                         *)      osvers="$3" ;;
2386                         esac
2387                         ;;
2388                 sunos) osname=sunos
2389                         case "$3" in
2390                         5*) osname=solaris
2391                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2392                         *)      osvers="$3" ;;
2393                         esac
2394                         ;;
2395                 titanos) osname=titanos
2396                         case "$3" in
2397                         1*) osvers=1 ;;
2398                         2*) osvers=2 ;;
2399                         3*) osvers=3 ;;
2400                         4*) osvers=4 ;;
2401                         *)      osvers="$3" ;;
2402                         esac
2403                         ;;
2404                 ultrix) osname=ultrix
2405                         osvers="$3"
2406                         ;;
2407                 osf1|mls+)      case "$5" in
2408                                 alpha)
2409                                         osname=dec_osf
2410                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2411                                         case "$osvers" in
2412                                         [1-9].[0-9]*) ;;
2413                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2414                                         esac
2415                                         ;;
2416                         hp*)    osname=hp_osf1  ;;
2417                         mips)   osname=mips_osf1 ;;
2418                         esac
2419                         ;;
2420                 unixware) osname=svr5
2421                         osvers="$4"
2422                         ;;
2423                 uts) osname=uts
2424                         osvers="$3"
2425                         ;;
2426                 $2) case "$osname" in
2427                         *isc*) ;;
2428                         *freebsd*) ;;
2429                         svr*)
2430                                 : svr4.x or possibly later
2431                                 case "svr$3" in 
2432                                 ${osname}*)
2433                                         osname=svr$3
2434                                         osvers=$4
2435                                         ;;
2436                                 esac
2437                                 case "$osname" in
2438                                 svr4.0)
2439                                         : Check for ESIX
2440                                         if test -f /stand/boot ; then
2441                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2442                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2443                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2444                                                         if test -n "$isesix"; then
2445                                                                 osname=esix4
2446                                                         fi
2447                                                 fi
2448                                         fi
2449                                         ;;
2450                                 esac
2451                                 ;;
2452                         *)      if test -f /etc/systemid; then
2453                                         osname=sco
2454                                         set `echo $3 | $sed 's/\./ /g'` $4
2455                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2456                                                 osvers=$1.$2.$3
2457                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2458                                                 osvers=$1.$2
2459                                         elif $test -f $src/hints/sco_$1.sh; then
2460                                                 osvers=$1
2461                                         fi
2462                                 else
2463                                         case "$osname" in
2464                                         '') : Still unknown.  Probably a generic Sys V.
2465                                                 osname="sysv"
2466                                                 osvers="$3"
2467                                                 ;;
2468                                         esac
2469                                 fi
2470                                 ;;
2471                         esac
2472                         ;;
2473                 *)      case "$osname" in
2474                         '') : Still unknown.  Probably a generic BSD.
2475                                 osname="$1"
2476                                 osvers="$3"
2477                                 ;;
2478                         esac
2479                         ;;
2480                 esac
2481         else
2482                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2483                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2484                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2485                                 osname=news_os
2486                         fi
2487                         $rm -f UU/kernel.what
2488                 elif test -d c:/.; then
2489                         set X $myuname
2490                         osname=os2
2491                         osvers="$5"
2492                 fi
2493         fi
2494         
2495         : Now look for a hint file osname_osvers, unless one has been
2496         : specified already.
2497         case "$hintfile" in
2498         ''|' ')
2499                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2500                 : Also try without trailing minor version numbers.
2501                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2502                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2503                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2504                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2505                 case "$file" in
2506                 '') dflt=none ;;
2507                 *)  case "$osvers" in
2508                         '') dflt=$file
2509                                 ;;
2510                         *)  if $test -f $src/hints/$file.sh ; then
2511                                         dflt=$file
2512                                 elif $test -f $src/hints/$xfile.sh ; then
2513                                         dflt=$xfile
2514                                 elif $test -f $src/hints/$xxfile.sh ; then
2515                                         dflt=$xxfile
2516                                 elif $test -f $src/hints/$xxxfile.sh ; then
2517                                         dflt=$xxxfile
2518                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2519                                         dflt=$xxxxfile
2520                                 elif $test -f "$src/hints/${osname}.sh" ; then
2521                                         dflt="${osname}"
2522                                 else
2523                                         dflt=none
2524                                 fi
2525                                 ;;
2526                         esac
2527                         ;;
2528                 esac
2529                 if $test -f Policy.sh ; then
2530                         case "$dflt" in
2531                         *Policy*) ;;
2532                         none) dflt="Policy" ;;
2533                         *) dflt="Policy $dflt" ;;
2534                         esac
2535                 fi
2536                 ;;
2537         *)
2538                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2539                 ;;
2540         esac
2541
2542         if $test -f Policy.sh ; then
2543                 $cat <<EOM
2544
2545 There's also a Policy hint file available, which should make the
2546 site-specific (policy) questions easier to answer.
2547 EOM
2548
2549         fi
2550
2551         $cat <<EOM
2552
2553 You may give one or more space-separated answers, or "none" if appropriate.
2554 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2555 is a good thing.  DO NOT give a wrong version or a wrong OS.
2556
2557 EOM
2558
2559         rp="Which of these apply, if any?"
2560         . UU/myread
2561         tans=$ans
2562         for file in $tans; do
2563                 if $test X$file = XPolicy -a -f Policy.sh; then
2564                         . Policy.sh
2565                         $cat Policy.sh >> UU/config.sh
2566                 elif $test -f $src/hints/$file.sh; then
2567                         . $src/hints/$file.sh
2568                         $cat $src/hints/$file.sh >> UU/config.sh
2569                 elif $test X$tans = X -o X$tans = Xnone ; then
2570                         : nothing
2571                 else
2572                         : Give one chance to correct a possible typo.
2573                         echo "$file.sh does not exist"
2574                         dflt=$file
2575                         rp="hint to use instead?"
2576                         . UU/myread
2577                         for file in $ans; do
2578                                 if $test -f "$src/hints/$file.sh"; then
2579                                         . $src/hints/$file.sh
2580                                         $cat $src/hints/$file.sh >> UU/config.sh
2581                                 elif $test X$ans = X -o X$ans = Xnone ; then
2582                                         : nothing
2583                                 else
2584                                         echo "$file.sh does not exist -- ignored."
2585                                 fi
2586                         done
2587                 fi
2588         done
2589
2590         hint=recommended
2591         : Remember our hint file for later.
2592         if $test -f "$src/hints/$file.sh" ; then
2593                 hintfile="$file"
2594         else
2595                 hintfile=''
2596         fi
2597 fi
2598 cd UU
2599 ;;
2600 *)
2601         echo " "
2602         echo "Fetching default answers from $config_sh..." >&4
2603         tmp_n="$n"
2604         tmp_c="$c"
2605         cd ..
2606         cp $config_sh config.sh 2>/dev/null
2607         chmod +w config.sh
2608         . ./config.sh
2609         cd UU
2610         cp ../config.sh .
2611         n="$tmp_n"
2612         c="$tmp_c"
2613         hint=previous
2614         ;;
2615 esac
2616 test "$override" && . ./optdef.sh
2617 myuname="$newmyuname"
2618
2619 : Restore computed paths
2620 for file in $loclist $trylist; do
2621         eval $file="\$_$file"
2622 done
2623
2624 cat << EOM
2625
2626 Configure uses the operating system name and version to set some defaults.
2627 The default value is probably right if the name rings a bell. Otherwise,
2628 since spelling matters for me, either accept the default or answer "none"
2629 to leave it blank.
2630
2631 EOM
2632 case "$osname" in
2633         ''|' ')
2634                 case "$hintfile" in
2635                 ''|' '|none) dflt=none ;;
2636                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2637                 esac
2638                 ;;
2639         *) dflt="$osname" ;;
2640 esac
2641 rp="Operating system name?"
2642 . ./myread
2643 case "$ans" in
2644 none)  osname='' ;;
2645 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2646 esac
2647 echo " "
2648 case "$osvers" in
2649         ''|' ')
2650                 case "$hintfile" in
2651                 ''|' '|none) dflt=none ;;
2652                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2653                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2654                         case "$dflt" in
2655                         ''|' ') dflt=none ;;
2656                         esac
2657                         ;;
2658                 esac
2659                 ;;
2660         *) dflt="$osvers" ;;
2661 esac
2662 rp="Operating system version?"
2663 . ./myread
2664 case "$ans" in
2665 none)  osvers='' ;;
2666 *) osvers="$ans" ;;
2667 esac
2668
2669
2670 . ./posthint.sh
2671
2672 : who configured the system
2673 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2674 cf_by=`(logname) 2>/dev/null`
2675 case "$cf_by" in
2676 "")
2677         cf_by=`(whoami) 2>/dev/null`
2678         case "$cf_by" in
2679         "") cf_by=unknown ;;
2680         esac ;;
2681 esac
2682
2683 : set up the script used to warn in case of inconsistency
2684 cat <<EOS >whoa
2685 $startsh
2686 EOS
2687 cat <<'EOSC' >>whoa
2688 dflt=y
2689 echo " "
2690 echo "*** WHOA THERE!!! ***" >&4
2691 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2692 rp="    Keep the $hint value?"
2693 . ./myread
2694 case "$ans" in
2695 y) td=$was; tu=$was;;
2696 esac
2697 EOSC
2698
2699 : function used to set $1 to $val
2700 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2701 case "$val$was" in
2702 $define$undef) . ./whoa; eval "$var=\$td";;
2703 $undef$define) . ./whoa; eval "$var=\$tu";;
2704 *) eval "$var=$val";;
2705 esac'
2706
2707 case "$usethreads" in
2708 $define|true|[yY]*)     dflt='y';;
2709 *) dflt='n';;
2710 esac
2711 cat <<EOM
2712
2713 Perl can be built to take advantage of threads on some systems.
2714 To do so, Configure can be run with -Dusethreads.
2715
2716 Note that threading is a highly experimental feature, and
2717 some known race conditions still remain.  If you choose to try
2718 it, be very sure to not actually deploy it for production
2719 purposes.  README.threads has more details, and is required
2720 reading if you enable threads.
2721
2722 If this doesn't make any sense to you, just accept the default '$dflt'.
2723 EOM
2724 rp='Build a threading Perl?'
2725 . ./myread
2726 case "$ans" in
2727 y|Y)    val="$define" ;;
2728 *)      val="$undef" ;;
2729 esac
2730 set usethreads
2731 eval $setvar
2732
2733 case "$usethreads" in
2734 $define)
2735         $cat <<EOM
2736
2737 As of 5.5.640, Perl has two different internal threading implementations,
2738 the 5.005 version (5005threads) and an interpreter-based version
2739 (ithreads) that has one interpreter per thread.  Both are very 
2740 experimental.  This arrangement exists to help developers work out
2741 which one is better.
2742
2743 If you're a casual user, you probably don't want interpreter-threads
2744 at this time.  There doesn't yet exist a way to create threads from
2745 within Perl in this model, i.e., "use Thread;" will NOT work.
2746 EOM
2747         : Default to ithreads unless overridden on command line or with
2748         : old config.sh
2749         dflt='y'
2750         case "$use5005threads" in
2751                 $define|true|[yY]*) dflt='n';;
2752         esac
2753         case "$useithreads" in
2754                 $undef|false|[nN]*) dflt='n';;
2755         esac
2756         rp='Use interpreter-based ithreads?'
2757         . ./myread
2758         case "$ans" in
2759         y|Y)    val="$define" ;;
2760         *)      val="$undef" ;;
2761         esac
2762         set useithreads
2763         eval $setvar
2764         : Now set use5005threads to the opposite value.
2765         case "$useithreads" in
2766         $define) val="$undef" ;;
2767         *) val="$define" ;;
2768         esac
2769         set use5005threads
2770         eval $setvar
2771         ;;
2772 *)
2773         useithreads="$undef"
2774         use5005threads="$undef"
2775         ;;
2776 esac
2777
2778 case "$d_oldpthreads" in
2779 '')     : Configure tests would be welcome here.  For now, assume undef.
2780         val="$undef" ;;
2781 *)      val="$d_oldpthreads" ;;
2782 esac
2783 set d_oldpthreads
2784 eval $setvar
2785
2786
2787 case "$usethreads" in
2788 "$define"|true|[yY]*)
2789 : Look for a hint-file generated 'call-back-unit'.  If the
2790 : user has specified that a threading perl is to be built,
2791 : we may need to set or change some other defaults.
2792         if $test -f usethreads.cbu; then
2793                 echo "Your platform has some specific hints for threaded builds, using them..."
2794                 . ./usethreads.cbu
2795         else
2796                 $cat <<EOM
2797 (Your platform doesn't have any specific hints for threaded builds.
2798  Assuming POSIX threads, then.)
2799 EOM
2800         fi
2801         ;;
2802 esac
2803
2804 cat <<EOM
2805
2806 Perl can be built so that multiple Perl interpreters can coexist
2807 within the same Perl executable.
2808 EOM
2809
2810 case "$useithreads" in
2811 $define)
2812         cat <<EOM
2813 This multiple interpreter support is required for interpreter-based threads.
2814 EOM
2815         val="$define"
2816         ;;
2817 *)      case "$usemultiplicity" in
2818         $define|true|[yY]*)     dflt='y';;
2819         *) dflt='n';;
2820         esac
2821         echo " "
2822         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2823         rp='Build Perl for multiplicity?'
2824         . ./myread
2825         case "$ans" in
2826         y|Y)    val="$define" ;;
2827         *)      val="$undef" ;;
2828         esac
2829         ;;
2830 esac
2831 set usemultiplicity
2832 eval $setvar
2833
2834 : determine where manual pages are on this system
2835 echo " "
2836 case "$sysman" in
2837 '') 
2838         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2839         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2840         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2841         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2842         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2843         sysman=`./loc . /usr/man/man1 $syspath`
2844         ;;
2845 esac
2846 if $test -d "$sysman"; then
2847         echo "System manual is in $sysman." >&4
2848 else
2849         echo "Could not find manual pages in source form." >&4
2850 fi
2851
2852 : see what memory models we can support
2853 case "$models" in
2854 '')
2855         $cat >pdp11.c <<'EOP'
2856 int main() {
2857 #ifdef pdp11
2858         exit(0);
2859 #else
2860         exit(1);
2861 #endif
2862 }
2863 EOP
2864         case "$cc" in
2865         '') modelcc="$cc" ;;
2866         *) modelcc="cc" ;;
2867         esac
2868         ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
2869         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2870                 dflt='unsplit split'
2871         else
2872                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2873                 case "$tans" in
2874                 X) dflt='none';;
2875                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2876                                 dflt='small'
2877                         else
2878                                 dflt=''
2879                         fi
2880                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2881                                 dflt="$dflt medium"
2882                         fi
2883                         if $test -d /lib/large || $test -d /usr/lib/large; then
2884                                 dflt="$dflt large"
2885                         fi
2886                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2887                                 dflt="$dflt huge"
2888                         fi
2889                 esac
2890         fi;;
2891 *) dflt="$models";;
2892 esac
2893 $cat <<EOM
2894  
2895 Some systems have different model sizes.  On most systems they are called
2896 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2897 split.  If your system doesn't support different memory models, say "none".
2898 If you wish to force everything to one memory model, say "none" here and
2899 put the appropriate flags later when it asks you for other cc and ld flags.
2900 Venix systems may wish to put "none" and let the compiler figure things out.
2901 (In the following question multiple model names should be space separated.)
2902
2903 The default for most systems is "none".
2904
2905 EOM
2906 rp="Which memory models are supported?"
2907 . ./myread
2908 models="$ans"
2909
2910 case "$models" in
2911 none)
2912         small=''
2913         medium=''
2914         large=''
2915         huge=''
2916         unsplit=''
2917         split=''
2918         ;;
2919 *split)
2920         case "$split" in
2921         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2922                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2923                         dflt='-i'
2924                 else
2925                         dflt='none'
2926                 fi;;
2927         *) dflt="$split";;
2928         esac
2929         rp="What flag indicates separate I and D space?"
2930         . ./myread
2931         tans="$ans"
2932         case "$tans" in
2933         none) tans='';;
2934         esac
2935         split="$tans"
2936         unsplit='';;
2937 *large*|*small*|*medium*|*huge*)
2938         case "$models" in
2939         *large*)
2940                 case "$large" in
2941                 '') dflt='-Ml';;
2942                 *) dflt="$large";;
2943                 esac
2944         rp="What flag indicates large model?"
2945         . ./myread
2946         tans="$ans"
2947         case "$tans" in
2948         none) tans='';
2949         esac
2950         large="$tans";;
2951         *) large='';;
2952         esac
2953         case "$models" in
2954         *huge*) case "$huge" in
2955                 '') dflt='-Mh';;
2956                 *) dflt="$huge";;
2957                 esac
2958                 rp="What flag indicates huge model?"
2959                 . ./myread
2960                 tans="$ans"
2961                 case "$tans" in
2962                 none) tans='';
2963                 esac
2964                 huge="$tans";;
2965         *) huge="$large";;
2966         esac
2967         case "$models" in
2968         *medium*) case "$medium" in
2969                 '') dflt='-Mm';;
2970                 *) dflt="$medium";;
2971                 esac
2972                 rp="What flag indicates medium model?"
2973                 . ./myread
2974                 tans="$ans"
2975                 case "$tans" in
2976                 none) tans='';
2977                 esac
2978                 medium="$tans";;
2979         *) medium="$large";;
2980         esac
2981         case "$models" in
2982         *small*) case "$small" in
2983                 '') dflt='none';;
2984                 *) dflt="$small";;
2985                 esac
2986                 rp="What flag indicates small model?"
2987                 . ./myread
2988                 tans="$ans"
2989                 case "$tans" in
2990                 none) tans='';
2991                 esac
2992                 small="$tans";;
2993         *) small='';;
2994         esac
2995         ;;
2996 *)
2997         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2998         ;;
2999 esac
3000 $rm -f pdp11.* pdp11
3001
3002 : make some quick guesses about what we are up against
3003 echo " "
3004 $echo $n "Hmm...  $c"
3005 echo exit 1 >bsd
3006 echo exit 1 >usg
3007 echo exit 1 >v7
3008 echo exit 1 >osf1
3009 echo exit 1 >eunice
3010 echo exit 1 >xenix
3011 echo exit 1 >venix
3012 echo exit 1 >os2
3013 d_bsd="$undef"
3014 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3015 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3016 then
3017         echo "Looks kind of like an OSF/1 system, but we'll see..."
3018         echo exit 0 >osf1
3019 elif test `echo abc | tr a-z A-Z` = Abc ; then
3020         xxx=`./loc addbib blurfl $pth`
3021         if $test -f $xxx; then
3022         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3023                 echo exit 0 >bsd
3024                 echo exit 0 >usg
3025         else
3026                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3027                         echo "Looks kind of like an extended USG system, but we'll see..."
3028                 else
3029                         echo "Looks kind of like a USG system, but we'll see..."
3030                 fi
3031                 echo exit 0 >usg
3032         fi
3033 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3034         echo "Looks kind of like a BSD system, but we'll see..."
3035         d_bsd="$define"
3036         echo exit 0 >bsd
3037 else
3038         echo "Looks kind of like a Version 7 system, but we'll see..."
3039         echo exit 0 >v7
3040 fi
3041 case "$eunicefix" in
3042 *unixtovms*)
3043         $cat <<'EOI'
3044 There is, however, a strange, musty smell in the air that reminds me of
3045 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3046 EOI
3047         echo exit 0 >eunice
3048         d_eunice="$define"
3049 : it so happens the Eunice I know will not run shell scripts in Unix format
3050         ;;
3051 *)
3052         echo " "
3053         echo "Congratulations.  You aren't running Eunice."
3054         d_eunice="$undef"
3055         ;;
3056 esac
3057 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3058 case "$p_" in
3059 :) ;;
3060 *)
3061         $cat <<'EOI'
3062 I have the feeling something is not exactly right, however...don't tell me...
3063 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3064 EOI
3065         echo exit 0 >os2
3066         ;;
3067 esac
3068 if test -f /xenix; then
3069         echo "Actually, this looks more like a XENIX system..."
3070         echo exit 0 >xenix
3071         d_xenix="$define"
3072 else
3073         echo " "
3074         echo "It's not Xenix..."
3075         d_xenix="$undef"
3076 fi
3077 chmod +x xenix
3078 $eunicefix xenix
3079 if test -f /venix; then
3080         echo "Actually, this looks more like a VENIX system..."
3081         echo exit 0 >venix
3082 else
3083         echo " "
3084         if ./xenix; then
3085                 : null
3086         else
3087                 echo "Nor is it Venix..."
3088         fi
3089 fi
3090 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3091 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3092 $rm -f foo
3093
3094 : see if we need a special compiler
3095 echo " "
3096 if ./usg; then
3097         case "$cc" in
3098         '') case "$Mcc" in
3099                 /*) dflt='Mcc';;
3100                 *) case "$large" in
3101                         -M*) dflt='cc';;
3102                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3103                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3104                                                 dflt='cc'
3105                                         else
3106                                                 dflt='cc -M'
3107                                         fi
3108                                 else
3109                                         dflt='cc'
3110                                 fi;;
3111                         esac;;
3112                 esac;;
3113         *)  dflt="$cc";;
3114         esac
3115         case "$dflt" in
3116         *M*)    $cat <<'EOM'
3117 On some older systems the default C compiler will not resolve multiple global
3118 references that happen to have the same name.  On some such systems the "Mcc"
3119 command may be used to force these to be resolved.  On other systems a "cc -M"
3120 command is required.  (Note that the -M flag on other systems indicates a
3121 memory model to use!) If you have the Gnu C compiler, you might wish to use
3122 that instead.
3123
3124 EOM
3125         ;;
3126         esac
3127         rp="Use which C compiler?"
3128         . ./myread
3129         cc="$ans"
3130 else
3131         case "$cc" in
3132         '') dflt=cc;;
3133         *) dflt="$cc";;
3134         esac
3135         rp="Use which C compiler?"
3136         . ./myread
3137         cc="$ans"
3138 fi
3139 : Look for a hint-file generated 'call-back-unit'.  Now that the
3140 : user has specified the compiler, we may need to set or change some
3141 : other defaults.
3142 if $test -f cc.cbu; then
3143     . ./cc.cbu
3144 fi
3145 . ./checkcc
3146
3147 echo " "
3148 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3149 $cat >gccvers.c <<EOM
3150 #include <stdio.h>
3151 int main() {
3152 #ifdef __GNUC__
3153 #ifdef __VERSION__
3154         printf("%s\n", __VERSION__);
3155 #else
3156         printf("%s\n", "1");
3157 #endif
3158 #endif
3159         exit(0);
3160 }
3161 EOM
3162 if $cc $ldflags -o gccvers gccvers.c; then
3163         gccversion=`./gccvers`
3164         case "$gccversion" in
3165         '') echo "You are not using GNU cc." ;;
3166         *)  echo "You are using GNU cc $gccversion."
3167             ;;
3168         esac
3169 else
3170         echo " "
3171         echo "*** WHOA THERE!!! ***" >&4
3172         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3173         case "$knowitall" in
3174         '')
3175         echo "    You'd better start hunting for one and let me know about it." >&4
3176                 exit 1
3177                 ;;
3178         esac
3179 fi
3180 $rm -f gccvers*
3181 case "$gccversion" in
3182 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3183 esac
3184 case "$gccversion" in
3185 '') gccosandvers='' ;;
3186 *) gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed 's!.*/[^-]*-[^-]*-\([^/]*\)/'$gccversion'/specs$!\1!'`
3187    case "$gccosandvers" in
3188    $osname$osvers) ;;
3189    $osname*) cat <<EOM >&4
3190
3191 *** WHOA THERE!!! ***
3192
3193     Your gcc has not been compiled for the exact release of
3194     your operating system ($gccosandvers versus $osname$osvers).
3195
3196     In general it is a good idea to keep gcc synchronized with
3197     the operating system because otherwise serious problems
3198     may ensue when trying to compile software, like Perl.
3199
3200     I'm trying to be optimistic here, though, and will continue.
3201     If later during the configuration and build icky compilation
3202     problems appear, I suggest reinstalling the gcc to match
3203     your operating system release.
3204
3205 EOM
3206       ;;
3207    *) gccosandvers='' ;; # failed to parse, better be silent
3208    esac
3209    ;;
3210 esac
3211
3212
3213
3214
3215 : see how we invoke the C preprocessor
3216 echo " "
3217 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3218 cat <<'EOT' >testcpp.c
3219 #define ABC abc
3220 #define XYZ xyz
3221 ABC.XYZ
3222 EOT
3223 cd ..
3224 if test ! -f cppstdin; then
3225         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3226                 # AIX cc -E doesn't show the absolute headerfile
3227                 # locations but we'll cheat by using the -M flag.
3228                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3229         else
3230                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3231         fi
3232 else
3233         echo "Keeping your $hint cppstdin wrapper."
3234 fi
3235 chmod 755 cppstdin
3236 wrapper=`pwd`/cppstdin
3237 ok='false'
3238 cd UU
3239
3240 if $test "X$cppstdin" != "X" && \
3241         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3242         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3243 then
3244         echo "You used to use $cppstdin $cppminus so we'll use that again."
3245         case "$cpprun" in
3246         '') echo "But let's see if we can live without a wrapper..." ;;
3247         *)
3248                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3249                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3250                 then
3251                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3252                         ok='true'
3253                 else
3254                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3255                 fi
3256                 ;;
3257         esac
3258 else
3259         case "$cppstdin" in
3260         '') ;;
3261         *)
3262                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3263                 ;;
3264         esac
3265 fi
3266
3267 if $ok; then
3268         : nothing
3269 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3270         $cc -E <testcpp.c >testcpp.out 2>&1; \
3271         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3272         echo "Yup, it does."
3273         x_cpp="$cc -E"
3274         x_minus='';
3275 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3276         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3277         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3278         echo "Yup, it does."
3279         x_cpp="$cc -E"
3280         x_minus='-';
3281 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3282         $cc -P <testcpp.c >testcpp.out 2>&1; \
3283         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3284         echo "Yipee, that works!"
3285         x_cpp="$cc -P"
3286         x_minus='';
3287 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3288         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3289         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3290         echo "At long last!"
3291         x_cpp="$cc -P"
3292         x_minus='-';
3293 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3294         $cpp <testcpp.c >testcpp.out 2>&1; \
3295         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3296         echo "It works!"
3297         x_cpp="$cpp"
3298         x_minus='';
3299 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3300         $cpp - <testcpp.c >testcpp.out 2>&1; \
3301         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3302         echo "Hooray, it works!  I was beginning to wonder."
3303         x_cpp="$cpp"
3304         x_minus='-';
3305 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3306         $wrapper <testcpp.c >testcpp.out 2>&1; \
3307         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3308         x_cpp="$wrapper"
3309         x_minus=''
3310         echo "Eureka!"
3311 else
3312         dflt=''
3313         rp="No dice.  I can't find a C preprocessor.  Name one:"
3314         . ./myread
3315         x_cpp="$ans"
3316         x_minus=''
3317         $x_cpp <testcpp.c >testcpp.out 2>&1
3318         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3319                 echo "OK, that will do." >&4
3320         else
3321 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3322                 exit 1
3323         fi
3324 fi
3325
3326 case "$ok" in
3327 false)
3328         cppstdin="$x_cpp"
3329         cppminus="$x_minus"
3330         cpprun="$x_cpp"
3331         cpplast="$x_minus"
3332         set X $x_cpp
3333         shift
3334         case "$1" in
3335         "$cpp")
3336                 echo "Perhaps can we force $cc -E using a wrapper..."
3337                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3338                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3339                 then
3340                         echo "Yup, we can."
3341                         cppstdin="$wrapper"
3342                         cppminus='';
3343                 else
3344                         echo "Nope, we'll have to live without it..."
3345                 fi
3346                 ;;
3347         esac
3348         case "$cpprun" in
3349         "$wrapper")
3350                 cpprun=''
3351                 cpplast=''
3352                 ;;
3353         esac
3354         ;;
3355 esac
3356
3357 case "$cppstdin" in
3358 "$wrapper"|'cppstdin') ;;
3359 *) $rm -f $wrapper;;
3360 esac
3361 $rm -f testcpp.c testcpp.out
3362
3363 : decide how portable to be.  Allow command line overrides.
3364 case "$d_portable" in
3365 "$undef") ;;
3366 *)      d_portable="$define" ;;
3367 esac
3368
3369 : set up shell script to do ~ expansion
3370 cat >filexp <<EOSS
3371 $startsh
3372 : expand filename
3373 case "\$1" in
3374  ~/*|~)
3375         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3376         ;;
3377  ~*)
3378         if $test -f /bin/csh; then
3379                 /bin/csh -f -c "glob \$1"
3380                 failed=\$?
3381                 echo ""
3382                 exit \$failed
3383         else
3384                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3385                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3386                 if $test ! -d "\$dir"; then
3387                         me=\`basename \$0\`
3388                         echo "\$me: can't locate home directory for: \$name" >&2
3389                         exit 1
3390                 fi
3391                 case "\$1" in
3392                 */*)
3393                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3394                         ;;
3395                 *)
3396                         echo \$dir
3397                         ;;
3398                 esac
3399         fi
3400         ;;
3401 *)
3402         echo \$1
3403         ;;
3404 esac
3405 EOSS
3406 chmod +x filexp
3407 $eunicefix filexp
3408
3409 : now set up to get a file name
3410 cat <<EOS >getfile
3411 $startsh
3412 EOS
3413 cat <<'EOSC' >>getfile
3414 tilde=''
3415 fullpath=''
3416 already=''
3417 skip=''
3418 none_ok=''
3419 exp_file=''
3420 nopath_ok=''
3421 orig_rp="$rp"
3422 orig_dflt="$dflt"
3423 case "$gfpth" in
3424 '') gfpth='.' ;;
3425 esac
3426
3427 case "$fn" in
3428 *\(*)
3429         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3430         fn=`echo $fn | sed 's/(.*)//'`
3431         ;;
3432 esac
3433
3434 case "$fn" in
3435 *:*)
3436         loc_file=`expr $fn : '.*:\(.*\)'`
3437         fn=`expr $fn : '\(.*\):.*'`
3438         ;;
3439 esac
3440
3441 case "$fn" in
3442 *~*) tilde=true;;
3443 esac
3444 case "$fn" in
3445 */*) fullpath=true;;
3446 esac
3447 case "$fn" in
3448 *+*) skip=true;;
3449 esac
3450 case "$fn" in
3451 *n*) none_ok=true;;
3452 esac
3453 case "$fn" in
3454 *e*) exp_file=true;;
3455 esac
3456 case "$fn" in
3457 *p*) nopath_ok=true;;
3458 esac
3459
3460 case "$fn" in
3461 *f*) type='File';;
3462 *d*) type='Directory';;
3463 *l*) type='Locate';;
3464 esac
3465
3466 what="$type"
3467 case "$what" in
3468 Locate) what='File';;
3469 esac
3470
3471 case "$exp_file" in
3472 '')
3473         case "$d_portable" in
3474         "$define") ;;
3475         *) exp_file=true;;
3476         esac
3477         ;;
3478 esac
3479
3480 cd ..
3481 while test "$type"; do
3482         redo=''
3483         rp="$orig_rp"
3484         dflt="$orig_dflt"
3485         case "$tilde" in
3486         true) rp="$rp (~name ok)";;
3487         esac
3488         . UU/myread
3489         if test -f UU/getfile.ok && \
3490                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3491         then
3492                 value="$ans"
3493                 ansexp="$ans"
3494                 break
3495         fi
3496         case "$ans" in
3497         none)
3498                 value=''
3499                 ansexp=''
3500                 case "$none_ok" in
3501                 true) type='';;
3502                 esac
3503                 ;;
3504         *)
3505                 case "$tilde" in
3506                 '') value="$ans"
3507                         ansexp="$ans";;
3508                 *)
3509                         value=`UU/filexp $ans`
3510                         case $? in
3511                         0)
3512                                 if test "$ans" != "$value"; then
3513                                         echo "(That expands to $value on this system.)"
3514                                 fi
3515                                 ;;
3516                         *) value="$ans";;
3517                         esac
3518                         ansexp="$value"
3519                         case "$exp_file" in
3520                         '') value="$ans";;
3521                         esac
3522                         ;;
3523                 esac
3524                 case "$fullpath" in
3525                 true)
3526                         case "$ansexp" in
3527                         /*) value="$ansexp" ;;
3528                         [a-zA-Z]:/*) value="$ansexp" ;;
3529                         *)
3530                                 redo=true
3531                                 case "$already" in
3532                                 true)
3533                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3534                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3535                                         ;;
3536                                 *)
3537                                 echo "Please give a full path name, starting with slash." >&4
3538                                         case "$tilde" in
3539                                         true)
3540                                 echo "Note that using ~name is ok provided it expands well." >&4
3541                                                 already=true
3542                                                 ;;
3543                                         esac
3544                                 esac
3545                                 ;;
3546                         esac
3547                         ;;
3548                 esac
3549                 case "$redo" in
3550                 '')
3551                         case "$type" in
3552                         File)
3553                                 for fp in $gfpth; do
3554                                         if test "X$fp" = X.; then
3555                                             pf="$ansexp"
3556                                         else    
3557                                             pf="$fp/$ansexp"
3558                                         fi
3559                                         if test -f "$pf"; then
3560                                                 type=''
3561                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3562                                         then
3563                                                 echo "($value is not a plain file, but that's ok.)"
3564                                                 type=''
3565                                         fi
3566                                         if test X"$type" = X; then
3567                                             value="$pf"
3568                                             break
3569                                         fi
3570                                 done
3571                                 ;;
3572                         Directory)
3573                                 for fp in $gfpth; do
3574                                         if test "X$fp" = X.; then
3575                                             dir="$ans"
3576                                             direxp="$ansexp"
3577                                         else    
3578                                             dir="$fp/$ansexp"
3579                                             direxp="$fp/$ansexp"
3580                                         fi
3581                                         if test -d "$direxp"; then
3582                                                 type=''
3583                                                 value="$dir"
3584                                                 break
3585                                         fi
3586                                 done
3587                                 ;;
3588                         Locate)
3589                                 if test -d "$ansexp"; then
3590                                         echo "(Looking for $loc_file in directory $value.)"
3591                                         value="$value/$loc_file"
3592                                         ansexp="$ansexp/$loc_file"
3593                                 fi
3594                                 if test -f "$ansexp"; then
3595                                         type=''
3596                                 fi
3597                                 case "$nopath_ok" in
3598                                 true)   case "$value" in
3599                                         */*) ;;
3600                                         *)      echo "Assuming $value will be in people's path."
3601                                                 type=''
3602                                                 ;;
3603                                         esac
3604                                         ;;
3605                                 esac
3606                                 ;;
3607                         esac
3608
3609                         case "$skip" in
3610                         true) type='';
3611                         esac
3612
3613                         case "$type" in
3614                         '') ;;
3615                         *)
3616                                 if test "$fastread" = yes; then
3617                                         dflt=y
3618                                 else
3619                                         dflt=n
3620                                 fi
3621                                 rp="$what $value doesn't exist.  Use that name anyway?"
3622                                 . UU/myread
3623                                 dflt=''
3624                                 case "$ans" in
3625                                 y*) type='';;
3626                                 *) echo " ";;
3627                                 esac
3628                                 ;;
3629                         esac
3630                         ;;
3631                 esac
3632                 ;;
3633         esac
3634 done
3635 cd UU
3636 ans="$value"
3637 rp="$orig_rp"
3638 dflt="$orig_dflt"
3639 rm -f getfile.ok
3640 test "X$gfpthkeep" != Xy && gfpth=""
3641 EOSC
3642
3643 : What should the include directory be ?
3644 echo " "
3645 $echo $n "Hmm...  $c"
3646 dflt='/usr/include'
3647 incpath=''
3648 mips_type=''
3649 if $test -f /bin/mips && /bin/mips; then
3650         echo "Looks like a MIPS system..."
3651         $cat >usr.c <<'EOCP'
3652 #ifdef SYSTYPE_BSD43
3653 /bsd43
3654 #endif
3655 EOCP
3656         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3657                 dflt='/bsd43/usr/include'
3658                 incpath='/bsd43'
3659                 mips_type='BSD 4.3'
3660         else
3661                 mips_type='System V'
3662         fi
3663         $rm -f usr.c usr.out
3664         echo "and you're compiling with the $mips_type compiler and libraries."
3665         xxx_prompt=y
3666         echo "exit 0" >mips
3667 else
3668         echo "Doesn't look like a MIPS system."
3669         xxx_prompt=n
3670         echo "exit 1" >mips
3671 fi
3672 chmod +x mips
3673 $eunicefix mips
3674 case "$usrinc" in
3675 '') ;;
3676 *) dflt="$usrinc";;
3677 esac
3678 case "$xxx_prompt" in
3679 y)      fn=d/
3680         echo " "
3681         rp='Where are the include files you want to use?'
3682         . ./getfile
3683         usrinc="$ans"
3684         ;;
3685 *)      usrinc="$dflt"
3686         ;;
3687 esac
3688
3689 : Set private lib path
3690 case "$plibpth" in
3691 '') if ./mips; then
3692                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3693         fi;;
3694 esac
3695 case "$libpth" in
3696 ' ') dlist='';;
3697 '') dlist="$loclibpth $plibpth $glibpth";;
3698 *) dlist="$libpth";;
3699 esac
3700
3701 : Now check and see which directories actually exist, avoiding duplicates
3702 libpth=''
3703 for xxx in $dlist
3704 do
3705     if $test -d $xxx; then
3706                 case " $libpth " in
3707                 *" $xxx "*) ;;
3708                 *) libpth="$libpth $xxx";;
3709                 esac
3710     fi
3711 done
3712 $cat <<'EOM'
3713
3714 Some systems have incompatible or broken versions of libraries.  Among
3715 the directories listed in the question below, please remove any you
3716 know not to be holding relevant libraries, and add any that are needed.
3717 Say "none" for none.
3718
3719 EOM
3720 case "$libpth" in
3721 '') dflt='none';;
3722 *)
3723         set X $libpth
3724         shift
3725         dflt=${1+"$@"}
3726         ;;
3727 esac
3728 rp="Directories to use for library searches?"
3729 . ./myread
3730 case "$ans" in
3731 none) libpth=' ';;
3732 *) libpth="$ans";;
3733 esac
3734
3735 : compute shared library extension
3736 case "$so" in
3737 '')
3738         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3739                 dflt='sl'
3740         else
3741                 dflt='so'
3742         fi
3743         ;;
3744 *) dflt="$so";;
3745 esac
3746 $cat <<EOM
3747
3748 On some systems, shared libraries may be available.  Answer 'none' if
3749 you want to suppress searching of shared libraries for the remainder
3750 of this configuration.
3751
3752 EOM
3753 rp='What is the file extension used for shared libraries?'
3754 . ./myread
3755 so="$ans"
3756
3757 : Define several unixisms.
3758 : Hints files or command line option can be used to override them.
3759 : The convoluted testing is in case hints files set either the old
3760 : or the new name.
3761 case "$_exe" in
3762 '')     case "$exe_ext" in
3763     '') ;;
3764         *)      _exe="$exe_ext" ;;
3765         esac
3766         ;;
3767 esac
3768 case "$_a" in
3769 '')     case "$lib_ext" in
3770     '') _a='.a';;
3771         *)      _a="$lib_ext" ;;
3772         esac
3773         ;;
3774 esac
3775 case "$_o" in
3776 '') case "$obj_ext" in
3777         '')     _o='.o';;
3778         *)      _o="$obj_ext";;
3779         esac
3780         ;;
3781 esac
3782 case "$p_" in
3783 '') case "$path_sep" in
3784         '')     p_=':';;
3785         *)      p_="$path_sep";;
3786         esac
3787         ;;
3788 esac
3789 exe_ext=$_exe
3790 lib_ext=$_a
3791 obj_ext=$_o
3792 path_sep=$p_
3793
3794 : Which makefile gets called first.  This is used by make depend.
3795 case "$firstmakefile" in
3796 '') firstmakefile='makefile';;
3797 esac
3798
3799 case "$usesocks" in
3800 $define|true|[yY]*)     dflt='y';;
3801 *) dflt='n';;
3802 esac
3803 cat <<EOM
3804
3805 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3806 Configure must be run with -Dusesocks.
3807
3808 If this doesn't make any sense to you, just accept the default '$dflt'.
3809 EOM
3810 rp='Build Perl for SOCKS?'
3811 . ./myread
3812 case "$ans" in
3813 y|Y)    val="$define" ;;     
3814 *)      val="$undef" ;;
3815 esac
3816 set usesocks
3817 eval $setvar
3818
3819 : Looking for optional libraries
3820 echo " "
3821 echo "Checking for optional libraries..." >&4
3822 case "$libs" in
3823 ' '|'') dflt='';;
3824 *) dflt="$libs";;
3825 esac
3826 case "$libswanted" in
3827 '') libswanted='c_s';;
3828 esac
3829 case "$usesocks" in
3830 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3831 esac
3832 libsfound=''
3833 libsfiles=''
3834 libsdirs=''
3835 libspath=''
3836 for thisdir in $libpth $xlibpth; do
3837   test -d $thisdir && libspath="$libspath $thisdir"
3838 done
3839 for thislib in $libswanted; do
3840         for thisdir in $libspath; do
3841             xxx=''
3842             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3843                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3844                 $test -f "$xxx" && eval $libscheck
3845                 $test -f "$xxx" && libstyle=shared
3846             fi
3847             if test ! -f "$xxx"; then
3848                 xxx=$thisdir/lib$thislib.$so
3849                 $test -f "$xxx" && eval $libscheck
3850                 $test -f "$xxx" && libstyle=shared
3851             fi  
3852             if test ! -f "$xxx"; then
3853                 xxx=$thisdir/lib$thislib$_a
3854                 $test -f "$xxx" && eval $libscheck
3855                 $test -f "$xxx" && libstyle=static
3856             fi
3857             if test ! -f "$xxx"; then
3858                 xxx=$thisdir/$thislib$_a
3859                 $test -f "$xxx" && eval $libscheck
3860                 $test -f "$xxx" && libstyle=static
3861             fi
3862             if test ! -f "$xxx"; then
3863                 xxx=$thisdir/lib${thislib}_s$_a
3864                 $test -f "$xxx" && eval $libscheck
3865                 $test -f "$xxx" && libstyle=static
3866                 $test -f "$xxx" && thislib=${thislib}_s
3867             fi
3868             if test ! -f "$xxx"; then
3869                 xxx=$thisdir/Slib$thislib$_a
3870                 $test -f "$xxx" && eval $libscheck
3871                 $test -f "$xxx" && libstyle=static
3872             fi
3873             if $test -f "$xxx"; then
3874                 case "$libstyle" in
3875                 shared) echo "Found -l$thislib (shared)." ;;
3876                 static) echo "Found -l$thislib." ;;
3877                 *)      echo "Found -l$thislib ($libstyle)." ;;
3878                 esac
3879                 case " $dflt " in
3880                 *"-l$thislib "*);;
3881                 *) dflt="$dflt -l$thislib"
3882                    libsfound="$libsfound $xxx"
3883                    yyy=`basename $xxx`
3884                    libsfiles="$libsfiles $yyy"
3885                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3886                    case " $libsdirs " in
3887                    *" $yyy "*) ;;
3888                    *) libsdirs="$libsdirs $yyy" ;;
3889                    esac
3890                    ;;
3891                 esac
3892                 break
3893             fi  
3894         done
3895         if $test ! -f "$xxx"; then
3896             echo "No -l$thislib."
3897         fi
3898 done
3899 set X $dflt
3900 shift
3901 dflt="$*"
3902 case "$libs" in
3903 '') dflt="$dflt";;
3904 *) dflt="$libs";;
3905 esac
3906 case "$dflt" in
3907 ' '|'') dflt='none';;
3908 esac
3909
3910 $cat <<EOM
3911
3912 In order to compile $package on your machine, a number of libraries
3913 are usually needed.  Include any other special libraries here as well.
3914 Say "none" for none.  The default list is almost always right.
3915 EOM
3916
3917 echo " "
3918 rp="What libraries to use?"
3919 . ./myread
3920 case "$ans" in
3921 none) libs=' ';;
3922 *) libs="$ans";;
3923 esac
3924
3925 : determine optimization, if desired, or use for debug flag also
3926 case "$optimize" in
3927 ' '|$undef) dflt='none';;
3928 '') dflt='-O';;
3929 *) dflt="$optimize";;
3930 esac
3931 $cat <<EOH
3932
3933 By default, $package compiles with the -O flag to use the optimizer.
3934 Alternately, you might want to use the symbolic debugger, which uses
3935 the -g flag (on traditional Unix systems).  Either flag can be
3936 specified here.  To use neither flag, specify the word "none".
3937
3938 EOH
3939 rp="What optimizer/debugger flag should be used?"
3940 . ./myread
3941 optimize="$ans"
3942 case "$optimize" in
3943 'none') optimize=" ";;
3944 esac
3945
3946 dflt=''
3947 : We will not override a previous value, but we might want to
3948 : augment a hint file
3949 case "$hint" in
3950 default|recommended)
3951         case "$gccversion" in
3952         1*) dflt='-fpcc-struct-return' ;;
3953         esac
3954         case "$optimize" in
3955         *-g*) dflt="$dflt -DDEBUGGING";;
3956         esac
3957         case "$gccversion" in
3958         2*) if test -d /etc/conf/kconfig.d &&
3959                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3960                 then
3961                         dflt="$dflt -posix"
3962                 fi
3963                 ;;
3964         esac
3965         case "$gccversion" in
3966         1*) ;;
3967         2.[0-8]*) ;;
3968         ?*)     echo " "
3969                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3970                 echo 'int main(void) { return 0; }' > gcctest.c
3971                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3972                         echo "Yes, it does." 2>&1
3973                         case "$ccflags" in
3974                         *strict-aliasing*) 
3975                                 echo "Leaving current flags $ccflags alone." 2>&1
3976                                 ;;
3977                         *) dflt="$dflt -fno-strict-aliasing" ;;
3978                         esac
3979                 else
3980                         echo "Nope, it doesn't, but that's ok." 2>&1
3981                 fi
3982                 ;;
3983         esac
3984         ;;
3985 esac
3986
3987 case "$mips_type" in
3988 *BSD*|'') inclwanted="$locincpth $usrinc";;
3989 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3990 esac
3991 for thisincl in $inclwanted; do
3992         if $test -d $thisincl; then
3993                 if $test x$thisincl != x$usrinc; then
3994                         case "$dflt" in
3995                         *$thisincl*);;
3996                         *) dflt="$dflt -I$thisincl";;
3997                         esac
3998                 fi
3999         fi
4000 done
4001
4002 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4003         xxx=true;
4004 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4005         xxx=true;
4006 else
4007         xxx=false;
4008 fi;
4009 if $xxx; then
4010         case "$dflt" in
4011         *$2*);;
4012         *) dflt="$dflt -D$2";;
4013         esac;
4014 fi'
4015
4016 set signal.h LANGUAGE_C; eval $inctest
4017
4018 case "$usesocks" in
4019 $define)
4020         ccflags="$ccflags -DSOCKS"
4021         ;;
4022 esac
4023
4024 case "$hint" in
4025 default|recommended) dflt="$ccflags $dflt" ;;
4026 *) dflt="$ccflags";;
4027 esac
4028
4029 case "$dflt" in
4030 ''|' ') dflt=none;;
4031 esac
4032 $cat <<EOH
4033
4034 Your C compiler may want other flags.  For this question you should include
4035 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4036 but you should NOT include libraries or ld flags like -lwhatever.  If you
4037 want $package to honor its debug switch, you should include -DDEBUGGING here.
4038 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4039
4040 To use no flags, specify the word "none".
4041
4042 EOH
4043 set X $dflt
4044 shift
4045 dflt=${1+"$@"}
4046 rp="Any additional cc flags?"
4047 . ./myread
4048 case "$ans" in
4049 none) ccflags='';;
4050 *) ccflags="$ans";;
4051 esac
4052
4053 : the following weeds options from ccflags that are of no interest to cpp
4054 cppflags="$ccflags"
4055 case "$gccversion" in
4056 1*) cppflags="$cppflags -D__GNUC__"
4057 esac
4058 case "$mips_type" in
4059 '');;
4060 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4061 esac
4062 case "$cppflags" in
4063 '');;
4064 *)
4065         echo " "
4066         echo "Let me guess what the preprocessor flags are..." >&4
4067         set X $cppflags
4068         shift
4069         cppflags=''
4070         $cat >cpp.c <<'EOM'
4071 #define BLURFL foo
4072
4073 BLURFL xx LFRULB
4074 EOM
4075         previous=''
4076         for flag in $*
4077         do
4078                 case "$flag" in
4079                 -*) ftry="$flag";;
4080                 *) ftry="$previous $flag";;
4081                 esac
4082                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4083                         >cpp1.out 2>/dev/null && \
4084                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4085                         >cpp2.out 2>/dev/null && \
4086                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4087                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4088                 then
4089                         cppflags="$cppflags $ftry"
4090                         previous=''
4091                 else
4092                         previous="$flag"
4093                 fi
4094         done
4095         set X $cppflags
4096         shift
4097         cppflags=${1+"$@"}
4098         case "$cppflags" in
4099         *-*)  echo "They appear to be: $cppflags";;
4100         esac
4101         $rm -f cpp.c cpp?.out
4102         ;;
4103 esac
4104
4105 : flags used in final linking phase
4106 case "$ldflags" in
4107 '') if ./venix; then
4108                 dflt='-i -z'
4109         else
4110                 dflt=''
4111         fi
4112         case "$ccflags" in
4113         *-posix*) dflt="$dflt -posix" ;;
4114         esac
4115         ;;
4116 *) dflt="$ldflags";;
4117 esac
4118
4119 : Try to guess additional flags to pick up local libraries.
4120 for thislibdir in $libpth; do
4121         case " $loclibpth " in
4122         *" $thislibdir "*)
4123                 case "$dflt " in 
4124                 *"-L$thislibdir "*) ;;
4125                 *)  dflt="$dflt -L$thislibdir" ;;
4126                 esac
4127                 ;;
4128         esac
4129 done
4130
4131 case "$dflt" in
4132 '') dflt='none' ;;
4133 esac
4134
4135 $cat <<EOH
4136
4137 Your C linker may need flags.  For this question you should
4138 include -L/whatever and any other flags used by the C linker, but you
4139 should NOT include libraries like -lwhatever.
4140
4141 Make sure you include the appropriate -L/path flags if your C linker
4142 does not normally search all of the directories you specified above,
4143 namely
4144         $libpth
4145 To use no flags, specify the word "none".
4146
4147 EOH
4148
4149 rp="Any additional ld flags (NOT including libraries)?"
4150 . ./myread
4151 case "$ans" in
4152 none) ldflags='';;
4153 *) ldflags="$ans";;
4154 esac
4155 rmlist="$rmlist pdp11"
4156
4157 : coherency check
4158 echo " "
4159 echo "Checking your choice of C compiler and flags for coherency..." >&4
4160 $cat > try.c <<'EOF'
4161 #include <stdio.h>
4162 int main() { printf("Ok\n"); exit(0); }
4163 EOF
4164 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4165 shift
4166 $cat >try.msg <<'EOM'
4167 I've tried to compile and run the following simple program:
4168
4169 EOM
4170 $cat try.c >> try.msg
4171
4172 $cat >> try.msg <<EOM
4173
4174 I used the command:
4175
4176         $*
4177         ./try
4178
4179 and I got the following output:
4180
4181 EOM
4182 dflt=y
4183 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4184         if sh -c './try' >>try.msg 2>&1; then
4185                 xxx=`./try`
4186                 case "$xxx" in
4187                 "Ok") dflt=n ;;
4188                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4189                         case " $libs " in
4190                         *" -lsfio "*)
4191                                 cat >> try.msg <<'EOQS'
4192 If $libs contains -lsfio, and sfio is mis-configured, then it
4193 sometimes (apparently) runs and exits with a 0 status, but with no
4194 output!  It may have to do with sfio's use of _exit vs. exit.
4195
4196 EOQS
4197                                 rp="You have a big problem.  Shall I abort Configure"
4198                                 dflt=y
4199                                 ;;
4200                         esac
4201                         ;;
4202                 esac
4203         else
4204                 echo "The program compiled OK, but exited with status $?." >>try.msg
4205                 rp="You have a problem.  Shall I abort Configure"
4206                 dflt=y
4207         fi
4208 else
4209         echo "I can't compile the test program." >>try.msg
4210         rp="You have a BIG problem.  Shall I abort Configure"
4211         dflt=y
4212 fi
4213 case "$dflt" in
4214 y)
4215         $cat try.msg >&4
4216         case "$knowitall" in
4217         '')
4218                 echo "(The supplied flags or libraries might be incorrect.)"
4219                 ;;
4220         *) dflt=n;;
4221         esac
4222         echo " "
4223         . ./myread
4224         case "$ans" in
4225         n*|N*) ;;
4226         *)      echo "Ok.  Stopping Configure." >&4
4227                 exit 1
4228                 ;;
4229         esac
4230         ;;
4231 n) echo "OK, that should do.";;
4232 esac
4233 $rm -f try try.* core
4234
4235 : define an is-a-typedef? function
4236 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4237 case "$inclist" in
4238 "") inclist="sys/types.h";;
4239 esac;
4240 eval "varval=\$$var";
4241 case "$varval" in
4242 "")
4243         $rm -f temp.c;
4244         for inc in $inclist; do
4245                 echo "#include <$inc>" >>temp.c;
4246         done;
4247         echo "#ifdef $type" >> temp.c;
4248         echo "printf(\"We have $type\");" >> temp.c;
4249         echo "#endif" >> temp.c;
4250         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4251         if $contains $type temp.E >/dev/null 2>&1; then
4252                 eval "$var=\$type";
4253         else
4254                 eval "$var=\$def";
4255         fi;
4256         $rm -f temp.?;;
4257 *) eval "$var=\$varval";;
4258 esac'
4259
4260 : define an is-a-typedef? function that prompts if the type is not available.
4261 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4262 case "$inclist" in
4263 "") inclist="sys/types.h";;
4264 esac;
4265 eval "varval=\$$var";
4266 case "$varval" in
4267 "")
4268         $rm -f temp.c;
4269         for inc in $inclist; do
4270                 echo "#include <$inc>" >>temp.c;
4271         done;
4272         echo "#ifdef $type" >> temp.c;
4273         echo "printf(\"We have $type\");" >> temp.c;
4274         echo "#endif" >> temp.c;
4275         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4276         echo " " ;
4277         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4278         if $contains $type temp.E >/dev/null 2>&1; then
4279                 echo "$type found." >&4;
4280                 eval "$var=\$type";
4281         else
4282                 echo "$type NOT found." >&4;
4283                 dflt="$def";
4284                 . ./myread ;
4285                 eval "$var=\$ans";
4286         fi;
4287         $rm -f temp.?;;
4288 *) eval "$var=\$varval";;
4289 esac'
4290
4291 : define a shorthand compile call
4292 compile='
4293 mc_file=$1;
4294 shift;
4295 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4296 : define a shorthand compile call for compilations that should be ok.
4297 compile_ok='
4298 mc_file=$1;
4299 shift;
4300 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4301
4302 : check for lengths of integral types
4303 echo " "
4304 case "$intsize" in
4305 '')
4306         echo "Checking to see how big your integers are..." >&4
4307         $cat >intsize.c <<'EOCP'
4308 #include <stdio.h>
4309 int main()
4310 {
4311         printf("intsize=%d;\n", (int)sizeof(int));
4312         printf("longsize=%d;\n", (int)sizeof(long));
4313         printf("shortsize=%d;\n", (int)sizeof(short));
4314         exit(0);
4315 }
4316 EOCP
4317         set intsize
4318         if eval $compile_ok && ./intsize > /dev/null; then
4319                 eval `./intsize`
4320                 echo "Your integers are $intsize bytes long."
4321                 echo "Your long integers are $longsize bytes long."
4322                 echo "Your short integers are $shortsize bytes long."
4323         else
4324                 $cat >&4 <<EOM
4325 !
4326 Help! I can't compile and run the intsize test program: please enlighten me!
4327 (This is probably a misconfiguration in your system or libraries, and
4328 you really ought to fix it.  Still, I'll try anyway.)
4329 !
4330 EOM
4331                 dflt=4
4332                 rp="What is the size of an integer (in bytes)?"
4333                 . ./myread
4334                 intsize="$ans"
4335                 dflt=$intsize
4336                 rp="What is the size of a long integer (in bytes)?"
4337                 . ./myread
4338                 longsize="$ans"
4339                 dflt=2
4340                 rp="What is the size of a short integer (in bytes)?"
4341                 . ./myread
4342                 shortsize="$ans"
4343         fi
4344         ;;
4345 esac
4346 $rm -f intsize intsize.*
4347
4348 : see what type lseek is declared as in the kernel
4349 rp="What is the type used for lseek's offset on this system?"
4350 set off_t lseektype long stdio.h sys/types.h
4351 eval $typedef_ask
4352
4353 echo " "
4354 echo "Checking to see how big your file offsets are..." >&4
4355 $cat >try.c <<EOCP
4356 #include <sys/types.h>
4357 #include <stdio.h>
4358 int main()
4359 {
4360     printf("%d\n", (int)sizeof($lseektype));
4361     return(0); 
4362 }
4363 EOCP
4364 set try
4365 if eval $compile_ok; then
4366         lseeksize=`./try`
4367         echo "Your file offsets are $lseeksize bytes long."
4368 else
4369         dflt=$longsize
4370         echo " "
4371         echo "(I can't seem to compile the test program.  Guessing...)"
4372         rp="What is the size of your file offsets (in bytes)?"
4373         . ./myread
4374         lseeksize="$ans"
4375 fi
4376 $rm -f try.c try
4377
4378 : see what type file positions are declared as in the library
4379 rp="What is the type for file position used by fsetpos()?"
4380 set fpos_t fpostype long stdio.h sys/types.h
4381 eval $typedef_ask
4382
4383 echo " "
4384 case "$fpostype" in
4385 *_t) zzz="$fpostype"    ;;
4386 *)   zzz="fpos_t"       ;;
4387 esac
4388 echo "Checking the size of $zzz..." >&4 
4389 cat > try.c <<EOCP
4390 #include <sys/types.h>
4391 #include <stdio.h>
4392 int main() {
4393     printf("%d\n", (int)sizeof($fpostype));
4394     exit(0);
4395 }
4396 EOCP
4397 set try
4398 if eval $compile_ok; then
4399         yyy=`./try`
4400         case "$yyy" in
4401         '')     fpossize=4
4402                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4403                 ;;
4404         *)      fpossize=$yyy
4405                 echo "Your $zzz is $fpossize bytes long."
4406                 ;;
4407         esac
4408 else
4409         dflt="$longsize"
4410         echo " " >&4
4411         echo "(I can't compile the test program.  Guessing...)" >&4
4412         rp="What is the size of your file positions (in bytes)?"
4413         . ./myread
4414         fpossize="$ans"
4415 fi
4416
4417
4418
4419 # Backward compatibility (uselfs is deprecated).
4420 case "$uselfs" in
4421 "$define"|true|[yY]*)
4422         cat <<EOM >&4
4423
4424 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4425 EOM
4426         uselargefiles="$define"
4427         ;;
4428 esac                          
4429
4430 case "$lseeksize:$fpossize" in
4431 8:8) cat <<EOM
4432
4433 You can have files larger than 2 gigabytes.
4434 EOM
4435    val="$define" ;;
4436 *)    case "$uselargefiles" in
4437    "$undef"|false|[nN]*) dflt='n' ;;
4438    *)   dflt='y' ;;
4439    esac
4440    cat <<EOM
4441
4442 Perl can be built to understand large files (files larger than 2 gigabytes)
4443 on some systems.  To do so, Configure can be run with -Duselargefiles.
4444
4445 If this doesn't make any sense to you, just accept the default '$dflt'.
4446 EOM
4447    rp='Try to understand large files, if available?'
4448    . ./myread
4449    case "$ans" in
4450    y|Y)         val="$define" ;;
4451    *)           val="$undef"  ;;
4452    esac
4453    ;;
4454 esac
4455 set uselargefiles
4456 eval $setvar
4457 case "$uselargefiles" in
4458 "$define")
4459 : Look for a hint-file generated 'call-back-unit'.  If the
4460 : user has specified that a large files perl is to be built,
4461 : we may need to set or change some other defaults.
4462         if $test -f uselargefiles.cbu; then
4463                 echo "Your platform has some specific hints for large file builds, using them..."
4464                 . ./uselargefiles.cbu
4465                 echo " "
4466                 echo "Rechecking to see how big your file offsets are..." >&4
4467                 $cat >try.c <<EOCP
4468 #include <sys/types.h>
4469 #include <stdio.h>
4470 int main()
4471 {
4472     printf("%d\n", (int)sizeof($lseektype));
4473     return(0); 
4474 }
4475 EOCP
4476                 set try
4477                 if eval $compile_ok; then
4478                         lseeksize=`./try`
4479                         $echo "Your file offsets are now $lseeksize bytes long."
4480                 else
4481                         dflt="$lseeksize"
4482                         echo " "
4483                         echo "(I can't seem to compile the test program.  Guessing...)"
4484                         rp="What is the size of your file offsets (in bytes)?"
4485                         . ./myread
4486                         lseeksize="$ans"
4487                 fi
4488                 case "$fpostype" in
4489                 *_t) zzz="$fpostype"    ;;
4490                 *)   zzz="fpos_t"       ;;
4491                 esac
4492                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4493                 $cat > try.c <<EOCP
4494 #include <sys/types.h>
4495 #include <stdio.h>
4496 int main() {
4497     printf("%d\n", (int)sizeof($fpostype));
4498     exit(0);
4499 }
4500 EOCP
4501                 set try
4502                 if eval $compile_ok; then
4503                         yyy=`./try`
4504                         dflt="$lseeksize"
4505                         case "$yyy" in
4506                         '')     echo " "
4507                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4508                                 ;;
4509                         *)      fpossize=$yyy
4510                                 echo " $fpossize bytes." >&4
4511                                 ;;
4512                         esac
4513                 else
4514                         dflt="$fpossize"
4515                         echo " "
4516                         echo "(I can't compile the test program.  Guessing...)" >&4
4517                         rp="What is the size of your file positions (in bytes)?"
4518                         . ./myread
4519                         fpossize="$ans"
4520                 fi
4521                 $rm -f try.c try
4522         fi
4523         ;;
4524 esac
4525
4526
4527 case "$usemorebits" in
4528 "$define"|true|[yY]*)
4529         use64bitint="$define"
4530         uselongdouble="$define"
4531         usemorebits="$define"
4532         ;;
4533 *)      usemorebits="$undef"
4534         ;;
4535 esac
4536
4537
4538 case "$uselonglong" in
4539 "$define"|true|[yY]*)
4540         cat <<EOM >&4
4541
4542 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4543 EOM
4544         use64bitint="$define"
4545         ;;
4546 esac                          
4547 case "$use64bits" in
4548 "$define"|true|[yY]*)
4549         cat <<EOM >&4
4550
4551 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4552 EOM
4553         use64bitint="$define"
4554         ;;
4555 esac                          
4556 case "$use64bitints" in
4557 "$define"|true|[yY]*)
4558         cat <<EOM >&4
4559
4560 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4561 EOM
4562         use64bitint="$define"
4563         ;;
4564 esac                          
4565 case "$use64bitsint" in
4566 "$define"|true|[yY]*)
4567         cat <<EOM >&4
4568
4569 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4570 EOM
4571         use64bitint="$define"
4572         ;;
4573 esac                          
4574 case "$uselonglongs" in
4575 "$define"|true|[yY]*)
4576         cat <<EOM >&4
4577
4578 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4579 EOM
4580         use64bitint="$define"
4581         ;;
4582 esac                          
4583 case "$use64bitsall" in
4584 "$define"|true|[yY]*)
4585         cat <<EOM >&4
4586
4587 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4588 EOM
4589         use64bitall="$define"
4590         ;;
4591 esac                          
4592
4593 case "$ccflags" in
4594 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4595 esac
4596 case "$use64bitall" in
4597 "$define"|true|[yY]*) use64bitint="$define" ;;
4598 esac
4599
4600 case "$longsize" in
4601 8) cat <<EOM
4602
4603 You have natively 64-bit long integers.
4604 EOM
4605    val="$define"
4606    ;;
4607 *) case "$use64bitint" in
4608    "$define"|true|[yY]*) dflt='y';;
4609    *) dflt='n';;
4610    esac
4611    cat <<EOM
4612
4613 Perl can be built to take advantage of 64-bit integer types
4614 on some systems.  To do so, Configure can be run with -Duse64bitint.
4615 Choosing this option will most probably introduce binary incompatibilities.
4616
4617 If this doesn't make any sense to you, just accept the default '$dflt'.
4618 EOM
4619    rp='Try to use 64-bit integers, if available?'
4620    . ./myread
4621    case "$ans" in
4622    [yY]*) val="$define" ;;
4623    *)     val="$undef"  ;;
4624    esac
4625    ;;
4626 esac
4627 set use64bitint
4628 eval $setvar
4629
4630 case "$use64bitall" in
4631 "$define"|true|[yY]*) dflt='y' ;;
4632 *) case "$longsize" in
4633    8) dflt='y' ;;
4634    *) dflt='n' ;;
4635    esac
4636    ;;
4637 esac    
4638 cat <<EOM
4639
4640 You may also choose to try maximal 64-bitness.  It means using as much
4641 64-bitness as possible on the platform.  This in turn means even more
4642 binary incompatibilities.  On the other hand, your platform may not
4643 have any more 64-bitness available than what you already have chosen.
4644
4645 If this doesn't make any sense to you, just accept the default '$dflt'.
4646 EOM
4647 rp='Try to use maximal 64-bit support, if available?'
4648 . ./myread
4649 case "$ans" in
4650 [yY]*) val="$define" ;;
4651 *)     val="$undef"  ;;
4652 esac
4653 set use64bitall
4654 eval $setvar
4655 case "$use64bitall" in
4656 "$define")
4657         case "$use64bitint" in
4658         "$undef")
4659                 cat <<EOM
4660
4661 Since you have chosen a maximally 64-bit build, I'm also turning on
4662 the use of 64-bit integers.
4663 EOM
4664                 use64bitint="$define" ;;
4665         esac
4666         ;;
4667 esac
4668
4669 case "$use64bitint" in
4670 "$define"|true|[yY]*)
4671 : Look for a hint-file generated 'call-back-unit'.  If the
4672 : user has specified that a 64-bit perl is to be built,
4673 : we may need to set or change some other defaults.
4674         if $test -f use64bitint.cbu; then
4675                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4676                 . ./use64bitint.cbu
4677         fi
4678         case "$longsize" in
4679         4) case "$archname64" in
4680            '') archname64=64int ;;
4681            esac
4682            ;;
4683         esac
4684         ;;
4685 esac
4686
4687 case "$use64bitall" in
4688 "$define"|true|[yY]*)
4689 : Look for a hint-file generated 'call-back-unit'.  If the
4690 : user has specified that a maximally 64-bit perl is to be built,
4691 : we may need to set or change some other defaults.
4692         if $test -f use64bitall.cbu; then
4693                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4694                 . ./use64bitall.cbu
4695         fi
4696         case "$longsize" in
4697         4) case "$archname64" in
4698            ''|64int) archname64=64all ;;
4699            esac
4700            ;;
4701         esac
4702         ;;
4703 esac
4704
4705 : determine the architecture name
4706 echo " "
4707 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4708         tarch=`arch`"-$osname"
4709 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4710         if uname -m > tmparch 2>&1 ; then
4711                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4712                         -e 's/$/'"-$osname/" tmparch`
4713         else
4714                 tarch="$osname"
4715         fi
4716         $rm -f tmparch
4717 else
4718         tarch="$osname"
4719 fi
4720 case "$myarchname" in
4721 ''|"$tarch") ;;
4722 *)
4723         echo "(Your architecture name used to be $myarchname.)"
4724         archname=''
4725         ;;
4726 esac
4727 myarchname="$tarch"
4728 case "$archname" in
4729 '') dflt="$tarch";;
4730 *) dflt="$archname";;
4731 esac
4732 rp='What is your architecture name'
4733 . ./myread
4734 archname="$ans"
4735 case "$usethreads" in
4736 $define)
4737         echo "Threads selected." >&4
4738         case "$archname" in
4739         *-thread*) echo "...and architecture name already has -thread." >&4
4740                 ;;
4741         *)      archname="$archname-thread"
4742                 echo "...setting architecture name to $archname." >&4
4743                 ;;
4744         esac
4745         ;;
4746 esac
4747 case "$usemultiplicity" in
4748 $define)
4749         echo "Multiplicity selected." >&4
4750         case "$archname" in
4751         *-multi*) echo "...and architecture name already has -multi." >&4
4752                 ;;
4753         *)      archname="$archname-multi"
4754                 echo "...setting architecture name to $archname." >&4
4755                 ;;
4756         esac
4757         ;;
4758 esac
4759 case "$use64bitint" in
4760 $define)
4761         case "$archname64" in
4762         '')
4763                 ;;
4764         *)
4765                 case "$archname" in
4766                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4767                         ;;
4768                 *)      archname="$archname-$archname64"
4769                         echo "...setting architecture name to $archname." >&4
4770                         ;;
4771                 esac
4772                 ;;
4773         esac
4774 esac
4775
4776 : determine root of directory hierarchy where package will be installed.
4777 case "$prefix" in
4778 '')
4779         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4780         ;;
4781 *)
4782         dflt="$prefix"
4783         ;;
4784 esac
4785 $cat <<EOM
4786
4787 By default, $package will be installed in $dflt/bin, manual pages
4788 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4789 installation directories. Typically this is something like /usr/local.
4790 If you wish to have binaries under /usr/bin but other parts of the
4791 installation under /usr/local, that's ok: you will be prompted
4792 separately for each of the installation directories, the prefix being
4793 only used to set the defaults.
4794
4795 EOM
4796 fn=d~
4797 rp='Installation prefix to use?'
4798 . ./getfile
4799 oldprefix=''
4800 case "$prefix" in
4801 '') ;;
4802 *)
4803         case "$ans" in
4804         "$prefix") ;;
4805         *) oldprefix="$prefix";;
4806         esac
4807         ;;
4808 esac
4809 prefix="$ans"
4810 prefixexp="$ansexp"
4811
4812 : is AFS running?
4813 echo " "
4814 case "$afs" in
4815 $define|true)   afs=true ;;
4816 $undef|false)   afs=false ;;
4817 *)      if test -d /afs; then
4818                 afs=true
4819         else
4820                 afs=false
4821         fi
4822         ;;
4823 esac
4824 if $afs; then
4825         echo "AFS may be running... I'll be extra cautious then..." >&4
4826 else
4827         echo "AFS does not seem to be running..." >&4
4828 fi
4829
4830 : determine installation prefix for where package is to be installed.
4831 if $afs; then 
4832 $cat <<EOM
4833
4834 Since you are running AFS, I need to distinguish the directory in which
4835 files will reside from the directory in which they are installed (and from
4836 which they are presumably copied to the former directory by occult means).
4837
4838 EOM
4839         case "$installprefix" in
4840         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4841         *) dflt="$installprefix";;
4842         esac
4843 else
4844 $cat <<EOM
4845
4846 In some special cases, particularly when building $package for distribution,
4847 it is convenient to distinguish between the directory in which files should 
4848 be installed from the directory ($prefix) in which they 
4849 will eventually reside.  For most users, these two directories are the same.
4850
4851 EOM
4852         case "$installprefix" in
4853         '') dflt=$prefix ;;
4854         *) dflt=$installprefix;;
4855         esac
4856 fi
4857 fn=d~
4858 rp='What installation prefix should I use for installing files?'
4859 . ./getfile
4860 installprefix="$ans"
4861 installprefixexp="$ansexp"
4862
4863 : set the prefixit variable, to compute a suitable default value
4864 prefixit='case "$3" in
4865 ""|none)
4866         case "$oldprefix" in
4867         "") eval "$1=\"\$$2\"";;
4868         *)
4869                 case "$3" in
4870                 "") eval "$1=";;
4871                 none)
4872                         eval "tp=\"\$$2\"";
4873                         case "$tp" in
4874                         ""|" ") eval "$1=\"\$$2\"";;
4875                         *) eval "$1=";;
4876                         esac;;
4877                 esac;;
4878         esac;;
4879 *)
4880         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4881         case "$tp" in
4882         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4883         /*-$oldprefix/*|\~*-$oldprefix/*)
4884                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4885         *) eval "$1=\"\$$2\"";;
4886         esac;;
4887 esac'
4888
4889
4890 : get the patchlevel
4891 echo " "
4892 echo "Getting the current patchlevel..." >&4
4893 if $test -r $rsrc/patchlevel.h;then
4894         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4895         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4896         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4897         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4898         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4899         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4900 else
4901         revision=0
4902         patchlevel=0
4903         subversion=0
4904         api_revision=0
4905         api_version=0
4906         api_subversion=0
4907 fi
4908 $echo $n "(You have $package revision $revision" $c
4909 $echo $n " patchlevel $patchlevel" $c
4910 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4911 echo ".)"
4912 case "$osname" in
4913 dos|vms)
4914         : XXX Should be a Configure test for double-dots in filenames.
4915         version=`echo $revision $patchlevel $subversion | \
4916                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4917         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4918                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4919         ;;
4920 *)
4921         version=`echo $revision $patchlevel $subversion | \
4922                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4923         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4924                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4925         ;;
4926 esac
4927 : Special case the 5.005_xx maintenance series, which used 5.005
4928 : without any subversion label as a subdirectory in $sitelib
4929 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4930         api_versionstring='5.005'
4931 fi
4932
4933 : determine installation style
4934 : For now, try to deduce it from prefix unless it is already set.
4935 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4936 case "$installstyle" in
4937 '')     case "$prefix" in
4938                 *perl*) dflt='lib';;
4939                 *) dflt='lib/perl5' ;;
4940         esac
4941         ;;
4942 *)      dflt="$installstyle" ;;
4943 esac
4944 : Probably not worth prompting for this since we prompt for all
4945 : the directories individually, and the prompt would be too long and
4946 : confusing anyway.
4947 installstyle=$dflt
4948
4949 : determine where private library files go
4950 : Usual default is /usr/local/lib/perl5/$version.
4951 : Also allow things like /opt/perl/lib/$version, since 
4952 : /opt/perl/lib/perl5... would be redundant.
4953 : The default "style" setting is made in installstyle.U
4954 case "$installstyle" in
4955 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4956 *)       set dflt privlib lib/$version ;;
4957 esac
4958 eval $prefixit
4959 $cat <<EOM
4960
4961 There are some auxiliary files for $package that need to be put into a
4962 private library directory that is accessible by everyone.
4963
4964 EOM
4965 fn=d~+
4966 rp='Pathname where the private library files will reside?'
4967 . ./getfile
4968 privlib="$ans"
4969 privlibexp="$ansexp"
4970 : Change installation prefix, if necessary.
4971 if $test X"$prefix" != X"$installprefix"; then
4972         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4973 else
4974         installprivlib="$privlibexp"
4975 fi
4976
4977 : set the prefixup variable, to restore leading tilda escape
4978 prefixup='case "$prefixexp" in
4979 "$prefix") ;;
4980 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4981 esac'
4982
4983 : determine where public architecture dependent libraries go
4984 set archlib archlib
4985 eval $prefixit
4986 : privlib default is /usr/local/lib/$package/$version
4987 : archlib default is /usr/local/lib/$package/$version/$archname
4988 : privlib may have an optional trailing /share.
4989 tdflt=`echo $privlib | $sed 's,/share$,,'`
4990 tdflt=$tdflt/$archname
4991 case "$archlib" in
4992 '')     dflt=$tdflt
4993         ;;
4994 *)      dflt="$archlib"
4995     ;;
4996 esac
4997 $cat <<EOM
4998
4999 $spackage contains architecture-dependent library files.  If you are
5000 sharing libraries in a heterogeneous environment, you might store
5001 these files in a separate location.  Otherwise, you can just include
5002 them with the rest of the public library files.
5003
5004 EOM
5005 fn=d+~
5006 rp='Where do you want to put the public architecture-dependent libraries?'
5007 . ./getfile
5008 archlib="$ans"
5009 archlibexp="$ansexp"
5010 if $test X"$archlib" = X"$privlib"; then
5011         d_archlib="$undef"
5012 else
5013         d_archlib="$define"
5014 fi
5015 : Change installation prefix, if necessary.
5016 if $test X"$prefix" != X"$installprefix"; then
5017         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5018 else
5019         installarchlib="$archlibexp"
5020 fi
5021
5022
5023 : Binary compatibility with 5.005 is not possible for builds
5024 : with advanced features
5025 case "$usethreads$usemultiplicity" in
5026 *define*)
5027         bincompat5005="$undef"
5028         d_bincompat5005="$undef"
5029         ;;
5030 *)      $cat <<EOM
5031
5032 This version of Perl can be compiled for binary compatibility with 5.005.
5033 If you decide to do so, you will be able to continue using most of the
5034 extensions that were compiled for Perl 5.005.
5035
5036 EOM
5037         case "$bincompat5005$d_bincompat5005" in
5038         *"$undef"*) dflt=n ;;
5039         *) dflt=y ;;
5040         esac
5041         rp='Binary compatibility with Perl 5.005?'
5042         . ./myread
5043         case "$ans" in
5044         y*) val="$define" ;;
5045         *)  val="$undef" ;;
5046         esac
5047         set d_bincompat5005
5048         eval $setvar
5049         case "$d_bincompat5005" in
5050         "$define")
5051                 bincompat5005="$define"
5052                 ;;
5053         *)      bincompat5005="$undef"
5054                 d_bincompat5005="$undef"
5055                 ;;
5056         esac
5057         ;;
5058 esac
5059
5060
5061 : see if setuid scripts can be secure
5062 $cat <<EOM
5063
5064 Some kernels have a bug that prevents setuid #! scripts from being
5065 secure.  Some sites have disabled setuid #! scripts because of this.
5066
5067 First let's decide if your kernel supports secure setuid #! scripts.
5068 (If setuid #! scripts would be secure but have been disabled anyway,
5069 don't say that they are secure if asked.)
5070
5071 EOM
5072
5073 val="$undef"
5074 if $test -d /dev/fd; then
5075         echo "#!$ls" >reflect
5076         chmod +x,u+s reflect
5077         ./reflect >flect 2>&1
5078         if $contains "/dev/fd" flect >/dev/null; then
5079                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5080                 val="$define"
5081         else
5082                 $cat <<EOM
5083 If you are not sure if they are secure, I can check but I'll need a
5084 username and password different from the one you are using right now.
5085 If you don't have such a username or don't want me to test, simply
5086 enter 'none'.
5087
5088 EOM
5089                 rp='Other username to test security of setuid scripts with?'
5090                 dflt='none'
5091                 . ./myread
5092                 case "$ans" in
5093                 n|none)
5094                         case "$d_suidsafe" in
5095                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5096                                 dflt=n;;
5097                         "$undef")
5098                                 echo "Well, the $hint value is *not* secure." >&4
5099                                 dflt=n;;
5100                         *)      echo "Well, the $hint value *is* secure." >&4
5101                                 dflt=y;;
5102                         esac
5103                         ;;
5104                 *)
5105                         $rm -f reflect flect
5106                         echo "#!$ls" >reflect
5107                         chmod +x,u+s reflect
5108                         echo >flect
5109                         chmod a+w flect
5110                         echo '"su" will (probably) prompt you for '"$ans's password."
5111                         su $ans -c './reflect >flect'
5112                         if $contains "/dev/fd" flect >/dev/null; then
5113                                 echo "Okay, it looks like setuid scripts are secure." >&4
5114                                 dflt=y
5115                         else
5116                                 echo "I don't think setuid scripts are secure." >&4
5117                                 dflt=n
5118                         fi
5119                         ;;
5120                 esac
5121                 rp='Does your kernel have *secure* setuid scripts?'
5122                 . ./myread
5123                 case "$ans" in
5124                 [yY]*)  val="$define";;
5125                 *)      val="$undef";;
5126                 esac
5127         fi
5128 else
5129         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5130         echo "(That's for file descriptors, not floppy disks.)"
5131         val="$undef"
5132 fi
5133 set d_suidsafe
5134 eval $setvar
5135
5136 $rm -f reflect flect
5137
5138 : now see if they want to do setuid emulation
5139 echo " "
5140 val="$undef"
5141 case "$d_suidsafe" in
5142 "$define")
5143         val="$undef"
5144         echo "No need to emulate SUID scripts since they are secure here." >& 4
5145         ;;
5146 *)
5147         $cat <<EOM
5148 Some systems have disabled setuid scripts, especially systems where
5149 setuid scripts cannot be secure.  On systems where setuid scripts have
5150 been disabled, the setuid/setgid bits on scripts are currently
5151 useless.  It is possible for $package to detect those bits and emulate
5152 setuid/setgid in a secure fashion.  This emulation will only work if
5153 setuid scripts have been disabled in your kernel.
5154
5155 EOM
5156         case "$d_dosuid" in
5157         "$define") dflt=y ;;
5158         *) dflt=n ;;
5159         esac
5160         rp="Do you want to do setuid/setgid emulation?"
5161         . ./myread
5162         case "$ans" in
5163         [yY]*)  val="$define";;
5164         *)      val="$undef";;
5165         esac
5166         ;;
5167 esac
5168 set d_dosuid
5169 eval $setvar
5170
5171 : determine filename position in cpp output
5172 echo " "
5173 echo "Computing filename position in cpp output for #include directives..." >&4
5174 echo '#include <stdio.h>' > foo.c
5175 $cat >fieldn <<EOF
5176 $startsh
5177 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5178 $grep '^[       ]*#.*stdio\.h' | \
5179 while read cline; do
5180         pos=1
5181         set \$cline
5182         while $test \$# -gt 0; do
5183                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5184                         echo "\$pos"
5185                         exit 0
5186                 fi
5187                 shift
5188                 pos=\`expr \$pos + 1\`
5189         done
5190 done
5191 EOF
5192 chmod +x fieldn
5193 fieldn=`./fieldn`
5194 $rm -f foo.c fieldn
5195 case $fieldn in
5196 '') pos='???';;
5197 1) pos=first;;
5198 2) pos=second;;
5199 3) pos=third;;
5200 *) pos="${fieldn}th";;
5201 esac
5202 echo "Your cpp writes the filename in the $pos field of the line."
5203
5204 : locate header file
5205 $cat >findhdr <<EOF
5206 $startsh
5207 wanted=\$1
5208 name=''
5209 for usrincdir in $usrinc
5210 do
5211         if test -f \$usrincdir/\$wanted; then
5212                 echo "\$usrincdir/\$wanted"
5213                 exit 0
5214         fi
5215 done
5216 awkprg='{ print \$$fieldn }'
5217 echo "#include <\$wanted>" > foo\$\$.c
5218 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5219 $grep "^[       ]*#.*\$wanted" | \
5220 while read cline; do
5221         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5222         case "\$name" in
5223         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5224         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5225         *) exit 2;;
5226         esac;
5227 done;
5228 #
5229 # status = 0: grep returned 0 lines, case statement not executed
5230 # status = 1: headerfile found
5231 # status = 2: while loop executed, no headerfile found
5232 #
5233 status=\$?
5234 $rm -f foo\$\$.c;
5235 if test \$status -eq 1; then
5236         exit 0;
5237 fi
5238 exit 1
5239 EOF
5240 chmod +x findhdr
5241
5242 : define an alternate in-header-list? function
5243 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5244 cont=true; xxf="echo \"<\$1> found.\" >&4";
5245 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5246 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5247 esac;
5248 case $# in 4) instead=instead;; *) instead="at last";; esac;
5249 while $test "$cont"; do
5250         xxx=`./findhdr $1`
5251         var=$2; eval "was=\$$2";
5252         if $test "$xxx" && $test -r "$xxx";
5253         then eval $xxf;
5254         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5255                 cont="";
5256         else eval $xxnf;
5257         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5258         set $yyy; shift; shift; yyy=$@;
5259         case $# in 0) cont="";;
5260         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5261                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5262         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5263                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5264         esac;
5265 done;
5266 while $test "$yyy";
5267 do set $yyy; var=$2; eval "was=\$$2";
5268         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5269         set $yyy; shift; shift; yyy=$@;
5270 done'
5271
5272 : see if this is a malloc.h system
5273 set malloc.h i_malloc
5274 eval $inhdr
5275
5276 : see if stdlib is available
5277 set stdlib.h i_stdlib
5278 eval $inhdr
5279
5280 : determine which malloc to compile in
5281 echo " "
5282 case "$usemymalloc" in
5283 ''|[yY]*|true|$define)  dflt='y' ;;
5284 *)      dflt='n' ;;
5285 esac
5286 rp="Do you wish to attempt to use the malloc that comes with $package?"
5287 . ./myread
5288 usemymalloc="$ans"
5289 case "$ans" in
5290 y*|true)
5291         usemymalloc='y'
5292         mallocsrc='malloc.c'
5293         mallocobj="malloc$_o"
5294         d_mymalloc="$define"
5295         case "$libs" in
5296         *-lmalloc*)
5297                 : Remove malloc from list of libraries to use
5298                 echo "Removing unneeded -lmalloc from library list" >&4
5299                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5300                 shift
5301                 libs="$*"
5302                 echo "libs = $libs" >&4
5303                 ;;
5304         esac
5305         ;;
5306 *)
5307         usemymalloc='n'
5308         mallocsrc=''
5309         mallocobj=''
5310         d_mymalloc="$undef"
5311         ;;
5312 esac
5313
5314 : compute the return types of malloc and free
5315 echo " "
5316 $cat >malloc.c <<END
5317 #$i_malloc I_MALLOC
5318 #$i_stdlib I_STDLIB
5319 #include <stdio.h>
5320 #include <sys/types.h>
5321 #ifdef I_MALLOC
5322 #include <malloc.h>
5323 #endif
5324 #ifdef I_STDLIB
5325 #include <stdlib.h>
5326 #endif
5327 #ifdef TRY_MALLOC
5328 void *malloc();
5329 #endif
5330 #ifdef TRY_FREE
5331 void free();
5332 #endif
5333 END
5334 case "$malloctype" in
5335 '')
5336         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5337                 malloctype='void *'
5338         else
5339                 malloctype='char *'
5340         fi
5341         ;;
5342 esac
5343 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5344
5345 case "$freetype" in
5346 '')
5347         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5348                 freetype='void'
5349         else
5350                 freetype='int'
5351         fi
5352         ;;
5353 esac
5354 echo "Your system uses $freetype free(), it would seem." >&4
5355 $rm -f malloc.[co]
5356 $cat <<EOM
5357
5358 After $package is installed, you may wish to install various
5359 add-on modules and utilities.  Typically, these add-ons will
5360 be installed under $prefix with the rest
5361 of this package.  However, you may wish to install such add-ons
5362 elsewhere under a different prefix.
5363
5364 If you do not wish to put everything under a single prefix, that's
5365 ok.  You will be prompted for the individual locations; this siteprefix
5366 is only used to suggest the defaults.
5367
5368 The default should be fine for most people.
5369
5370 EOM
5371 fn=d~+
5372 rp='Installation prefix to use for add-on modules and utilities?'
5373 : XXX Here might be another good place for an installstyle setting.
5374 case "$siteprefix" in
5375 '') dflt=$prefix ;;
5376 *)  dflt=$siteprefix ;;
5377 esac
5378 . ./getfile
5379 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5380 oldsiteprefix=''
5381 case "$siteprefix" in
5382 '') ;;
5383 *)      case "$ans" in
5384         "$prefix") ;;
5385         *) oldsiteprefix="$prefix";;
5386         esac
5387         ;;
5388 esac
5389 siteprefix="$ans"
5390 siteprefixexp="$ansexp"
5391
5392 : determine where site specific libraries go.
5393 : Usual default is /usr/local/lib/perl5/site_perl/$version
5394 : The default "style" setting is made in installstyle.U
5395 : XXX No longer works with Prefixit stuff.
5396 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5397 case "$sitelib" in
5398 '') case "$installstyle" in
5399         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5400         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5401         esac
5402         ;;
5403 *)      dflt="$sitelib"
5404         ;;
5405 esac
5406 $cat <<EOM
5407
5408 The installation process will create a directory for
5409 site-specific extensions and modules.  Most users find it convenient
5410 to place all site-specific files in this directory rather than in the
5411 main distribution directory.
5412
5413 EOM
5414 fn=d~+
5415 rp='Pathname for the site-specific library files?'
5416 . ./getfile
5417 sitelib="$ans"
5418 sitelibexp="$ansexp"
5419 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5420 : Change installation prefix, if necessary.
5421 if $test X"$prefix" != X"$installprefix"; then
5422         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5423 else
5424         installsitelib="$sitelibexp"
5425 fi
5426
5427 : determine where site specific architecture-dependent libraries go.
5428 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
5429 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5430 : sitelib may have an optional trailing /share.
5431 case "$sitearch" in
5432 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
5433         dflt="$dflt/$archname"
5434         ;;
5435 *)      dflt="$sitearch"
5436         ;;
5437 esac
5438 set sitearch sitearch none
5439 eval $prefixit
5440 $cat <<EOM
5441
5442 The installation process will also create a directory for
5443 architecture-dependent site-specific extensions and modules.
5444
5445 EOM
5446 fn=d~+
5447 rp='Pathname for the site-specific architecture-dependent library files?'
5448 . ./getfile
5449 sitearch="$ans"
5450 sitearchexp="$ansexp"
5451 : Change installation prefix, if necessary.
5452 if $test X"$prefix" != X"$installprefix"; then
5453         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5454 else
5455         installsitearch="$sitearchexp"
5456 fi
5457
5458 $cat <<EOM
5459
5460 The installation process will also create a directory for
5461 vendor-supplied add-ons.  Vendors who supply perl with their system
5462 may find it convenient to place all vendor-supplied files in this
5463 directory rather than in the main distribution directory.  This will
5464 ease upgrades between binary-compatible maintenance versions of perl.
5465
5466 Of course you may also use these directories in whatever way you see
5467 fit.  For example, you might use them to access modules shared over a
5468 company-wide network.
5469
5470 The default answer should be fine for most people.
5471 This causes further questions about vendor add-ons to be skipped
5472 and no vendor-specific directories will be configured for perl.
5473
5474 EOM
5475 rp='Do you want to configure vendor-specific add-on directories?'
5476 case "$usevendorprefix" in
5477 define|true|[yY]*) dflt=y ;;
5478 *)      : User may have set vendorprefix directly on Configure command line.
5479         case "$vendorprefix" in
5480         ''|' ') dflt=n ;;
5481         *)      dflt=y ;;
5482         esac
5483         ;;
5484 esac
5485 . ./myread
5486 case "$ans" in
5487 [yY]*)  fn=d~+
5488         rp='Installation prefix to use for vendor-supplied add-ons?'
5489         case "$vendorprefix" in
5490         '') dflt='' ;;
5491         *)  dflt=$vendorprefix ;;
5492         esac
5493         . ./getfile
5494         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5495         oldvendorprefix=''
5496         case "$vendorprefix" in
5497         '') ;;
5498         *)      case "$ans" in
5499                 "$prefix") ;;
5500                 *) oldvendorprefix="$prefix";;
5501                 esac
5502                 ;;
5503         esac
5504         usevendorprefix="$define"
5505         vendorprefix="$ans"
5506         vendorprefixexp="$ansexp"
5507         ;;
5508 *)      usevendorprefix="$undef"
5509         vendorprefix=''
5510         vendorprefixexp=''
5511         ;;
5512 esac
5513
5514 case "$vendorprefix" in
5515 '')     d_vendorlib="$undef"
5516         vendorlib=''
5517         vendorlibexp=''
5518         ;;
5519 *)      d_vendorlib="$define"
5520         : determine where vendor-supplied modules go.
5521         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5522         case "$vendorlib" in
5523         '')
5524                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5525                 case "$installstyle" in
5526                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5527                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5528                 esac
5529                 ;;
5530         *)      dflt="$vendorlib"
5531                 ;;
5532         esac
5533         fn=d~+
5534         rp='Pathname for the vendor-supplied library files?'
5535         . ./getfile
5536         vendorlib="$ans"
5537         vendorlibexp="$ansexp"
5538         ;;
5539 esac
5540 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
5541 : Change installation prefix, if necessary.
5542 if $test X"$prefix" != X"$installprefix"; then
5543         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5544 else
5545         installvendorlib="$vendorlibexp"
5546 fi
5547
5548 case "$vendorprefix" in
5549 '')     d_vendorarch="$undef"
5550         vendorarch=''
5551         vendorarchexp=''
5552         ;;
5553 *)      d_vendorarch="$define"
5554         : determine where vendor-supplied architecture-dependent libraries go.
5555         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
5556         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
5557         : vendorlib may have an optional trailing /share.
5558         case "$vendorarch" in
5559         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
5560                 dflt="$dflt/$archname"
5561                 ;;
5562         *)      dflt="$vendorarch" ;;
5563         esac
5564         fn=d~+
5565         rp='Pathname for vendor-supplied architecture-dependent files?'
5566         . ./getfile
5567         vendorarch="$ans"
5568         vendorarchexp="$ansexp"
5569         ;;
5570 esac
5571 : Change installation prefix, if necessary.
5572 if $test X"$prefix" != X"$installprefix"; then
5573         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
5574 else
5575         installvendorarch="$vendorarchexp"
5576 fi
5577
5578 : Final catch-all directories to search
5579 $cat <<EOM
5580
5581 Lastly, you can have perl look in other directories for extensions and
5582 modules in addition to those already specified.
5583 These directories will be searched after 
5584         $sitearch 
5585         $sitelib 
5586 EOM
5587 test X"$vendorlib" != "X" && echo '     ' $vendorlib
5588 test X"$vendorarch" != "X" && echo '    ' $vendorarch
5589 echo ' '
5590 case "$otherlibdirs" in
5591 ''|' ') dflt='none' ;;
5592 *)      dflt="$otherlibdirs" ;;
5593 esac
5594 $cat <<EOM
5595 Enter a colon-separated set of extra paths to include in perl's @INC
5596 search path, or enter 'none' for no extra paths.
5597
5598 EOM
5599
5600 rp='Colon-separated list of additional directories for perl to search?'
5601 . ./myread
5602 case "$ans" in
5603 ' '|''|none)    otherlibdirs=' ' ;;     
5604 *)      otherlibdirs="$ans" ;;
5605 esac
5606 case "$otherlibdirs" in
5607 ' ') val=$undef ;;
5608 *)      val=$define ;;
5609 esac
5610 set d_perl_otherlibdirs
5611 eval $setvar
5612
5613 : Cruising for prototypes
5614 echo " "
5615 echo "Checking out function prototypes..." >&4
5616 $cat >prototype.c <<'EOCP'
5617 int main(int argc, char *argv[]) {
5618         exit(0);}
5619 EOCP
5620 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5621         echo "Your C compiler appears to support function prototypes."
5622         val="$define"
5623 else
5624         echo "Your C compiler doesn't seem to understand function prototypes."
5625         val="$undef"
5626 fi
5627 set prototype
5628 eval $setvar
5629 $rm -f prototype*
5630
5631 case "$prototype" in
5632 "$define") ;;
5633 *)      ansi2knr='ansi2knr'
5634         echo " "
5635         cat <<EOM >&4
5636
5637 $me:  FATAL ERROR:
5638 This version of $package can only be compiled by a compiler that 
5639 understands function prototypes.  Unfortunately, your C compiler 
5640         $cc $ccflags
5641 doesn't seem to understand them.  Sorry about that.
5642
5643 If GNU cc is available for your system, perhaps you could try that instead.  
5644
5645 Eventually, we hope to support building Perl with pre-ANSI compilers.
5646 If you would like to help in that effort, please contact <perlbug@perl.org>.
5647
5648 Aborting Configure now.
5649 EOM
5650         exit 2
5651         ;;
5652 esac
5653
5654 : determine where public executables go
5655 echo " "
5656 set dflt bin bin
5657 eval $prefixit
5658 fn=d~
5659 rp='Pathname where the public executables will reside?'
5660 . ./getfile
5661 if $test "X$ansexp" != "X$binexp"; then
5662         installbin=''
5663 fi
5664 bin="$ans"
5665 binexp="$ansexp"
5666 : Change installation prefix, if necessary.
5667 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5668 if $test X"$prefix" != X"$installprefix"; then
5669         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5670 else
5671         installbin="$binexp"
5672 fi
5673
5674 : Find perl5.005 or later.
5675 echo "Looking for a previously installed perl5.005 or later... "
5676 case "$perl5" in
5677 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5678                 : Check if this perl is recent and can load a simple module
5679                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5680                         perl5=$tdir/perl
5681                         break;
5682                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5683                         perl5=$tdir/perl
5684                         break;
5685                 fi
5686         done
5687         ;;
5688 *)      perl5="$perl5"
5689         ;;
5690 esac
5691 case "$perl5" in
5692 '')     echo "None found.  That's ok.";;
5693 *)      echo "Using $perl5." ;;
5694 esac
5695
5696 : Determine list of previous versions to include in @INC
5697 $cat > getverlist <<EOPL
5698 #!$perl5 -w
5699 use File::Basename;
5700 \$api_versionstring = "$api_versionstring";
5701 \$version = "$version";
5702 \$stem = "$sitelib_stem";
5703 \$archname = "$archname";
5704 EOPL
5705         $cat >> getverlist <<'EOPL'
5706 # Can't have leading @ because metaconfig interprets it as a command!
5707 ;@inc_version_list=();
5708 # XXX Redo to do opendir/readdir? 
5709 if (-d $stem) {
5710     chdir($stem);
5711     ;@candidates = glob("5.*");
5712 }
5713 else {
5714     ;@candidates = ();
5715 }
5716
5717 # XXX ToDo:  These comparisons must be reworked when two-digit
5718 # subversions come along, so that 5.7.10 compares as greater than
5719 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5720 # widespread that we can use the built-in version vectors rather
5721 # than reinventing them here.  For 5.6.0, however, we must
5722 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5723 foreach $d (@candidates) {
5724     if ($d lt $version) {
5725         if ($d ge $api_versionstring) {
5726             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
5727         }
5728         elsif ($d ge "5.005") {
5729             unshift(@inc_version_list, grep { -d } $d);
5730         }
5731     }
5732     else {
5733         # Skip newer version.  I.e. don't look in
5734         # 5.7.0 if we're installing 5.6.1.
5735     }
5736 }
5737
5738 if (@inc_version_list) {
5739     print join(' ', @inc_version_list);
5740 }
5741 else {
5742     # Blank space to preserve value for next Configure run.
5743     print " ";
5744 }
5745 EOPL
5746 chmod +x getverlist
5747 case "$inc_version_list" in
5748 '')     if test -x "$perl5"; then
5749                 dflt=`$perl5 getverlist`
5750         else
5751                 dflt='none'
5752         fi
5753         ;;
5754 $undef) dflt='none' ;;
5755 *)  dflt="$inc_version_list" ;;
5756 esac
5757 case "$dflt" in
5758 ''|' ') dflt=none ;;
5759 esac
5760 $cat <<'EOM'
5761
5762 In order to ease the process of upgrading, this version of perl 
5763 can be configured to use modules built and installed with earlier 
5764 versions of perl that were installed under $prefix.  Specify here
5765 the list of earlier versions that this version of perl should check.
5766 If Configure detected no earlier versions of perl installed under
5767 $prefix, then the list will be empty.  Answer 'none' to tell perl
5768 to not search earlier versions.
5769
5770 The default should almost always be sensible, so if you're not sure,
5771 just accept the default.
5772 EOM
5773
5774 rp='List of earlier versions to include in @INC?'
5775 . ./myread
5776 case "$ans" in
5777 [Nn]one|''|' ') inc_version_list=' ' ;;
5778 *) inc_version_list="$ans" ;;
5779 esac
5780 case "$inc_version_list" in
5781 ''|' ') 
5782         inc_version_list_init='0';;
5783 *)      inc_version_list_init=`echo $inc_version_list |
5784                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5785         ;;
5786 esac
5787 $rm -f getverlist
5788
5789 : determine whether to install perl also as /usr/bin/perl
5790
5791 echo " "
5792 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5793         $cat <<EOM
5794 Many scripts expect perl to be installed as /usr/bin/perl.
5795 I can install the perl you are about to compile also as /usr/bin/perl
5796 (in addition to $installbin/perl).
5797 EOM
5798         case "$installusrbinperl" in
5799         "$undef"|[nN]*) dflt='n';;
5800         *)              dflt='y';;
5801         esac
5802         rp="Do you want to install perl as /usr/bin/perl?"
5803         . ./myread
5804         case "$ans" in
5805         [yY]*)  val="$define";;
5806         *)      val="$undef" ;;
5807         esac
5808 else
5809         val="$undef"
5810 fi
5811 set installusrbinperl
5812 eval $setvar
5813
5814 echo " "
5815 echo "Checking for GNU C Library..." >&4
5816 cat >gnulibc.c <<EOM
5817 #include <stdio.h>
5818 int main()
5819 {
5820 #ifdef __GLIBC__
5821     exit(0);
5822 #else
5823     exit(1);
5824 #endif
5825 }
5826 EOM
5827 set gnulibc
5828 if eval $compile_ok && ./gnulibc; then
5829         val="$define"
5830         echo "You are using the GNU C Library"
5831 else
5832         val="$undef"
5833         echo "You are not using the GNU C Library"
5834 fi
5835 $rm -f gnulibc*
5836 set d_gnulibc
5837 eval $setvar
5838
5839 : see if nm is to be used to determine whether a symbol is defined or not
5840 case "$usenm" in
5841 '')
5842         dflt=''
5843         case "$d_gnulibc" in
5844         "$define")
5845                 echo " "
5846                 echo "nm probably won't work on the GNU C Library." >&4
5847                 dflt=n
5848                 ;;
5849         esac
5850         case "$dflt" in
5851         '') 
5852                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5853                         echo " "
5854                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5855                         echo "'nm' won't be sufficient on this sytem." >&4
5856                         dflt=n
5857                 fi
5858                 ;;
5859         esac
5860         case "$dflt" in
5861         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5862                 if $test $dflt -gt 20; then
5863                         dflt=y
5864                 else
5865                         dflt=n
5866                 fi
5867                 ;;
5868         esac
5869         ;;
5870 *)
5871         case "$usenm" in
5872         true|$define) dflt=y;;
5873         *) dflt=n;;
5874         esac
5875         ;;
5876 esac
5877 $cat <<EOM
5878
5879 I can use $nm to extract the symbols from your C libraries. This
5880 is a time consuming task which may generate huge output on the disk (up
5881 to 3 megabytes) but that should make the symbols extraction faster. The
5882 alternative is to skip the 'nm' extraction part and to compile a small
5883 test program instead to determine whether each symbol is present. If
5884 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5885 this may be the best solution.
5886
5887 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5888
5889 EOM
5890 rp="Shall I use $nm to extract C symbols from the libraries?"
5891 . ./myread
5892 case "$ans" in
5893 [Nn]*) usenm=false;;
5894 *) usenm=true;;
5895 esac
5896
5897 runnm=$usenm
5898 case "$reuseval" in
5899 true) runnm=false;;
5900 esac
5901
5902 : nm options which may be necessary
5903 case "$nm_opt" in
5904 '') if $test -f /mach_boot; then
5905                 nm_opt=''       # Mach
5906         elif $test -d /usr/ccs/lib; then
5907                 nm_opt='-p'     # Solaris (and SunOS?)
5908         elif $test -f /dgux; then
5909                 nm_opt='-p'     # DG-UX
5910         elif $test -f /lib64/rld; then
5911                 nm_opt='-p'     # 64-bit Irix
5912         else
5913                 nm_opt=''
5914         fi;;
5915 esac
5916
5917 : nm options which may be necessary for shared libraries but illegal
5918 : for archive libraries.  Thank you, Linux.
5919 case "$nm_so_opt" in
5920 '')     case "$myuname" in
5921         *linux*)
5922                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5923                         nm_so_opt='--dynamic'
5924                 fi
5925                 ;;
5926         esac
5927         ;;
5928 esac
5929
5930 case "$runnm" in
5931 true)
5932 : get list of predefined functions in a handy place
5933 echo " "
5934 case "$libc" in
5935 '') libc=unknown
5936         case "$libs" in
5937         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5938         esac
5939         ;;
5940 esac
5941 libnames='';
5942 case "$libs" in
5943 '') ;;
5944 *)  for thislib in $libs; do
5945         case "$thislib" in
5946         -lc|-lc_s)
5947                 : Handle C library specially below.
5948                 ;;
5949         -l*)
5950                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5951                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5952                         :
5953                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5954                         :
5955                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5956                         :
5957                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5958                         :
5959                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5960                         :
5961                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5962                         :
5963                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5964                         :
5965                 else
5966                         try=''
5967                 fi
5968                 libnames="$libnames $try"
5969                 ;;
5970         *) libnames="$libnames $thislib" ;;
5971         esac
5972         done
5973         ;;
5974 esac
5975 xxx=normal
5976 case "$libc" in
5977 unknown)
5978         set /lib/libc.$so
5979         for xxx in $libpth; do
5980                 $test -r $1 || set $xxx/libc.$so
5981                 : The messy sed command sorts on library version numbers.
5982                 $test -r $1 || \
5983                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5984                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5985                                 h
5986                                 s/[0-9][0-9]*/0000&/g
5987                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5988                                 G
5989                                 s/\n/ /' | \
5990                          sort | $sed -e 's/^.* //'`
5991                 eval set \$$#
5992         done
5993         $test -r $1 || set /usr/ccs/lib/libc.$so
5994         $test -r $1 || set /lib/libsys_s$_a
5995         ;;
5996 *)
5997         set blurfl
5998         ;;
5999 esac
6000 if $test -r "$1"; then
6001         echo "Your (shared) C library seems to be in $1."
6002         libc="$1"
6003 elif $test -r /lib/libc && $test -r /lib/clib; then
6004         echo "Your C library seems to be in both /lib/clib and /lib/libc."
6005         xxx=apollo
6006         libc='/lib/clib /lib/libc'
6007         if $test -r /lib/syslib; then
6008                 echo "(Your math library is in /lib/syslib.)"
6009                 libc="$libc /lib/syslib"
6010         fi
6011 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6012         echo "Your C library seems to be in $libc, as you said before."
6013 elif $test -r $incpath/usr/lib/libc$_a; then
6014         libc=$incpath/usr/lib/libc$_a;
6015         echo "Your C library seems to be in $libc.  That's fine."
6016 elif $test -r /lib/libc$_a; then
6017         libc=/lib/libc$_a;
6018         echo "Your C library seems to be in $libc.  You're normal."
6019 else
6020         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
6021                 :
6022         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
6023                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
6024         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
6025                 :
6026         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6027                 :
6028         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6029                 :
6030         else
6031                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
6032         fi
6033         if $test -r "$tans"; then
6034                 echo "Your C library seems to be in $tans, of all places."
6035                 libc=$tans
6036         else
6037                 libc='blurfl'
6038         fi
6039 fi
6040 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6041         dflt="$libc"
6042         cat <<EOM
6043
6044 If the guess above is wrong (which it might be if you're using a strange
6045 compiler, or your machine supports multiple models), you can override it here.
6046
6047 EOM
6048 else
6049         dflt=''
6050         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
6051         cat >&4 <<EOM
6052 I can't seem to find your C library.  I've looked in the following places:
6053
6054 EOM
6055         $sed 's/^/      /' libpath
6056         cat <<EOM
6057
6058 None of these seems to contain your C library. I need to get its name...
6059
6060 EOM
6061 fi
6062 fn=f
6063 rp='Where is your C library?'
6064 . ./getfile
6065 libc="$ans"
6066
6067 echo " "
6068 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
6069 set X `cat libnames`
6070 shift
6071 xxx=files
6072 case $# in 1) xxx=file; esac
6073 echo "Extracting names from the following $xxx for later perusal:" >&4
6074 echo " "
6075 $sed 's/^/      /' libnames >&4
6076 echo " "
6077 $echo $n "This may take a while...$c" >&4
6078
6079 for file in $*; do
6080         case $file in
6081         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
6082         *) $nm $nm_opt $file 2>/dev/null;;
6083         esac
6084 done >libc.tmp
6085
6086 $echo $n ".$c"
6087 $grep fprintf libc.tmp > libc.ptf
6088 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
6089 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
6090 xxx='[ADTSIW]'
6091 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
6092         eval $xscan;\
6093         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6094                 eval $xrun
6095 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
6096         eval $xscan;\
6097         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6098                 eval $xrun
6099 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
6100         eval $xscan;\
6101         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6102                 eval $xrun
6103 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6104         eval $xscan;\
6105         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6106                 eval $xrun
6107 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6108         eval $xscan;\
6109         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6110                 eval $xrun
6111 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6112         eval $xscan;\
6113         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6114                 eval $xrun
6115 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6116                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
6117         eval $xscan;\
6118         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6119                 eval $xrun
6120 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6121         eval $xscan;\
6122         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6123                 eval $xrun
6124 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6125         eval $xscan;\
6126         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6127                 eval $xrun
6128 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6129         eval $xscan;\
6130         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6131                 eval $xrun
6132 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6133         eval $xscan;\
6134         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6135                 eval $xrun
6136 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6137         eval $xscan;\
6138         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6139                 eval $xrun
6140 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6141         eval $xscan;\
6142         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6143                 eval $xrun
6144 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
6145         eval $xscan;\
6146         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6147                 eval $xrun
6148 else
6149         $nm -p $* 2>/dev/null >libc.tmp
6150         $grep fprintf libc.tmp > libc.ptf
6151         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6152                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6153         then
6154                 nm_opt='-p'
6155                 eval $xrun
6156         else
6157                 echo " "
6158                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
6159                 com=''
6160                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
6161                         for thisname in $libnames $libc; do
6162                                 $ar t $thisname >>libc.tmp
6163                         done
6164                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
6165                         echo "Ok." >&4
6166                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6167                         # Repeat libc to extract forwarders to DLL entries too
6168                         for thisname in $libnames $libc; do
6169                                 $ar tv $thisname >>libc.tmp
6170                                 # Revision 50 of EMX has bug in $ar.
6171                                 # it will not extract forwarders to DLL entries
6172                                 # Use emximp which will extract exactly them.
6173                                 emximp -o tmp.imp $thisname \
6174                                     2>/dev/null && \
6175                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6176                                     < tmp.imp >>libc.tmp
6177                                 $rm tmp.imp
6178                         done
6179                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6180                         echo "Ok." >&4
6181                 else
6182                         echo "$ar didn't seem to work right." >&4
6183                         echo "Maybe this is a Cray...trying bld instead..." >&4
6184                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
6185                         then
6186                                 for thisname in $libnames; do
6187                                         bld t $libnames | \
6188                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6189                                         $ar t $thisname >>libc.tmp
6190                                 done
6191                                 echo "Ok." >&4
6192                         else
6193                                 echo "That didn't work either.  Giving up." >&4
6194                                 exit 1
6195                         fi
6196                 fi
6197         fi
6198 fi
6199 nm_extract="$com"
6200 if $test -f /lib/syscalls.exp; then
6201         echo " "
6202         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6203         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
6204 fi
6205 ;;
6206 esac
6207 $rm -f libnames libpath
6208
6209 : see if dld is available
6210 set dld.h i_dld
6211 eval $inhdr
6212
6213 : is a C symbol defined?
6214 csym='tlook=$1;
6215 case "$3" in
6216 -v) tf=libc.tmp; tc=""; tdc="";;
6217 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6218 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6219 esac;
6220 tx=yes;
6221 case "$reuseval-$4" in
6222 true-) ;;
6223 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6224 esac;
6225 case "$tx" in
6226 yes)
6227         case "$runnm" in
6228         true)
6229                 if $contains $tlook $tf >/dev/null 2>&1;
6230                 then tval=true;
6231                 else tval=false;
6232                 fi;;
6233         *)
6234                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6235                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6236                 then tval=true;
6237                 else tval=false;
6238                 fi;
6239                 $rm -f t t.c;;
6240         esac;;
6241 *)
6242         case "$tval" in
6243         $define) tval=true;;
6244         *) tval=false;;
6245         esac;;
6246 esac;
6247 eval "$2=$tval"'
6248
6249 : define an is-in-libc? function
6250 inlibc='echo " "; td=$define; tu=$undef;
6251 sym=$1; var=$2; eval "was=\$$2";
6252 tx=yes;
6253 case "$reuseval$was" in
6254 true) ;;
6255 true*) tx=no;;
6256 esac;
6257 case "$tx" in
6258 yes)
6259         set $sym tres -f;
6260         eval $csym;
6261         case "$tres" in
6262         true)
6263                 echo "$sym() found." >&4;
6264                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6265         *)
6266                 echo "$sym() NOT found." >&4;
6267                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6268         esac;;
6269 *)
6270         case "$was" in
6271         $define) echo "$sym() found." >&4;;
6272         *) echo "$sym() NOT found." >&4;;
6273         esac;;
6274 esac'
6275
6276 : see if dlopen exists
6277 xxx_runnm="$runnm"
6278 runnm=false
6279 set dlopen d_dlopen
6280 eval $inlibc
6281 runnm="$xxx_runnm"
6282
6283 : determine which dynamic loading, if any, to compile in
6284 echo " "
6285 dldir="ext/DynaLoader"
6286 case "$usedl" in
6287 $define|y|true)
6288         dflt='y'
6289         usedl="$define"
6290         ;;
6291 $undef|n|false)
6292         dflt='n'
6293         usedl="$undef"
6294         ;;
6295 *) 
6296         dflt='n'
6297         case "$d_dlopen" in
6298             $define) dflt='y' ;;
6299         esac
6300         case "$i_dld" in
6301             $define) dflt='y' ;;
6302         esac
6303         : Does a dl_xxx.xs file exist for this operating system
6304         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6305         ;;
6306 esac
6307 rp="Do you wish to use dynamic loading?"
6308 . ./myread
6309 usedl="$ans"
6310 case "$ans" in
6311 y*) usedl="$define"
6312         case "$dlsrc" in
6313         '')
6314                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6315                         dflt="$dldir/dl_${osname}.xs"
6316                 elif $test "$d_dlopen" = "$define" ; then
6317                         dflt="$dldir/dl_dlopen.xs"
6318                 elif $test "$i_dld" = "$define" ; then
6319                         dflt="$dldir/dl_dld.xs"
6320                 else
6321                         dflt=''
6322                 fi
6323                 ;;
6324         *)      dflt="$dldir/$dlsrc"
6325                 ;;
6326         esac
6327     echo "The following dynamic loading files are available:"
6328         : Can not go over to $dldir because getfile has path hard-coded in.
6329         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6330         rp="Source file to use for dynamic loading"
6331         fn="fne"
6332         gfpth="$src"
6333         . ./getfile
6334         usedl="$define"
6335         : emulate basename
6336         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6337
6338         $cat << EOM
6339
6340 Some systems may require passing special flags to $cc -c to
6341 compile modules that will be used to create a shared library.
6342 To use no flags, say "none".
6343
6344 EOM
6345     case "$cccdlflags" in
6346     '') case "$gccversion" in
6347                 '') case "$osname" in
6348                         hpux)   dflt='+z' ;;
6349                         next)   dflt='none' ;;
6350                         irix*)  dflt='-KPIC' ;;
6351                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6352                         sunos)  dflt='-pic' ;;
6353                         *)      dflt='none' ;;
6354                     esac
6355                         ;;
6356                 *)  case "$osname" in
6357                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6358                         *)      dflt='-fpic' ;;
6359                     esac ;;
6360             esac ;;
6361         ' ') dflt='none' ;;
6362     *)  dflt="$cccdlflags" ;;
6363     esac
6364     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6365     . ./myread
6366     case "$ans" in
6367     none) cccdlflags=' ' ;;
6368     *) cccdlflags="$ans" ;;
6369     esac
6370
6371     cat << EOM
6372
6373 Some systems use ld to create libraries that can be dynamically loaded,
6374 while other systems (such as those using ELF) use $cc.
6375
6376 EOM
6377         case "$ld" in
6378         '')     $cat >try.c <<'EOM'
6379 /* Test for whether ELF binaries are produced */
6380 #include <fcntl.h>
6381 #include <stdlib.h>
6382 int main() {
6383         char b[4];
6384         int i = open("a.out",O_RDONLY);
6385         if(i == -1) 
6386                 exit(1); /* fail */
6387         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6388                 exit(0); /* succeed (yes, it's ELF) */
6389         else
6390                 exit(1); /* fail */
6391 }
6392 EOM
6393                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6394                         cat <<EOM
6395 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6396 EOM
6397                         dflt="$cc"
6398                 else
6399                         echo "I'll use ld to build dynamic libraries."
6400                         dflt='ld'
6401                 fi
6402                 rm -f try.c a.out
6403                 ;;
6404         *)      dflt="$ld"
6405                 ;;
6406         esac
6407
6408     rp="What command should be used to create dynamic libraries?"
6409     . ./myread
6410         ld="$ans"
6411
6412     cat << EOM
6413
6414 Some systems may require passing special flags to $ld to create a
6415 library that can be dynamically loaded.  If your ld flags include
6416 -L/other/path options to locate libraries outside your loader's normal
6417 search path, you may need to specify those -L options here as well.  To
6418 use no flags, say "none".
6419
6420 EOM
6421     case "$lddlflags" in
6422     '') case "$osname" in
6423                         beos) dflt='-nostart' ;;
6424                         hpux) dflt='-b';
6425                               case "$gccversion" in
6426                               '') dflt="$dflt +vnocompatwarnings" ;;
6427                               esac
6428                               ;;        
6429                         linux|irix*)    dflt='-shared' ;;
6430                         next)  dflt='none' ;;
6431                         solaris) dflt='-G' ;;
6432                         sunos) dflt='-assert nodefinitions' ;;
6433                         svr4*|esix*) dflt="-G $ldflags" ;;
6434                 *)     dflt='none' ;;
6435                         esac
6436                         ;;
6437     *) dflt="$lddlflags" ;;
6438     esac
6439
6440         : Try to guess additional flags to pick up local libraries.
6441         : Be careful not to append to a plain 'none'
6442         case "$dflt" in
6443         none) dflt='' ;;
6444         esac
6445         for thisflag in $ldflags; do
6446                 case "$thisflag" in
6447                 -L*)
6448                         case " $dflt " in
6449                         *" $thisflag "*) ;;
6450                         *) dflt="$dflt $thisflag" ;;
6451                         esac
6452                         ;;
6453                 esac
6454         done
6455
6456         case "$dflt" in
6457         ''|' ') dflt='none' ;;
6458         esac
6459
6460     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6461     . ./myread
6462     case "$ans" in
6463     none) lddlflags=' ' ;;
6464     *) lddlflags="$ans" ;;
6465     esac
6466
6467         cat <<EOM
6468
6469 Some systems may require passing special flags to $cc to indicate that
6470 the resulting executable will use dynamic linking.  To use no flags,
6471 say "none".
6472
6473 EOM
6474     case "$ccdlflags" in
6475     '') case "$osname" in
6476                 hpux)   dflt='-Wl,-E' ;;
6477                 linux)  dflt='-rdynamic' ;;
6478                 next)   dflt='none' ;;
6479                 sunos)  dflt='none' ;;
6480                 *)      dflt='none' ;;
6481             esac ;;
6482     ' ')  dflt='none' ;;
6483     *)  dflt="$ccdlflags" ;;
6484     esac
6485     rp="Any special flags to pass to $cc to use dynamic linking?"
6486     . ./myread
6487     case "$ans" in
6488     none) ccdlflags=' ' ;;
6489     *) ccdlflags="$ans" ;;
6490     esac
6491     ;;
6492 *)  usedl="$undef"
6493         ld='ld'
6494     dlsrc='dl_none.xs'
6495     lddlflags=''
6496     ccdlflags=''
6497     ;;
6498 esac
6499
6500 also=''
6501 case "$usedl" in
6502 $undef)
6503         # No dynamic loading being used, so don't bother even to prompt.
6504         useshrplib='false'
6505         ;;
6506 *)      case "$useshrplib" in
6507         '')     case "$osname" in
6508                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6509                         dflt=y
6510                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6511                         ;;
6512                 next*)
6513                         case "$osvers" in
6514                         4*)     dflt=y
6515                                 also='Building a shared libperl is needed for MAB support.'
6516                                 ;;
6517                         *)      dflt=n
6518                                 ;;
6519                         esac
6520                         ;;
6521                 *)      dflt=n
6522                         ;;
6523                 esac
6524                 ;;
6525         $define|true|[Yy]*)
6526                 dflt=y
6527                 ;;
6528         *)      dflt=n
6529                 ;;
6530         esac
6531         $cat << EOM
6532
6533 The perl executable is normally obtained by linking perlmain.c with
6534 libperl${_a}, any static extensions (usually just DynaLoader), and
6535 any other libraries needed on this system (such as -lm, etc.).  Since
6536 your system supports dynamic loading, it is probably possible to build
6537 a shared libperl.$so.  If you will have more than one executable linked
6538 to libperl.$so, this will significantly reduce the size of each
6539 executable, but it may have a noticeable affect on performance.  The
6540 default is probably sensible for your system.
6541 $also
6542
6543 EOM
6544         rp="Build a shared libperl.$so (y/n)"
6545         . ./myread
6546         case "$ans" in
6547         true|$define|[Yy]*)
6548                 useshrplib='true'  ;;
6549         *)      useshrplib='false' ;;
6550         esac
6551         ;;
6552 esac
6553
6554 case "$useshrplib" in
6555 true)
6556         case "$libperl" in
6557         '')
6558                 # Figure out a good name for libperl.so.  Since it gets stored in
6559                 # a version-specific architecture-dependent library, the version
6560                 # number isn't really that important, except for making cc/ld happy.
6561                 #
6562                 # A name such as libperl.so.3.1
6563                 majmin="libperl.$so.$patchlevel.$subversion"
6564                 # A name such as libperl.so.301
6565                 majonly=`echo $patchlevel $subversion |
6566                         $awk '{printf "%d%02d", $1, $2}'`
6567                 majonly=libperl.$so.$majonly
6568                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6569                 # rely on figuring it out from the naming of libc.
6570                 case "${osname}${osvers}" in
6571                 next4*)
6572                         dflt=libperl.5.$so
6573                         # XXX How handle the --version stuff for MAB?
6574                         ;;
6575                 linux*)  # ld won't link with a bare -lperl otherwise.
6576                         dflt=libperl.$so
6577                         ;;
6578                 cygwin*) # include version
6579                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6580                         ;;
6581                 *)      # Try to guess based on whether libc has major.minor.
6582                         case "$libc" in
6583                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6584                         *libc.$so.[0-9]*) dflt=$majonly ;;
6585                         *)      dflt=libperl.$so ;;
6586                         esac
6587                         ;;
6588                 esac
6589                 ;;
6590         *)      dflt=$libperl
6591                 ;;
6592         esac
6593         cat << EOM
6594
6595 I need to select a good name for the shared libperl.  If your system uses
6596 library names with major and minor numbers, then you might want something
6597 like $majmin.  Alternatively, if your system uses a single version
6598 number for shared libraries, then you might want to use $majonly.
6599 Or, your system might be quite happy with a simple libperl.$so.
6600
6601 Since the shared libperl will get installed into a version-specific
6602 architecture-dependent directory, the version number of the shared perl
6603 library probably isn't important, so the default should be o.k.
6604
6605 EOM
6606         rp='What name do you want to give to the shared libperl?'
6607         . ./myread
6608         libperl=$ans
6609         echo "Ok, I'll use $libperl"
6610         ;;
6611 *)
6612         libperl="libperl${_a}"
6613         ;;
6614 esac
6615
6616 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6617 case "$shrpdir" in
6618 '') ;;
6619 *)      $cat >&4 <<EOM
6620 WARNING:  Use of the shrpdir variable for the installation location of
6621 the shared $libperl is not supported.  It was never documented and
6622 will not work in this version.  Let me (perlbug@perl.com)
6623 know of any problems this may cause.
6624
6625 EOM
6626         case "$shrpdir" in
6627         "$archlibexp/CORE")
6628                 $cat >&4 <<EOM
6629 But your current setting of $shrpdir is
6630 the default anyway, so it's harmless.
6631 EOM
6632                 ;;
6633         *)
6634                 $cat >&4 <<EOM
6635 Further, your current attempted setting of $shrpdir
6636 conflicts with the value of $archlibexp/CORE
6637 that installperl will use.
6638 EOM
6639                 ;;
6640         esac
6641         ;;
6642 esac
6643
6644 # How will the perl executable find the installed shared $libperl?
6645 # Add $xxx to ccdlflags.
6646 # If we can't figure out a command-line option, use $shrpenv to
6647 # set env LD_RUN_PATH.  The main perl makefile uses this.
6648 shrpdir=$archlibexp/CORE
6649 xxx=''
6650 tmp_shrpenv=''
6651 if "$useshrplib"; then
6652     case "$osname" in 
6653         aix)
6654                 # We'll set it in Makefile.SH...
6655                 ;;
6656         solaris|netbsd)
6657                 xxx="-R $shrpdir"
6658                 ;;
6659         freebsd)
6660                 xxx="-Wl,-R$shrpdir"
6661                 ;;
6662         linux|irix*|dec_osf)
6663                 xxx="-Wl,-rpath,$shrpdir"
6664                 ;;
6665         next)
6666                 # next doesn't like the default...
6667                 ;;
6668         beos)
6669                 # beos doesn't like the default, either.
6670                 ;;
6671         hpux*)
6672                 # hpux doesn't like the default, either.
6673                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6674                 ;;
6675         *)
6676                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6677                 ;;
6678         esac
6679         case "$xxx" in
6680         '') ;;
6681         *)      
6682                 # Only add $xxx if it isn't already in ccdlflags.
6683                 case " $ccdlflags " in
6684                 *" $xxx "*)     ;;
6685                 *)      ccdlflags="$ccdlflags $xxx"
6686                         cat <<EOM >&4
6687
6688 Adding $xxx to the flags
6689 passed to $ld so that the perl executable will find the 
6690 installed shared $libperl.
6691
6692 EOM
6693                         ;;
6694                 esac
6695                 ;;
6696         esac
6697 fi
6698 # Fix ccdlflags in AIX for building external extensions.
6699 # (For building Perl itself bare -bE:perl.exp is needed,
6700 #  Makefile.SH takes care of this.)
6701 case "$osname" in
6702 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6703 esac
6704 # Respect a hint or command-line value.
6705 case "$shrpenv" in
6706 '') shrpenv="$tmp_shrpenv" ;;
6707 esac
6708 case "$ldlibpthname" in
6709 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6710 none)   ldlibpthname='' ;;
6711 esac
6712
6713 : determine where manual pages go
6714 set man1dir man1dir none
6715 eval $prefixit
6716 $cat <<EOM
6717
6718 $spackage has manual pages available in source form.
6719 EOM
6720 case "$nroff" in
6721 nroff)
6722         echo "However, you don't have nroff, so they're probably useless to you."
6723         case "$man1dir" in
6724         '') man1dir="none";;
6725         esac;;
6726 esac
6727 echo "If you don't want the manual sources installed, answer 'none'."
6728 case "$man1dir" in
6729 ' ') dflt=none
6730         ;;
6731 '')
6732         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6733         lookpath="$lookpath $prefixexp/man/p_man/man1"
6734         lookpath="$lookpath $prefixexp/man/u_man/man1"
6735         lookpath="$lookpath $prefixexp/man/man.1"
6736         case "$sysman" in
6737         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6738         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6739         esac
6740         set dflt
6741         eval $prefixup
6742         ;;
6743 *)  dflt="$man1dir"
6744         ;;
6745 esac
6746 echo " "
6747 fn=dn+~
6748 rp="Where do the main $spackage manual pages (source) go?"
6749 . ./getfile
6750 if $test "X$man1direxp" != "X$ansexp"; then
6751         installman1dir=''
6752 fi
6753 man1dir="$ans"
6754 man1direxp="$ansexp"
6755 case "$man1dir" in
6756 '')     man1dir=' '
6757         installman1dir='';;
6758 esac
6759
6760 : Change installation prefix, if necessary.
6761 if $test X"$prefix" != X"$installprefix"; then
6762         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6763 else
6764         installman1dir="$man1direxp"
6765 fi
6766
6767 : What suffix to use on installed man pages
6768
6769 case "$man1dir" in
6770 ' ')
6771         man1ext='0'
6772         ;;
6773 *)
6774         rp="What suffix should be used for the main $spackage man pages?"
6775         case "$man1ext" in
6776         '')     case "$man1dir" in
6777                 *1)  dflt=1 ;;
6778                 *1p) dflt=1p ;;
6779                 *1pm) dflt=1pm ;;
6780                 *l) dflt=l;;
6781                 *n) dflt=n;;
6782                 *o) dflt=o;;
6783                 *p) dflt=p;;
6784                 *C) dflt=C;;
6785                 *L) dflt=L;;
6786                 *L1) dflt=L1;;
6787                 *) dflt=1;;
6788                 esac
6789                 ;;
6790         *)      dflt="$man1ext";;
6791         esac
6792         . ./myread
6793         man1ext="$ans"
6794         ;;
6795 esac
6796
6797 : see if we can have long filenames
6798 echo " "
6799 first=123456789abcdef
6800 $rm -f $first
6801 if (echo hi >$first) 2>/dev/null; then
6802         if $test -f 123456789abcde; then
6803                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6804                 val="$undef"
6805         else
6806                 echo 'You can have filenames longer than 14 characters.'>&4
6807                 val="$define"
6808         fi
6809 else
6810         $cat <<'EOM'
6811 You can't have filenames longer than 14 chars.
6812 You can't even think about them!
6813 EOM
6814         val="$undef"
6815 fi 
6816 set d_flexfnam
6817 eval $setvar
6818 $rm -rf 123456789abcde*
6819
6820 : determine where library module manual pages go
6821 set man3dir man3dir none
6822 eval $prefixit
6823 $cat <<EOM
6824
6825 $spackage has manual pages for many of the library modules.
6826 EOM
6827
6828 case "$nroff" in
6829 nroff)
6830         $cat <<'EOM'
6831 However, you don't have nroff, so they're probably useless to you.
6832 EOM
6833         case "$man3dir" in
6834         '') man3dir="none";;
6835         esac;;
6836 esac
6837
6838 case "$d_flexfnam" in
6839 undef)
6840         $cat <<'EOM'
6841 However, your system can't handle the long file names like File::Basename.3. 
6842 EOM
6843         case "$man3dir" in
6844         '') man3dir="none";;
6845         esac;;
6846 esac
6847
6848 echo "If you don't want the manual sources installed, answer 'none'."
6849 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6850 case "$man3dir" in
6851 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6852         if $test -d "$privlib/man/man3"; then
6853                 cat <<EOM >&4
6854
6855 WARNING:  Previous versions of perl installed man3 pages into
6856 $privlib/man/man3.  This version will suggest a 
6857 new default of $dflt.  
6858 EOM
6859                 tdflt=$dflt
6860                 dflt='n'
6861                 rp='Do you wish to preserve the old behavior?(y/n)'
6862                 . ./myread
6863                 case "$ans" in
6864                 y*) dflt="$privlib/man/man3" ;;
6865                 *)  dflt=$tdflt ;;
6866                 esac
6867     fi
6868         ;;
6869 *)      dflt="$man3dir" ;;
6870 esac
6871 case "$dflt" in
6872 ' ') dflt=none ;;
6873 esac
6874 echo " "
6875 fn=dn+~
6876 rp="Where do the $package library man pages (source) go?"
6877 . ./getfile
6878 man3dir="$ans"
6879 man3direxp="$ansexp"
6880 case "$man3dir" in
6881 '')     man3dir=' '
6882         installman3dir='';;
6883 esac
6884
6885 : Change installation prefix, if necessary.
6886 if $test X"$prefix" != X"$installprefix"; then
6887         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6888 else
6889         installman3dir="$man3direxp"
6890 fi
6891
6892 : What suffix to use on installed man pages
6893 case "$man3dir" in
6894 ' ')
6895         man3ext='0'
6896         ;;
6897 *)
6898         rp="What suffix should be used for the $package library man pages?"
6899         case "$man3ext" in
6900         '')     case "$man3dir" in
6901                 *3)  dflt=3 ;;
6902                 *3p) dflt=3p ;;
6903                 *3pm) dflt=3pm ;;
6904                 *l) dflt=l;;
6905                 *n) dflt=n;;
6906                 *o) dflt=o;;
6907                 *p) dflt=p;;
6908                 *C) dflt=C;;
6909                 *L) dflt=L;;
6910                 *L3) dflt=L3;;
6911                 *) dflt=3;;
6912                 esac
6913                 ;;
6914         *)      dflt="$man3ext";;
6915         esac
6916         . ./myread
6917         man3ext="$ans"
6918         ;;
6919 esac
6920
6921 : see if we have to deal with yellow pages, now NIS.
6922 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6923         if $test -f /usr/etc/nibindd; then
6924                 echo " "
6925                 echo "I'm fairly confident you're on a NeXT."
6926                 echo " "
6927                 rp='Do you get the hosts file via NetInfo?'
6928                 dflt=y
6929                 case "$hostcat" in
6930                 nidump*) ;;
6931                 '') ;;
6932                 *) dflt=n;;
6933                 esac
6934                 . ./myread
6935                 case "$ans" in
6936                 y*) hostcat='nidump hosts .';;
6937                 *)      case "$hostcat" in
6938                         nidump*) hostcat='';;
6939                         esac
6940                         ;;
6941                 esac
6942         fi
6943         case "$hostcat" in
6944         nidump*) ;;
6945         *)
6946                 case "$hostcat" in
6947                 *ypcat*) dflt=y;;
6948                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6949                                 dflt=y
6950                         else
6951                                 dflt=n
6952                         fi;;
6953                 *) dflt=n;;
6954                 esac
6955                 echo " "
6956                 rp='Are you getting the hosts file via yellow pages?'
6957                 . ./myread
6958                 case "$ans" in
6959                 y*) hostcat='ypcat hosts';;
6960                 *) hostcat='cat /etc/hosts';;
6961                 esac
6962                 ;;
6963         esac
6964 fi
6965 case "$hostcat" in
6966 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6967 esac
6968 case "$groupcat" in
6969 '') test -f /etc/group && groupcat='cat /etc/group';;
6970 esac
6971 case "$passcat" in
6972 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6973 esac
6974
6975 : now get the host name
6976 echo " "
6977 echo "Figuring out host name..." >&4
6978 case "$myhostname" in
6979 '') cont=true
6980         echo 'Maybe "hostname" will work...'
6981         if tans=`sh -c hostname 2>&1` ; then
6982                 myhostname=$tans
6983                 phostname=hostname
6984                 cont=''
6985         fi
6986         ;;
6987 *) cont='';;
6988 esac
6989 if $test "$cont"; then
6990         if ./xenix; then
6991                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6992                 if tans=`cat /etc/systemid 2>&1` ; then
6993                         myhostname=$tans
6994                         phostname='cat /etc/systemid'
6995                         echo "Whadyaknow.  Xenix always was a bit strange..."
6996                         cont=''
6997                 fi
6998         elif $test -r /etc/systemid; then
6999                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7000         fi
7001 fi
7002 if $test "$cont"; then
7003         echo 'No, maybe "uuname -l" will work...'
7004         if tans=`sh -c 'uuname -l' 2>&1` ; then
7005                 myhostname=$tans
7006                 phostname='uuname -l'
7007         else
7008                 echo 'Strange.  Maybe "uname -n" will work...'
7009                 if tans=`sh -c 'uname -n' 2>&1` ; then
7010                         myhostname=$tans
7011                         phostname='uname -n'
7012                 else
7013                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7014                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7015                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7016                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7017                         else
7018                                 case "$myhostname" in
7019                                 '') echo "Does this machine have an identity crisis or something?"
7020                                         phostname='';;
7021                                 *)
7022                                         echo "Well, you said $myhostname before..."
7023                                         phostname='echo $myhostname';;
7024                                 esac
7025                         fi
7026                 fi
7027         fi
7028 fi
7029 : you do not want to know about this
7030 set $myhostname
7031 myhostname=$1
7032
7033 : verify guess
7034 if $test "$myhostname" ; then
7035         dflt=y
7036         rp='Your host name appears to be "'$myhostname'".'" Right?"
7037         . ./myread
7038         case "$ans" in
7039         y*) ;;
7040         *) myhostname='';;
7041         esac
7042 fi
7043
7044 : bad guess or no guess
7045 while $test "X$myhostname" = X ; do
7046         dflt=''
7047         rp="Please type the (one word) name of your host:"
7048         . ./myread
7049         myhostname="$ans"
7050 done
7051
7052 : translate upper to lower if necessary
7053 case "$myhostname" in
7054 *[A-Z]*)
7055         echo "(Normalizing case in your host name)"
7056         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7057         ;;
7058 esac
7059
7060 case "$myhostname" in
7061 *.*)
7062         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7063         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7064         echo "(Trimming domain name from host name--host name is now $myhostname)"
7065         ;;
7066 *) case "$mydomain" in
7067         '')
7068                 {
7069                         test "X$hostcat" = "Xypcat hosts" &&
7070                         ypmatch "$myhostname" hosts 2>/dev/null |\
7071                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7072                         $test -s hosts
7073                 } || {
7074                         test "X$hostcat" != "X" &&
7075                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7076                                         /[       ]$myhostname[  . ]/p" > hosts
7077                 }
7078                 tmp_re="[       . ]"
7079                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7080                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7081                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7082                         hosts | $sort | $uniq | \
7083                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7084                 case `$echo X$dflt` in
7085                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
7086                         dflt=.
7087                         ;;
7088                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
7089                         ;;
7090                 esac
7091                 case "$dflt" in
7092                 .)
7093                         tans=`./loc resolv.conf X /etc /usr/etc`
7094                         if $test -f "$tans"; then
7095                                 echo "(Attempting domain name extraction from $tans)"
7096                                 dflt=.`$sed -n -e 's/   / /g' \
7097                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7098                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7099                                 case "$dflt" in
7100                                 .) dflt=.`$sed -n -e 's/        / /g' \
7101                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7102                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7103                                         ;;
7104                                 esac
7105                         fi
7106                         ;;
7107                 esac
7108                 case "$dflt" in
7109                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7110                         dflt=.`sh -c domainname 2>/dev/null`
7111                         case "$dflt" in
7112                         '') dflt='.';;
7113                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7114                         esac
7115                         ;;
7116                 esac
7117                 case "$dflt" in
7118                 .) echo "(Lost all hope -- silly guess then)"
7119                         dflt='.uucp'
7120                         ;;
7121                 esac
7122                 $rm -f hosts
7123                 ;;
7124         *) dflt="$mydomain";;
7125         esac;;
7126 esac
7127 echo " "
7128 rp="What is your domain name?"
7129 . ./myread
7130 tans="$ans"
7131 case "$ans" in
7132 '') ;;
7133 .*) ;;
7134 *) tans=".$tans";;
7135 esac
7136 mydomain="$tans"
7137
7138 : translate upper to lower if necessary
7139 case "$mydomain" in
7140 *[A-Z]*)
7141         echo "(Normalizing case in your domain name)"
7142         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7143         ;;
7144 esac
7145
7146 : a little sanity check here
7147 case "$phostname" in
7148 '') ;;
7149 *)
7150         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7151         $myhostname$mydomain|$myhostname) ;;
7152         *)
7153                 case "$phostname" in
7154                 sed*)
7155                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7156                         ;;
7157                 *)
7158                         echo "(That doesn't agree with your $phostname command, by the way.)"
7159                         ;;
7160                 esac
7161         ;;
7162         esac
7163         ;;
7164 esac
7165
7166 $cat <<EOM
7167
7168 I need to get your e-mail address in Internet format if possible, i.e.
7169 something like user@host.domain. Please answer accurately since I have
7170 no easy means to double check it. The default value provided below
7171 is most probably close to reality but may not be valid from outside
7172 your organization...
7173
7174 EOM
7175 cont=x
7176 while test "$cont"; do
7177         case "$cf_email" in
7178         '') dflt="$cf_by@$myhostname$mydomain";;
7179         *) dflt="$cf_email";;
7180         esac
7181         rp='What is your e-mail address?'
7182         . ./myread
7183         cf_email="$ans"
7184         case "$cf_email" in
7185         *@*.*) cont='' ;;
7186         *)
7187                 rp='Address does not look like an Internet one.  Use it anyway?'
7188                 case "$fastread" in
7189                 yes) dflt=y ;;
7190                 *) dflt=n ;;
7191                 esac
7192                 . ./myread
7193                 case "$ans" in
7194                 y*) cont='' ;;
7195                 *) echo " " ;;
7196                 esac
7197                 ;;
7198         esac
7199 done
7200
7201 $cat <<EOM
7202
7203 If you or somebody else will be maintaining perl at your site, please
7204 fill in the correct e-mail address here so that they may be contacted
7205 if necessary. Currently, the "perlbug" program included with perl
7206 will send mail to this address in addition to perlbug@perl.com. You may
7207 enter "none" for no administrator.
7208
7209 EOM
7210 case "$perladmin" in
7211 '') dflt="$cf_email";;
7212 *) dflt="$perladmin";;
7213 esac
7214 rp='Perl administrator e-mail address'
7215 . ./myread
7216 perladmin="$ans"
7217
7218 : figure out how to guarantee perl startup
7219 case "$startperl" in
7220 '')
7221         case "$sharpbang" in
7222         *!)
7223                 $cat <<EOH
7224
7225 I can use the #! construct to start perl on your system. This will
7226 make startup of perl scripts faster, but may cause problems if you
7227 want to share those scripts and perl is not in a standard place
7228 ($binexp/perl) on all your platforms. The alternative is to force
7229 a shell by starting the script with a single ':' character.
7230
7231 EOH
7232                 dflt="$binexp/perl"
7233                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7234                 . ./myread
7235                 case "$ans" in
7236                 none)   startperl=": # use perl";;
7237                 *)      startperl="#!$ans"
7238                         if $test 30 -lt `echo "$ans" | wc -c`; then
7239                                 $cat >&4 <<EOM
7240
7241 WARNING:  Some systems limit the #! command to 32 characters.
7242 If you experience difficulty running Perl scripts with #!, try
7243 installing Perl in a directory with a shorter pathname.
7244
7245 EOM
7246                         fi ;;
7247                 esac
7248                 ;;
7249         *) startperl=": # use perl"
7250                 ;;
7251         esac
7252         ;;
7253 esac
7254 echo "I'll use $startperl to start perl scripts."
7255
7256 : figure best path for perl in scripts
7257 case "$perlpath" in
7258 '')
7259         perlpath="$binexp/perl"
7260         case "$startperl" in
7261         *!*) ;;
7262         *)
7263                 $cat <<EOH
7264
7265 I will use the "eval 'exec'" idiom to start Perl on your system.
7266 I can use the full path of your Perl binary for this purpose, but
7267 doing so may cause problems if you want to share those scripts and
7268 Perl is not always in a standard place ($binexp/perl).
7269
7270 EOH
7271                 dflt="$binexp/perl"
7272                 rp="What path shall I use in \"eval 'exec'\"?"
7273                 . ./myread
7274                 perlpath="$ans"
7275                 ;;
7276         esac
7277         ;;
7278 esac
7279 case "$startperl" in
7280 *!*)    ;;
7281 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7282 esac
7283
7284 : determine where public executable scripts go
7285 set scriptdir scriptdir
7286 eval $prefixit
7287 case "$scriptdir" in
7288 '')
7289         dflt="$bin"
7290         : guess some guesses
7291         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7292         $test -d /usr/share/bin     && dflt=/usr/share/bin
7293         $test -d /usr/local/script  && dflt=/usr/local/script
7294         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7295         $test -d $prefixexp/script  && dflt=$prefixexp/script
7296         set dflt
7297         eval $prefixup
7298         ;;
7299 *)  dflt="$scriptdir"
7300         ;;
7301 esac
7302 $cat <<EOM
7303  
7304 Some installations have a separate directory just for executable scripts so
7305 that they can mount it across multiple architectures but keep the scripts in
7306 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7307 Or you might just lump your scripts in with all your other executables.
7308  
7309 EOM
7310 fn=d~
7311 rp='Where do you keep publicly executable scripts?'
7312 . ./getfile
7313 if $test "X$ansexp" != "X$scriptdirexp"; then
7314         installscript=''
7315 fi
7316 scriptdir="$ans"
7317 scriptdirexp="$ansexp"
7318 : Change installation prefix, if necessary.
7319 if $test X"$prefix" != X"$installprefix"; then
7320         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7321 else
7322         installscript="$scriptdirexp"
7323 fi
7324
7325 : determine where add-on public executables go
7326 case "$sitebin" in
7327 '')     dflt=$siteprefix/bin ;;
7328 *)      dflt=$sitebin ;;
7329 esac
7330 fn=d~
7331 rp='Pathname where the add-on public executables should be installed?'
7332 . ./getfile
7333 sitebin="$ans"
7334 sitebinexp="$ansexp"
7335 : Change installation prefix, if necessary.
7336 if $test X"$prefix" != X"$installprefix"; then
7337         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7338 else
7339         installsitebin="$sitebinexp"
7340 fi
7341
7342 : see if sqrtl exists
7343 set sqrtl d_sqrtl
7344 eval $inlibc
7345
7346 case "$ccflags" in
7347 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7348 esac
7349
7350 case "$uselongdouble" in
7351 $define|true|[yY]*)     dflt='y';;
7352 *) dflt='n';;
7353 esac
7354 cat <<EOM
7355
7356 Perl can be built to take advantage of long doubles which
7357 (if available) may give more accuracy and range for floating point numbers.
7358
7359 If this doesn't make any sense to you, just accept the default '$dflt'.
7360 EOM
7361 rp='Try to use long doubles if available?'
7362 . ./myread
7363 case "$ans" in
7364 y|Y)    val="$define"   ;;
7365 *)      val="$undef"    ;;
7366 esac
7367 set uselongdouble
7368 eval $setvar
7369
7370 case "$uselongdouble" in
7371 true|[yY]*) uselongdouble="$define" ;;
7372 esac
7373
7374 case "$uselongdouble" in
7375 $define)
7376 : Look for a hint-file generated 'call-back-unit'.  If the
7377 : user has specified that long doubles should be used,
7378 : we may need to set or change some other defaults.
7379         if $test -f uselongdouble.cbu; then
7380                 echo "Your platform has some specific hints for long doubles, using them..."
7381                 . ./uselongdouble.cbu
7382         else
7383                 $cat <<EOM
7384 (Your platform doesn't have any specific hints for long doubles.)
7385 EOM
7386         fi
7387         ;;
7388 esac
7389
7390 case "$uselongdouble:$d_sqrtl" in
7391 $define:$undef)
7392                 $cat <<EOM >&4
7393
7394 *** You requested the use of long doubles but you do not seem to have
7395 *** the mathematic functions for long doubles.  I'm disabling the use
7396 *** of long doubles.
7397
7398 EOM
7399         uselongdouble=$undef
7400         ;;
7401 esac
7402
7403 case "$useperlio" in
7404 $define|true|[yY]*)     dflt='y';;
7405 *) dflt='n';;
7406 esac
7407 cat <<EOM
7408
7409 Previous version of $package used the standard IO mechanisms as defined
7410 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7411 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7412 the default.  This abstraction layer can use AT&T's sfio (if you already
7413 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7414 problems with some extension modules.  Using PerlIO with stdio is safe,
7415 but it is slower than plain stdio and therefore is not the default.
7416
7417 If this doesn't make any sense to you, just accept the default '$dflt'.
7418 EOM
7419 rp='Use the experimental PerlIO abstraction layer?'
7420 . ./myread
7421 case "$ans" in
7422 y|Y) 
7423         val="$define"
7424         ;;     
7425 *)      
7426         echo "Ok, doing things the stdio way"
7427         val="$undef"
7428         ;;
7429 esac
7430 set useperlio
7431 eval $setvar 
7432
7433 case "$vendorprefix" in
7434 '')     d_vendorbin="$undef"
7435         vendorbin=''
7436         vendorbinexp=''
7437         ;;
7438 *)      d_vendorbin="$define"
7439         : determine where vendor-supplied executables go.
7440         case "$vendorbin" in
7441         '') dflt=$vendorprefix/bin ;;
7442         *)      dflt="$vendorbin" ;;
7443         esac
7444         fn=d~+
7445         rp='Pathname for the vendor-supplied executables directory?'
7446         . ./getfile
7447         vendorbin="$ans"
7448         vendorbinexp="$ansexp"
7449         ;;
7450 esac
7451 : Change installation prefix, if necessary.
7452 if $test X"$prefix" != X"$installprefix"; then
7453         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7454 else
7455         installvendorbin="$vendorbinexp"
7456 fi
7457
7458 : see if qgcvt exists
7459 set qgcvt d_qgcvt
7460 eval $inlibc
7461
7462 : check for length of double
7463 echo " "
7464 case "$doublesize" in
7465 '')
7466         echo "Checking to see how big your double precision numbers are..." >&4
7467         $cat >try.c <<'EOCP'
7468 #include <stdio.h>
7469 int main()
7470 {
7471     printf("%d\n", (int)sizeof(double));
7472     exit(0);
7473 }
7474 EOCP
7475         set try
7476         if eval $compile_ok; then
7477                 doublesize=`./try`
7478                 echo "Your double is $doublesize bytes long."
7479         else
7480                 dflt='8'
7481                 echo "(I can't seem to compile the test program.  Guessing...)"
7482                 rp="What is the size of a double precision number (in bytes)?"
7483                 . ./myread
7484                 doublesize="$ans"
7485         fi
7486         ;;
7487 esac
7488 $rm -f try.c try
7489
7490 : check for long doubles
7491 echo " "
7492 echo "Checking to see if you have long double..." >&4
7493 echo 'int main() { long double x = 7.0; }' > try.c
7494 set try
7495 if eval $compile; then
7496         val="$define"
7497         echo "You have long double."
7498 else
7499         val="$undef"
7500         echo "You do not have long double."
7501 fi
7502 $rm try.*
7503 set d_longdbl
7504 eval $setvar
7505
7506 : check for length of long double
7507 case "${d_longdbl}${longdblsize}" in
7508 $define)
7509         echo " "
7510         echo "Checking to see how big your long doubles are..." >&4
7511         $cat >try.c <<'EOCP'
7512 #include <stdio.h>
7513 int main()
7514 {
7515         printf("%d\n", sizeof(long double));
7516 }
7517 EOCP
7518         set try
7519         set try
7520         if eval $compile; then
7521                 longdblsize=`./try$exe_ext`
7522                 echo "Your long doubles are $longdblsize bytes long."
7523         else
7524                 dflt='8'
7525                 echo " "
7526                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7527                 rp="What is the size of a long double (in bytes)?"
7528                 . ./myread
7529                 longdblsize="$ans"
7530         fi
7531         if $test "X$doublesize" = "X$longdblsize"; then
7532                 echo "(That isn't any different from an ordinary double.)"
7533         fi      
7534         ;;
7535 esac
7536 $rm -f try.* try
7537
7538 echo " "
7539
7540 if $test X"$d_longdbl" = X"$define"; then
7541
7542 echo "Checking how to print long doubles..." >&4
7543
7544 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7545         $cat >try.c <<'EOCP'
7546 #include <sys/types.h>
7547 #include <stdio.h>
7548 int main() {
7549   double d = 123.456;
7550   printf("%.3f\n", d);
7551 }
7552 EOCP
7553         set try
7554         if eval $compile; then
7555                 yyy=`./try$exe_ext`
7556                 case "$yyy" in
7557                 123.456)
7558                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7559                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7560                         echo "We will use %f."
7561                         ;;
7562                 esac
7563         fi
7564 fi
7565
7566 if $test X"$sPRIfldbl" = X; then
7567         $cat >try.c <<'EOCP'
7568 #include <sys/types.h>
7569 #include <stdio.h>
7570 int main() {
7571   long double d = 123.456;
7572   printf("%.3llf\n", d);
7573 }
7574 EOCP
7575         set try
7576         if eval $compile; then
7577                 yyy=`./try$exe_ext`
7578                 case "$yyy" in
7579                 123.456)
7580                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7581                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7582                         echo "We will use %llf."
7583                         ;;
7584                 esac
7585         fi
7586 fi
7587
7588 if $test X"$sPRIfldbl" = X; then
7589         $cat >try.c <<'EOCP'
7590 #include <sys/types.h>
7591 #include <stdio.h>
7592 int main() {
7593   long double d = 123.456;
7594   printf("%.3Lf\n", d);
7595 }
7596 EOCP
7597         set try
7598         if eval $compile; then
7599                 yyy=`./try$exe_ext`
7600                 case "$yyy" in
7601                 123.456)
7602                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7603                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7604                         echo "We will use %Lf."
7605                         ;;
7606                 esac
7607         fi
7608 fi
7609
7610 if $test X"$sPRIfldbl" = X; then
7611         $cat >try.c <<'EOCP'
7612 #include <sys/types.h>
7613 #include <stdio.h>
7614 int main() {
7615   long double d = 123.456;
7616   printf("%.3lf\n", d);
7617 }
7618 EOCP
7619         set try
7620         if eval $compile; then
7621                 yyy=`./try$exe_ext`
7622                 case "$yyy" in
7623                 123.456)
7624                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7625                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7626                         echo "We will use %lf."
7627                         ;;
7628                 esac
7629         fi
7630 fi
7631
7632 if $test X"$sPRIfldbl" = X; then
7633         echo "Cannot figure out how to print long doubles." >&4
7634 fi
7635
7636 $rm -f try try.*
7637
7638 fi # d_longdbl
7639
7640 case "$sPRIfldbl" in
7641 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7642         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7643         ;;
7644 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7645         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7646         ;;
7647 esac
7648
7649 : Check how to convert floats to strings.
7650 if test "X$d_Gconvert" = X; then
7651         echo " "
7652         echo "Checking for an efficient way to convert floats to strings."
7653         echo " " > try.c
7654         case "$uselongdouble" in
7655         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7656         esac
7657         case "$d_longdbl" in
7658         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7659         esac
7660         case "$d_PRIgldbl" in
7661         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7662         esac
7663         $cat >>try.c <<EOP
7664 #ifdef TRY_gconvert
7665 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7666 char *myname = "gconvert";
7667 #endif
7668 #ifdef TRY_gcvt
7669 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7670 char *myname = "gcvt";
7671 #endif
7672 #ifdef TRY_qgcvt
7673 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7674 char *myname = "qgcvt";
7675 #define DOUBLETYPE long double
7676 #endif
7677 #ifdef TRY_sprintf
7678 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7679 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7680 #else
7681 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7682 #endif
7683 char *myname = "sprintf";
7684 #endif
7685
7686 #ifndef DOUBLETYPE
7687 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7688 #define DOUBLETYPE long double
7689 #else
7690 #define DOUBLETYPE double
7691 #endif
7692 #endif
7693
7694 #include <stdio.h>
7695
7696 #define I_STDLIB $i_stdlib
7697 #ifdef I_STDLIB
7698 #include <stdlib.h>
7699 #endif
7700
7701 int
7702 checkit(expect, got)
7703 char *expect;
7704 char *got;
7705 {
7706     if (strcmp(expect, got)) {
7707                 printf("%s oddity:  Expected %s, got %s\n",
7708                         myname, expect, got);
7709                 exit(1);
7710         }
7711 }
7712
7713 int main()
7714
7715         char buf[64]; 
7716         buf[63] = '\0';
7717
7718         /* This must be 1st test on (which?) platform */
7719         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7720         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7721         checkit("0.1", buf);
7722
7723         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7724         checkit("1", buf);
7725
7726         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7727         checkit("1.1", buf);
7728
7729         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7730         checkit("1.01", buf);
7731
7732         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7733         checkit("1.001", buf);
7734
7735         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7736         checkit("1.0001", buf);
7737
7738         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7739         checkit("1.00001", buf);
7740
7741         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7742         checkit("1.000001", buf);
7743
7744         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7745         checkit("0", buf);
7746
7747         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7748         checkit("-1", buf);
7749
7750         /* Some Linux gcvt's give 1.e+5 here. */
7751         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7752         checkit("100000", buf);
7753         
7754         /* Some Linux gcvt's give -1.e+5 here. */
7755         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7756         checkit("-100000", buf);
7757
7758         exit(0);
7759 }
7760 EOP
7761         case "$d_Gconvert" in
7762         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7763         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7764         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7765         *) xxx_list='gconvert gcvt sprintf' ;;
7766         esac
7767
7768         case "$d_longdbl$uselongdouble$d_qgcvt" in
7769         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7770         esac
7771
7772         for xxx_convert in $xxx_list; do
7773                 echo "Trying $xxx_convert..."
7774                 $rm -f try try$_o
7775                 set try -DTRY_$xxx_convert
7776                 if eval $compile; then
7777                         echo "$xxx_convert() found." >&4
7778                         if ./try; then
7779                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7780                                 break;
7781                         else
7782                                 echo "...But $xxx_convert didn't work as I expected."
7783                         fi
7784                 else
7785                         echo "$xxx_convert NOT found." >&4
7786                 fi
7787         done
7788                 
7789         case "$xxx_convert" in
7790         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7791         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7792         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7793         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7794            "$define$define$define")
7795               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7796            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7797            esac
7798            ;;  
7799         esac
7800 fi
7801
7802 : Initialize h_fcntl
7803 h_fcntl=false
7804
7805 : Initialize h_sysfile
7806 h_sysfile=false
7807
7808 : access call always available on UNIX
7809 set access d_access
7810 eval $inlibc
7811
7812 : locate the flags for 'access()'
7813 case "$d_access" in
7814 "$define")
7815         echo " "
7816         $cat >access.c <<'EOCP'
7817 #include <sys/types.h>
7818 #ifdef I_FCNTL
7819 #include <fcntl.h>
7820 #endif
7821 #ifdef I_SYS_FILE
7822 #include <sys/file.h>
7823 #endif
7824 #ifdef I_UNISTD
7825 #include <unistd.h>
7826 #endif
7827 int main() {
7828         exit(R_OK);
7829 }
7830 EOCP
7831         : check sys/file.h first, no particular reason here
7832         if $test `./findhdr sys/file.h` && \
7833                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7834                 h_sysfile=true;
7835                 echo "<sys/file.h> defines the *_OK access constants." >&4
7836         elif $test `./findhdr fcntl.h` && \
7837                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7838                 h_fcntl=true;
7839                 echo "<fcntl.h> defines the *_OK access constants." >&4
7840         elif $test `./findhdr unistd.h` && \
7841                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7842                 echo "<unistd.h> defines the *_OK access constants." >&4
7843         else
7844                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7845         fi
7846         ;;
7847 esac
7848 $rm -f access*
7849
7850 : see if accessx exists
7851 set accessx d_accessx
7852 eval $inlibc
7853
7854 : see if alarm exists
7855 set alarm d_alarm
7856 eval $inlibc
7857
7858 : see if atolf exists
7859 set atolf d_atolf
7860 eval $inlibc
7861
7862 : see if atoll exists
7863 set atoll d_atoll
7864 eval $inlibc
7865
7866 : Look for GNU-cc style attribute checking
7867 echo " "
7868 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7869 $cat >attrib.c <<'EOCP'
7870 #include <stdio.h>
7871 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7872 EOCP
7873 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7874         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7875                 echo "Your C compiler doesn't fully support __attribute__."
7876                 val="$undef"
7877         else
7878                 echo "Your C compiler supports __attribute__."
7879                 val="$define"
7880         fi
7881 else
7882         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7883         val="$undef"
7884 fi
7885 set d_attribut
7886 eval $setvar
7887 $rm -f attrib*
7888
7889 : see if bcmp exists
7890 set bcmp d_bcmp
7891 eval $inlibc
7892
7893 : see if bcopy exists
7894 set bcopy d_bcopy
7895 eval $inlibc
7896
7897 : see if this is a unistd.h system
7898 set unistd.h i_unistd
7899 eval $inhdr
7900
7901 : see if getpgrp exists
7902 set getpgrp d_getpgrp
7903 eval $inlibc
7904
7905 case "$d_getpgrp" in
7906 "$define")
7907         echo " "
7908         echo "Checking to see which flavor of getpgrp is in use..."
7909         $cat >set.c <<EOP
7910 #$i_unistd I_UNISTD
7911 #include <sys/types.h>
7912 #ifdef I_UNISTD
7913 #  include <unistd.h>
7914 #endif
7915 int main()
7916 {
7917         if (getuid() == 0) {
7918                 printf("(I see you are running Configure as super-user...)\n");
7919                 setuid(1);
7920         }
7921 #ifdef TRY_BSD_PGRP
7922         if (getpgrp(1) == 0)
7923                 exit(0);
7924 #else
7925         if (getpgrp() > 0)
7926                 exit(0);
7927 #endif
7928         exit(1);
7929 }
7930 EOP
7931         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7932                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7933                 val="$define"
7934         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7935                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7936                 val="$undef"
7937         else
7938                 echo "I can't seem to compile and run the test program."
7939                 if ./usg; then
7940                         xxx="a USG one, i.e. you use getpgrp()."
7941                 else
7942                         # SVR4 systems can appear rather BSD-ish.
7943                         case "$i_unistd" in
7944                         $undef)
7945                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7946                                 val="$define"
7947                                 ;;
7948                         $define)
7949                                 xxx="probably a USG one, i.e. you use getpgrp()."
7950                                 val="$undef"
7951                                 ;;
7952                         esac
7953                 fi
7954                 echo "Assuming your getpgrp is $xxx" >&4
7955         fi
7956         ;;
7957 *) val="$undef";;
7958 esac
7959 set d_bsdgetpgrp
7960 eval $setvar
7961 $rm -f set set.c
7962
7963 : see if setpgrp exists
7964 set setpgrp d_setpgrp
7965 eval $inlibc
7966
7967 case "$d_setpgrp" in
7968 "$define")
7969         echo " "
7970         echo "Checking to see which flavor of setpgrp is in use..."
7971         $cat >set.c <<EOP
7972 #$i_unistd I_UNISTD
7973 #include <sys/types.h>
7974 #ifdef I_UNISTD
7975 #  include <unistd.h>
7976 #endif
7977 int main()
7978 {
7979         if (getuid() == 0) {
7980                 printf("(I see you are running Configure as super-user...)\n");
7981                 setuid(1);
7982         }
7983 #ifdef TRY_BSD_PGRP
7984         if (-1 == setpgrp(1, 1))
7985                 exit(0);
7986 #else
7987         if (setpgrp() != -1)
7988                 exit(0);
7989 #endif
7990         exit(1);
7991 }
7992 EOP
7993         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7994                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7995                 val="$define"
7996         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7997                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7998                 val="$undef"
7999         else
8000                 echo "(I can't seem to compile and run the test program.)"
8001                 if ./usg; then
8002                         xxx="a USG one, i.e. you use setpgrp()."
8003                 else
8004                         # SVR4 systems can appear rather BSD-ish.
8005                         case "$i_unistd" in
8006                         $undef)
8007                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8008                                 val="$define"
8009                                 ;;
8010                         $define)
8011                                 xxx="probably a USG one, i.e. you use setpgrp()."
8012                                 val="$undef"
8013                                 ;;
8014                         esac
8015                 fi
8016                 echo "Assuming your setpgrp is $xxx" >&4
8017         fi
8018         ;;
8019 *) val="$undef";;
8020 esac
8021 set d_bsdsetpgrp
8022 eval $setvar
8023 $rm -f set set.c
8024 : see if bzero exists
8025 set bzero d_bzero
8026 eval $inlibc
8027
8028 : see if signal is declared as pointer to function returning int or void
8029 echo " "
8030 xxx=`./findhdr signal.h`
8031 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8032 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8033         echo "You have int (*signal())() instead of void." >&4
8034         val="$undef"
8035 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8036         echo "You have void (*signal())()." >&4
8037         val="$define"
8038 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8039         echo "You have int (*signal())() instead of void." >&4
8040         val="$undef"
8041 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8042         echo "You have void (*signal())()." >&4
8043         val="$define"
8044 else
8045         case "$d_voidsig" in
8046         '')
8047         echo "I can't determine whether signal handler returns void or int..." >&4
8048                 dflt=void
8049                 rp="What type does your signal handler return?"
8050                 . ./myread
8051                 case "$ans" in
8052                 v*) val="$define";;
8053                 *) val="$undef";;
8054                 esac;;
8055         "$define")
8056                 echo "As you already told me, signal handler returns void." >&4
8057                 val="$define"
8058                 ;;
8059         *)      echo "As you already told me, signal handler returns int." >&4
8060                 val="$undef"
8061                 ;;
8062         esac
8063 fi
8064 set d_voidsig
8065 eval $setvar
8066 case "$d_voidsig" in
8067 "$define") signal_t="void";;
8068 *) signal_t="int";;
8069 esac
8070 $rm -f $$.tmp
8071
8072 : check for ability to cast large floats to 32-bit ints.
8073 echo " "
8074 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8075 if $test "$intsize" -ge 4; then
8076         xxx=int
8077 else
8078         xxx=long
8079 fi
8080 $cat >try.c <<EOCP
8081 #include <stdio.h>
8082 #include <sys/types.h>
8083 #include <signal.h>
8084 $signal_t blech(s) int s; { exit(3); }
8085 int main()
8086 {
8087         $xxx i32;
8088         double f, g;
8089         int result = 0;
8090         char str[16];
8091         signal(SIGFPE, blech);
8092
8093         /* Don't let compiler optimize the test away.  Store the number 
8094            in a writable string for gcc to pass to sscanf under HP/UX.
8095         */
8096         sprintf(str, "2147483647");
8097         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8098         g = 10 * f;
8099         i32  = ($xxx) g;
8100
8101         /* x86 processors will probably give 0x8000 0000, which is a
8102        sign change.  We don't want that.  We want to mimic SPARC
8103            behavior here, which is to preserve the sign and give
8104            back 0x7fff ffff.
8105         */
8106         if (i32 != ($xxx) f)
8107                 result |= 1;
8108         exit(result);
8109 }
8110 EOCP
8111 set try
8112 if eval $compile_ok; then
8113         ./try
8114         yyy=$?
8115 else
8116         echo "(I can't seem to compile the test program--assuming it can't)"
8117         yyy=1
8118 fi
8119 case "$yyy" in
8120 0)      val="$define"
8121         echo "Yup, it can."
8122         ;;
8123 *)      val="$undef"
8124         echo "Nope, it can't."
8125         ;;
8126 esac
8127 set d_casti32
8128 eval $setvar
8129 $rm -f try try.*
8130
8131 : check for ability to cast negative floats to unsigned
8132 echo " "
8133 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8134 $cat >try.c <<EOCP
8135 #include <stdio.h>
8136 #include <sys/types.h>
8137 #include <signal.h>
8138 $signal_t blech(s) int s; { exit(7); }
8139 $signal_t blech_in_list(s) int s; { exit(4); }
8140 unsigned long dummy_long(p) unsigned long p; { return p; }
8141 unsigned int dummy_int(p) unsigned int p; { return p; }
8142 unsigned short dummy_short(p) unsigned short p; { return p; }
8143 int main()
8144 {
8145         double f;
8146         unsigned long along;
8147         unsigned int aint;
8148         unsigned short ashort;
8149         int result = 0;
8150         char str[16];
8151         
8152         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8153            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8154            optimized the whole file away
8155         */
8156         /* Store the number in a writable string for gcc to pass to 
8157            sscanf under HP/UX.
8158         */
8159         sprintf(str, "-123");
8160         sscanf(str, "%lf", &f);  /* f = -123.; */
8161
8162         signal(SIGFPE, blech);
8163         along = (unsigned long)f;
8164         aint = (unsigned int)f;
8165         ashort = (unsigned short)f;
8166         if (along != (unsigned long)-123)
8167                 result |= 1;
8168         if (aint != (unsigned int)-123)
8169                 result |= 1;
8170         if (ashort != (unsigned short)-123)
8171                 result |= 1;
8172         sprintf(str, "1073741824.");
8173         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8174         f = f + f;
8175         along = 0;
8176         along = (unsigned long)f;
8177         if (along != 0x80000000)
8178                 result |= 2;
8179         f -= 1.;
8180         along = 0;
8181         along = (unsigned long)f;
8182         if (along != 0x7fffffff)
8183                 result |= 1;
8184         f += 2.;
8185         along = 0;
8186         along = (unsigned long)f;
8187         if (along != 0x80000001)
8188                 result |= 2;
8189         if (result)
8190                 exit(result);
8191         signal(SIGFPE, blech_in_list);
8192         sprintf(str, "123.");
8193         sscanf(str, "%lf", &f);  /* f = 123.; */
8194         along = dummy_long((unsigned long)f);
8195         aint = dummy_int((unsigned int)f);
8196         ashort = dummy_short((unsigned short)f);
8197         if (along != (unsigned long)123)
8198                 result |= 4;
8199         if (aint != (unsigned int)123)
8200                 result |= 4;
8201         if (ashort != (unsigned short)123)
8202                 result |= 4;
8203         exit(result);
8204
8205 }
8206 EOCP
8207 set try
8208 if eval $compile_ok; then
8209         ./try
8210         castflags=$?
8211 else
8212         echo "(I can't seem to compile the test program--assuming it can't)"
8213         castflags=7
8214 fi
8215 case "$castflags" in
8216 0)      val="$define"
8217         echo "Yup, it can."
8218         ;;
8219 *)      val="$undef"
8220         echo "Nope, it can't."
8221         ;;
8222 esac
8223 set d_castneg
8224 eval $setvar
8225 $rm -f try.*
8226
8227 : see if vprintf exists
8228 echo " "
8229 if set vprintf val -f d_vprintf; eval $csym; $val; then
8230         echo 'vprintf() found.' >&4
8231         val="$define"
8232         $cat >vprintf.c <<'EOF'
8233 #include <varargs.h>
8234
8235 int main() { xxx("foo"); }
8236
8237 xxx(va_alist)
8238 va_dcl
8239 {
8240         va_list args;
8241         char buf[10];
8242
8243         va_start(args);
8244         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8245 }
8246 EOF
8247         set vprintf
8248         if eval $compile && ./vprintf; then
8249                 echo "Your vsprintf() returns (int)." >&4
8250                 val2="$undef"
8251         else
8252                 echo "Your vsprintf() returns (char*)." >&4
8253                 val2="$define"
8254         fi
8255 else
8256         echo 'vprintf() NOT found.' >&4
8257                 val="$undef"
8258                 val2="$undef"
8259 fi
8260 set d_vprintf
8261 eval $setvar
8262 val=$val2
8263 set d_charvspr
8264 eval $setvar
8265
8266 : see if chown exists
8267 set chown d_chown
8268 eval $inlibc
8269
8270 : see if chroot exists
8271 set chroot d_chroot
8272 eval $inlibc
8273
8274 : see if chsize exists
8275 set chsize d_chsize
8276 eval $inlibc
8277
8278 : check for const keyword
8279 echo " "
8280 echo 'Checking to see if your C compiler knows about "const"...' >&4
8281 $cat >const.c <<'EOCP'
8282 typedef struct spug { int drokk; } spug;
8283 int main()
8284 {
8285         const char *foo;
8286         const spug y;
8287 }
8288 EOCP
8289 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8290         val="$define"
8291         echo "Yup, it does."
8292 else
8293         val="$undef"
8294         echo "Nope, it doesn't."
8295 fi
8296 set d_const
8297 eval $setvar
8298
8299 : see if crypt exists
8300 echo " "
8301 if set crypt val -f d_crypt; eval $csym; $val; then
8302         echo 'crypt() found.' >&4
8303         val="$define"
8304         cryptlib=''
8305 else
8306         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8307         if $test -z "$cryptlib"; then
8308                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8309         else
8310                 cryptlib=-lcrypt
8311         fi
8312         if $test -z "$cryptlib"; then
8313                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8314         else
8315                 cryptlib=-lcrypt
8316         fi
8317         if $test -z "$cryptlib"; then
8318                 cryptlib=`./loc libcrypt$_a "" $libpth`
8319         else
8320                 cryptlib=-lcrypt
8321         fi
8322         if $test -z "$cryptlib"; then
8323                 echo 'crypt() NOT found.' >&4
8324                 val="$undef"
8325         else
8326                 val="$define"
8327         fi
8328 fi
8329 set d_crypt
8330 eval $setvar
8331
8332 : get csh whereabouts
8333 case "$csh" in
8334 'csh') val="$undef" ;;
8335 *) val="$define" ;;
8336 esac
8337 set d_csh
8338 eval $setvar
8339 : Respect a hint or command line value for full_csh.
8340 case "$full_csh" in
8341 '') full_csh=$csh ;;
8342 esac
8343
8344 : see if cuserid exists
8345 set cuserid d_cuserid
8346 eval $inlibc
8347
8348 : see if this is a limits.h system
8349 set limits.h i_limits
8350 eval $inhdr
8351
8352 : see if this is a float.h system
8353 set float.h i_float
8354 eval $inhdr
8355
8356 : See if number of significant digits in a double precision number is known
8357 echo " "
8358 $cat >dbl_dig.c <<EOM
8359 #$i_limits I_LIMITS
8360 #$i_float I_FLOAT
8361 #ifdef I_LIMITS
8362 #include <limits.h>
8363 #endif
8364 #ifdef I_FLOAT
8365 #include <float.h>
8366 #endif
8367 #ifdef DBL_DIG
8368 printf("Contains DBL_DIG");
8369 #endif
8370 EOM
8371 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8372 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8373         echo "DBL_DIG found." >&4
8374         val="$define"
8375 else
8376         echo "DBL_DIG NOT found." >&4
8377         val="$undef"
8378 fi
8379 $rm -f dbl_dig.?
8380 set d_dbl_dig
8381 eval $setvar
8382
8383 : see if difftime exists
8384 set difftime d_difftime
8385 eval $inlibc
8386
8387 : see if this is a dirent system
8388 echo " "
8389 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8390         val="$define"
8391         echo "<dirent.h> found." >&4
8392 else
8393         val="$undef"
8394         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8395                 echo "<sys/dir.h> found." >&4
8396                 echo " "
8397         else
8398                 xinc=`./findhdr sys/ndir.h`
8399         fi
8400         echo "<dirent.h> NOT found." >&4
8401 fi
8402 set i_dirent
8403 eval $setvar
8404
8405 : Look for type of directory structure.
8406 echo " "
8407 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8408
8409 case "$direntrytype" in
8410 ''|' ')
8411         case "$i_dirent" in
8412         $define) guess1='struct dirent' ;;
8413         *) guess1='struct direct'  ;;
8414         esac
8415         ;;
8416 *)      guess1="$direntrytype"
8417         ;;
8418 esac
8419
8420 case "$guess1" in
8421 'struct dirent') guess2='struct direct' ;;
8422 *) guess2='struct dirent' ;;
8423 esac
8424                 
8425 if $contains "$guess1" try.c >/dev/null 2>&1; then
8426         direntrytype="$guess1"
8427         echo "Your directory entries are $direntrytype." >&4
8428 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8429         direntrytype="$guess2"
8430         echo "Your directory entries seem to be $direntrytype." >&4
8431 else
8432         echo "I don't recognize your system's directory entries." >&4
8433         rp="What type is used for directory entries on this system?"
8434         dflt="$guess1"
8435         . ./myread
8436         direntrytype="$ans"
8437 fi
8438 $rm -f try.c
8439
8440
8441 : see if the directory entry stores field length
8442 echo " "
8443 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8444 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8445         echo "Good, your directory entry keeps length information in d_namlen." >&4
8446         val="$define"
8447 else
8448         echo "Your directory entry does not know about the d_namlen field." >&4
8449         val="$undef"
8450 fi
8451 set d_dirnamlen
8452 eval $setvar
8453 $rm -f try.c
8454
8455 : see if dlerror exists
8456 xxx_runnm="$runnm"
8457 runnm=false
8458 set dlerror d_dlerror
8459 eval $inlibc
8460 runnm="$xxx_runnm"
8461
8462 : see if dlfcn is available
8463 set dlfcn.h i_dlfcn
8464 eval $inhdr
8465
8466 case "$usedl" in
8467 $define|y|true)
8468         $cat << EOM
8469
8470 On a few systems, the dynamically loaded modules that perl generates and uses
8471 will need a different extension than shared libs. The default will probably
8472 be appropriate.
8473
8474 EOM
8475         case "$dlext" in
8476         '')     dflt="$so" ;;
8477         *)      dflt="$dlext" ;;
8478         esac
8479         rp='What is the extension of dynamically loaded modules'
8480         . ./myread
8481         dlext="$ans"
8482         ;;
8483 *)
8484         dlext="none"
8485         ;;
8486 esac
8487
8488 : Check if dlsym need a leading underscore
8489 echo " "
8490 val="$undef"
8491
8492 case "$dlsrc" in
8493 dl_dlopen.xs)
8494         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8495         $cat >dyna.c <<'EOM'
8496 fred () { }
8497 EOM
8498
8499 $cat >fred.c<<EOM
8500
8501 #include <stdio.h>
8502 #$i_dlfcn I_DLFCN
8503 #ifdef I_DLFCN
8504 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8505 #else
8506 #include <sys/types.h>
8507 #include <nlist.h>
8508 #include <link.h>
8509 #endif
8510
8511 extern int fred() ;
8512
8513 int main()
8514 {
8515     void * handle ;
8516     void * symbol ;
8517 #ifndef RTLD_LAZY
8518     int mode = 1 ;
8519 #else
8520     int mode = RTLD_LAZY ;
8521 #endif
8522     handle = dlopen("./dyna.$dlext", mode) ;
8523     if (handle == NULL) {
8524         printf ("1\n") ;
8525         fflush (stdout) ;
8526         exit(0);
8527     }
8528     symbol = dlsym(handle, "fred") ;
8529     if (symbol == NULL) {
8530         /* try putting a leading underscore */
8531         symbol = dlsym(handle, "_fred") ;
8532         if (symbol == NULL) {
8533             printf ("2\n") ;
8534             fflush (stdout) ;
8535             exit(0);
8536         }
8537         printf ("3\n") ;
8538     }
8539     else
8540         printf ("4\n") ;
8541     fflush (stdout) ;
8542     exit(0);
8543 }
8544 EOM
8545         : Call the object file tmp-dyna.o in case dlext=o.
8546         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8547                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8548                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8549                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8550                 xxx=`./fred`
8551                 case $xxx in
8552                 1)      echo "Test program failed using dlopen." >&4
8553                         echo "Perhaps you should not use dynamic loading." >&4;;
8554                 2)      echo "Test program failed using dlsym." >&4
8555                         echo "Perhaps you should not use dynamic loading." >&4;;
8556                 3)      echo "dlsym needs a leading underscore" >&4
8557                         val="$define" ;;
8558                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8559                 esac
8560         else
8561                 echo "I can't compile and run the test program." >&4
8562                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8563         fi
8564         ;;
8565 esac
8566                 
8567 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8568
8569 set d_dlsymun
8570 eval $setvar
8571
8572 hasproto='varname=$1; func=$2; shift; shift;
8573 while $test $# -ge 2; do
8574         case "$1" in
8575         $define) echo "#include <$2>";;
8576         esac ;
8577     shift 2;
8578 done > try.c;
8579 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8580 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8581         echo "$func() prototype found.";
8582         val="$define";
8583 else
8584         echo "$func() prototype NOT found.";
8585         val="$undef";
8586 fi;
8587 set $varname;
8588 eval $setvar;
8589 $rm -f try.c tryout.c'
8590
8591 : see if prototype for drand48 is available
8592 echo " "
8593 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8594 eval $hasproto
8595
8596 : see if dup2 exists
8597 set dup2 d_dup2
8598 eval $inlibc
8599
8600 : see if eaccess exists
8601 set eaccess d_eaccess
8602 eval $inlibc
8603
8604 : see if endgrent exists
8605 set endgrent d_endgrent
8606 eval $inlibc
8607
8608 : see if endhostent exists
8609 set endhostent d_endhent
8610 eval $inlibc
8611
8612 : see if endnetent exists
8613 set endnetent d_endnent
8614 eval $inlibc
8615
8616 : see if endprotoent exists
8617 set endprotoent d_endpent
8618 eval $inlibc
8619
8620 : see if endpwent exists
8621 set endpwent d_endpwent
8622 eval $inlibc
8623
8624 : see if endservent exists
8625 set endservent d_endsent
8626 eval $inlibc
8627
8628 : Locate the flags for 'open()'
8629 echo " "
8630 $cat >open3.c <<'EOCP'
8631 #include <sys/types.h>
8632 #ifdef I_FCNTL
8633 #include <fcntl.h>
8634 #endif
8635 #ifdef I_SYS_FILE
8636 #include <sys/file.h>
8637 #endif
8638 int main() {
8639         if(O_RDONLY);
8640 #ifdef O_TRUNC
8641         exit(0);
8642 #else
8643         exit(1);
8644 #endif
8645 }
8646 EOCP
8647 : check sys/file.h first to get FREAD on Sun
8648 if $test `./findhdr sys/file.h` && \
8649                 set open3 -DI_SYS_FILE && eval $compile; then
8650         h_sysfile=true;
8651         echo "<sys/file.h> defines the O_* constants..." >&4
8652         if ./open3; then
8653                 echo "and you have the 3 argument form of open()." >&4
8654                 val="$define"
8655         else
8656                 echo "but not the 3 argument form of open().  Oh, well." >&4
8657                 val="$undef"
8658         fi
8659 elif $test `./findhdr fcntl.h` && \
8660                 set open3 -DI_FCNTL && eval $compile; then
8661         h_fcntl=true;
8662         echo "<fcntl.h> defines the O_* constants..." >&4
8663         if ./open3; then
8664                 echo "and you have the 3 argument form of open()." >&4
8665                 val="$define"
8666         else
8667                 echo "but not the 3 argument form of open().  Oh, well." >&4
8668                 val="$undef"
8669         fi
8670 else
8671         val="$undef"
8672         echo "I can't find the O_* constant definitions!  You got problems." >&4
8673 fi
8674 set d_open3
8675 eval $setvar
8676 $rm -f open3*
8677
8678 : see which of string.h or strings.h is needed
8679 echo " "
8680 strings=`./findhdr string.h`
8681 if $test "$strings" && $test -r "$strings"; then
8682         echo "Using <string.h> instead of <strings.h>." >&4
8683         val="$define"
8684 else
8685         val="$undef"
8686         strings=`./findhdr strings.h`
8687         if $test "$strings" && $test -r "$strings"; then
8688                 echo "Using <strings.h> instead of <string.h>." >&4
8689         else
8690                 echo "No string header found -- You'll surely have problems." >&4
8691         fi
8692 fi
8693 set i_string
8694 eval $setvar
8695 case "$i_string" in
8696 "$undef") strings=`./findhdr strings.h`;;
8697 *)        strings=`./findhdr string.h`;;
8698 esac
8699
8700 : check for non-blocking I/O stuff
8701 case "$h_sysfile" in
8702 true) echo "#include <sys/file.h>" > head.c;;
8703 *)
8704         case "$h_fcntl" in
8705         true) echo "#include <fcntl.h>" > head.c;;
8706         *) echo "#include <sys/fcntl.h>" > head.c;;
8707         esac
8708         ;;
8709 esac
8710 echo " "
8711 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8712 case "$o_nonblock" in
8713 '')
8714         $cat head.c > try.c
8715         $cat >>try.c <<'EOCP'
8716 #include <stdio.h>
8717 int main() {
8718 #ifdef O_NONBLOCK
8719         printf("O_NONBLOCK\n");
8720         exit(0);
8721 #endif
8722 #ifdef O_NDELAY
8723         printf("O_NDELAY\n");
8724         exit(0);
8725 #endif
8726 #ifdef FNDELAY
8727         printf("FNDELAY\n");
8728         exit(0);
8729 #endif
8730         exit(0);
8731 }
8732 EOCP
8733         set try
8734         if eval $compile_ok; then
8735                 o_nonblock=`./try`
8736                 case "$o_nonblock" in
8737                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8738                 *) echo "Seems like we can use $o_nonblock.";;
8739                 esac
8740         else
8741                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8742         fi
8743         ;;
8744 *) echo "Using $hint value $o_nonblock.";;
8745 esac
8746 $rm -f try try.* .out core
8747
8748 echo " "
8749 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8750 case "$eagain" in
8751 '')
8752         $cat head.c > try.c
8753         $cat >>try.c <<EOCP
8754 #include <errno.h>
8755 #include <sys/types.h>
8756 #include <signal.h>
8757 #include <stdio.h> 
8758 #define MY_O_NONBLOCK $o_nonblock
8759 #ifndef errno  /* XXX need better Configure test */
8760 extern int errno;
8761 #endif
8762 #$i_unistd I_UNISTD
8763 #ifdef I_UNISTD
8764 #include <unistd.h>
8765 #endif
8766 #$i_string I_STRING
8767 #ifdef I_STRING
8768 #include <string.h>
8769 #else
8770 #include <strings.h>
8771 #endif
8772 $signal_t blech(x) int x; { exit(3); }
8773 EOCP
8774         $cat >> try.c <<'EOCP'
8775 int main()
8776 {
8777         int pd[2];
8778         int pu[2];
8779         char buf[1];
8780         char string[100];
8781
8782         pipe(pd);       /* Down: child -> parent */
8783         pipe(pu);       /* Up: parent -> child */
8784         if (0 != fork()) {
8785                 int ret;
8786                 close(pd[1]);   /* Parent reads from pd[0] */
8787                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8788                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8789                         exit(1);
8790                 signal(SIGALRM, blech);
8791                 alarm(5);
8792                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8793                         exit(2);
8794                 sprintf(string, "%d\n", ret);
8795                 write(2, string, strlen(string));
8796                 alarm(0);
8797 #ifdef EAGAIN
8798                 if (errno == EAGAIN) {
8799                         printf("EAGAIN\n");
8800                         goto ok;
8801                 }
8802 #endif
8803 #ifdef EWOULDBLOCK
8804                 if (errno == EWOULDBLOCK)
8805                         printf("EWOULDBLOCK\n");
8806 #endif
8807         ok:
8808                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8809                 sleep(2);                               /* Give it time to close our pipe */
8810                 alarm(5);
8811                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8812                 alarm(0);
8813                 sprintf(string, "%d\n", ret);
8814                 write(3, string, strlen(string));
8815                 exit(0);
8816         }
8817
8818         close(pd[0]);                   /* We write to pd[1] */
8819         close(pu[1]);                   /* We read from pu[0] */
8820         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8821         close(pd[1]);                   /* Pipe pd is now fully closed! */
8822         exit(0);                                /* Bye bye, thank you for playing! */
8823 }
8824 EOCP
8825         set try
8826         if eval $compile_ok; then
8827                 echo "$startsh" >mtry
8828                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8829                 chmod +x mtry
8830                 ./mtry >/dev/null 2>&1
8831                 case $? in
8832                 0) eagain=`$cat try.out`;;
8833                 1) echo "Could not perform non-blocking setting!";;
8834                 2) echo "I did a successful read() for something that was not there!";;
8835                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8836                 *) echo "Something terribly wrong happened during testing.";;
8837                 esac
8838                 rd_nodata=`$cat try.ret`
8839                 echo "A read() system call with no data present returns $rd_nodata."
8840                 case "$rd_nodata" in
8841                 0|-1) ;;
8842                 *)
8843                         echo "(That's peculiar, fixing that to be -1.)"
8844                         rd_nodata=-1
8845                         ;;
8846                 esac
8847                 case "$eagain" in
8848                 '')
8849                         echo "Forcing errno EAGAIN on read() with no data available."
8850                         eagain=EAGAIN
8851                         ;;
8852                 *)
8853                         echo "Your read() sets errno to $eagain when no data is available."
8854                         ;;
8855                 esac
8856                 status=`$cat try.err`
8857                 case "$status" in
8858                 0) echo "And it correctly returns 0 to signal EOF.";;
8859                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8860                 *) echo "However, your read() returns '$status' on EOF??";;
8861                 esac
8862                 val="$define"
8863                 if test "$status" = "$rd_nodata"; then
8864                         echo "WARNING: you can't distinguish between EOF and no data!"
8865                         val="$undef"
8866                 fi
8867         else
8868                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8869                 eagain=EAGAIN
8870         fi
8871         set d_eofnblk
8872         eval $setvar
8873         ;;
8874 *)
8875         echo "Using $hint value $eagain."
8876         echo "Your read() returns $rd_nodata when no data is present."
8877         case "$d_eofnblk" in
8878         "$define") echo "And you can see EOF because read() returns 0.";;
8879         "$undef") echo "But you can't see EOF status from read() returned value.";;
8880         *)
8881                 echo "(Assuming you can't see EOF status from read anyway.)"
8882                 d_eofnblk=$undef
8883                 ;;
8884         esac
8885         ;;
8886 esac
8887 $rm -f try try.* .out core head.c mtry
8888
8889 : see if fchmod exists
8890 set fchmod d_fchmod
8891 eval $inlibc
8892
8893 : see if fchown exists
8894 set fchown d_fchown
8895 eval $inlibc
8896
8897 : see if this is an fcntl system
8898 set fcntl d_fcntl
8899 eval $inlibc
8900
8901 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8902 while $test $# -ge 2; do
8903         case "$1" in
8904         $define) echo "#include <$2>";;
8905         esac ;
8906     shift 2;
8907 done > try.c;
8908 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8909 set try;
8910 if eval $compile; then
8911         val="$define";
8912 else
8913         val="$undef";
8914 fi;
8915 set $varname;
8916 eval $setvar;
8917 $rm -f try.c try.o'
8918
8919 socketlib=''
8920 sockethdr=''
8921 : see whether socket exists
8922 echo " "
8923 $echo $n "Hmm... $c" >&4
8924 if set socket val -f d_socket; eval $csym; $val; then
8925         echo "Looks like you have Berkeley networking support." >&4
8926         d_socket="$define"
8927         if set setsockopt val -f; eval $csym; $val; then
8928                 d_oldsock="$undef"
8929         else
8930                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8931                 d_oldsock="$define"
8932         fi
8933 else
8934         if $contains socklib libc.list >/dev/null 2>&1; then
8935                 echo "Looks like you have Berkeley networking support." >&4
8936                 d_socket="$define"
8937                 : we will have to assume that it supports the 4.2 BSD interface
8938                 d_oldsock="$undef"
8939         else
8940                 echo "You don't have Berkeley networking in libc$_a..." >&4
8941                 if test "X$d_socket" = "X$define"; then
8942                    echo "...but you seem to believe that you have sockets." >&4
8943                 else
8944                         for net in net socket
8945                         do
8946                                 if test -f /usr/lib/lib$net$_a; then
8947                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8948                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8949                                         if $contains socket libc.list >/dev/null 2>&1; then
8950                                                 d_socket="$define"
8951                                                 socketlib="-l$net"
8952                                                 case "$net" in
8953                                                 net)
8954                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8955                                                         sockethdr="-I/usr/netinclude"
8956                                                         ;;
8957                                                 esac
8958                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8959                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8960                                                         d_oldsock="$undef"
8961                                                 else
8962                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8963                                                         d_oldsock="$define"
8964                                                 fi
8965                                                 break
8966                                         fi
8967                                 fi
8968                         done
8969                         if test "X$d_socket" != "X$define"; then
8970                            echo "or anywhere else I see." >&4
8971                            d_socket="$undef"
8972                            d_oldsock="$undef"
8973                         fi
8974                 fi
8975         fi
8976 fi
8977
8978 : see if socketpair exists
8979 set socketpair d_sockpair
8980 eval $inlibc
8981
8982
8983 echo " "
8984 echo "Checking the availability of certain socket constants..." >& 4
8985 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8986         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8987         $cat >try.c <<EOF
8988 #include <sys/types.h>
8989 #include <sys/socket.h>
8990 int main() {
8991     int i = $ENUM;
8992 }
8993 EOF
8994         val="$undef"
8995         set try; if eval $compile; then
8996                 val="$define"
8997         fi
8998         set d_${enum}; eval $setvar
8999         $rm -f try.c try
9000 done
9001
9002 : see if sys/select.h has to be included
9003 set sys/select.h i_sysselct
9004 eval $inhdr
9005
9006 : see if we should include time.h, sys/time.h, or both
9007 echo " "
9008 if test "X$timeincl" = X; then
9009         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9010         $echo $n "I'm now running the test program...$c"
9011         $cat >try.c <<'EOCP'
9012 #include <sys/types.h>
9013 #ifdef I_TIME
9014 #include <time.h>
9015 #endif
9016 #ifdef I_SYSTIME
9017 #ifdef SYSTIMEKERNEL
9018 #define KERNEL
9019 #endif
9020 #include <sys/time.h>
9021 #endif
9022 #ifdef I_SYSSELECT
9023 #include <sys/select.h>
9024 #endif
9025 int main()
9026 {
9027         struct tm foo;
9028 #ifdef S_TIMEVAL
9029         struct timeval bar;
9030 #endif
9031 #ifdef S_TIMEZONE
9032         struct timezone tzp;
9033 #endif
9034         if (foo.tm_sec == foo.tm_sec)
9035                 exit(0);
9036 #ifdef S_TIMEVAL
9037         if (bar.tv_sec == bar.tv_sec)
9038                 exit(0);
9039 #endif
9040         exit(1);
9041 }
9042 EOCP
9043         flags=''
9044         for s_timezone in '-DS_TIMEZONE' ''; do
9045         sysselect=''
9046         for s_timeval in '-DS_TIMEVAL' ''; do
9047         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9048         for i_time in '' '-DI_TIME'; do
9049         for i_systime in '-DI_SYSTIME' ''; do
9050                 case "$flags" in
9051                 '') $echo $n ".$c"
9052                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9053                         if eval $compile; then
9054                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9055                                 shift
9056                                 flags="$*"
9057                                 echo " "
9058                                 $echo $n "Succeeded with $flags$c"
9059                         fi
9060                         ;;
9061                 esac
9062         done
9063         done
9064         done
9065         done
9066         done
9067         timeincl=''
9068         echo " "
9069         case "$flags" in
9070         *SYSTIMEKERNEL*) i_systimek="$define"
9071                 timeincl=`./findhdr sys/time.h`
9072                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9073         *) i_systimek="$undef";;
9074         esac
9075         case "$flags" in
9076         *I_TIME*) i_time="$define"
9077                 timeincl=`./findhdr time.h`" $timeincl"
9078                 echo "We'll include <time.h>." >&4;;
9079         *) i_time="$undef";;
9080         esac
9081         case "$flags" in
9082         *I_SYSTIME*) i_systime="$define"
9083                 timeincl=`./findhdr sys/time.h`" $timeincl"
9084                 echo "We'll include <sys/time.h>." >&4;;
9085         *) i_systime="$undef";;
9086         esac
9087         $rm -f try.c try
9088 fi
9089
9090 : check for fd_set items
9091 $cat <<EOM
9092
9093 Checking to see how well your C compiler handles fd_set and friends ...
9094 EOM
9095 $cat >fd_set.c <<EOCP
9096 #$i_systime I_SYS_TIME
9097 #$i_sysselct I_SYS_SELECT
9098 #$d_socket HAS_SOCKET
9099 #include <sys/types.h>
9100 #ifdef HAS_SOCKET
9101 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9102 #endif
9103 #ifdef I_SYS_TIME
9104 #include <sys/time.h>
9105 #endif
9106 #ifdef I_SYS_SELECT
9107 #include <sys/select.h>
9108 #endif
9109 int main() {
9110         fd_set fds;
9111
9112 #ifdef TRYBITS
9113         if(fds.fds_bits);
9114 #endif
9115
9116 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9117         exit(0);
9118 #else
9119         exit(1);
9120 #endif
9121 }
9122 EOCP
9123 set fd_set -DTRYBITS
9124 if eval $compile; then
9125         d_fds_bits="$define"
9126         d_fd_set="$define"
9127         echo "Well, your system knows about the normal fd_set typedef..." >&4
9128         if ./fd_set; then
9129                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9130                 d_fd_macros="$define"
9131         else
9132                 $cat >&4 <<'EOM'
9133 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9134 EOM
9135                 d_fd_macros="$undef"
9136         fi
9137 else
9138         $cat <<'EOM'
9139 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9140 EOM
9141         set fd_set
9142         if eval $compile; then
9143                 d_fds_bits="$undef"
9144                 d_fd_set="$define"
9145                 echo "Well, your system has some sort of fd_set available..." >&4
9146                 if ./fd_set; then
9147                         echo "and you have the normal fd_set macros." >&4
9148                         d_fd_macros="$define"
9149                 else
9150                         $cat <<'EOM'
9151 but not the normal fd_set macros!  Gross!  More work for me...
9152 EOM
9153                         d_fd_macros="$undef"
9154                 fi
9155         else
9156         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9157                 d_fd_set="$undef"
9158                 d_fds_bits="$undef"
9159                 d_fd_macros="$undef"
9160         fi
9161 fi
9162 $rm -f fd_set*
9163
9164 : see if fgetpos exists
9165 set fgetpos d_fgetpos
9166 eval $inlibc
9167
9168 : see if flock exists
9169 set flock d_flock
9170 eval $inlibc
9171
9172 : see if fork exists
9173 set fork d_fork
9174 eval $inlibc
9175
9176 : see if pathconf exists
9177 set pathconf d_pathconf
9178 eval $inlibc
9179
9180 : see if fpathconf exists
9181 set fpathconf d_fpathconf
9182 eval $inlibc
9183
9184
9185 : check for fpos64_t
9186 echo " "
9187 echo "Checking to see if you have fpos64_t..." >&4
9188 $cat >try.c <<EOCP
9189 #include <stdio.h>
9190 int main() { fpos64_t x = 7; }
9191 EOCP
9192 set try
9193 if eval $compile; then
9194         val="$define"
9195         echo "You have fpos64_t."
9196 else
9197         val="$undef"
9198         echo "You do not have fpos64_t."
9199         case "$fpossize" in
9200         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9201         esac
9202 fi
9203 $rm -f try.* try
9204 set d_fpos64_t
9205 eval $setvar
9206
9207 : see if frexpl exists
9208 set frexpl d_frexpl
9209 eval $inlibc
9210
9211 hasstruct='varname=$1; struct=$2; shift; shift;
9212 while $test $# -ge 2; do
9213         case "$1" in
9214         $define) echo "#include <$2>";;
9215         esac ;
9216     shift 2;
9217 done > try.c;
9218 echo "int main () { struct $struct foo; }" >> try.c;
9219 set try;
9220 if eval $compile; then
9221         val="$define";
9222 else
9223         val="$undef";
9224 fi;
9225 set $varname;
9226 eval $setvar;
9227 $rm -f try.c try.o'
9228
9229 : see if this is a sys/param system
9230 set sys/param.h i_sysparam
9231 eval $inhdr
9232
9233 : see if this is a sys/mount.h system
9234 set sys/mount.h i_sysmount
9235 eval $inhdr
9236
9237 : see if sys/types.h has to be included
9238 set sys/types.h i_systypes
9239 eval $inhdr
9240
9241
9242 echo " "
9243 echo "Checking to see if your system supports struct fs_data..." >&4
9244 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9245 eval $hasstruct
9246 case "$d_fs_data_s" in
9247 "$define")      echo "Yes, it does."   ;;
9248 *)              echo "No, it doesn't." ;;
9249 esac
9250
9251 : see if fseeko exists
9252 set fseeko d_fseeko
9253 eval $inlibc
9254 case "$longsize" in
9255 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9256 esac
9257
9258 : see if fsetpos exists
9259 set fsetpos d_fsetpos
9260 eval $inlibc
9261
9262
9263 : see if fstatfs exists
9264 set fstatfs d_fstatfs
9265 eval $inlibc
9266
9267
9268 : see if statvfs exists
9269 set statvfs d_statvfs
9270 eval $inlibc
9271
9272 : see if fstatvfs exists
9273 set fstatvfs d_fstatvfs
9274 eval $inlibc
9275
9276
9277 : see if ftello exists
9278 set ftello d_ftello
9279 eval $inlibc
9280 case "$longsize" in
9281 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9282 esac
9283
9284 : see if getcwd exists
9285 set getcwd d_getcwd
9286 eval $inlibc
9287
9288 : see if getespwnam exists
9289 set getespwnam d_getespwnam
9290 eval $inlibc
9291
9292
9293 : see if getfsstat exists
9294 set getfsstat d_getfsstat
9295 eval $inlibc
9296
9297 : see if getgrent exists
9298 set getgrent d_getgrent
9299 eval $inlibc
9300
9301 : see if gethostbyaddr exists
9302 set gethostbyaddr d_gethbyaddr
9303 eval $inlibc
9304
9305 : see if gethostbyname exists
9306 set gethostbyname d_gethbyname
9307 eval $inlibc
9308
9309 : see if gethostent exists
9310 set gethostent d_gethent
9311 eval $inlibc
9312
9313 : see how we will look up host name
9314 echo " "
9315 call=''
9316 if set gethostname val -f d_gethname; eval $csym; $val; then
9317         echo 'gethostname() found.' >&4
9318         d_gethname="$define"
9319         call=gethostname
9320 fi
9321 if set uname val -f d_uname; eval $csym; $val; then
9322         if ./xenix; then
9323                 $cat <<'EOM'
9324 uname() was found, but you're running xenix, and older versions of xenix
9325 have a broken uname(). If you don't really know whether your xenix is old
9326 enough to have a broken system call, use the default answer.
9327
9328 EOM
9329                 dflt=y
9330                 case "$d_uname" in
9331                 "$define") dflt=n;;
9332                 esac
9333                 rp='Is your uname() broken?'
9334                 . ./myread
9335                 case "$ans" in
9336                 n*) d_uname="$define"; call=uname;;
9337                 esac
9338         else
9339                 echo 'uname() found.' >&4
9340                 d_uname="$define"
9341                 case "$call" in
9342                 '') call=uname ;;
9343                 esac
9344         fi
9345 fi
9346 case "$d_gethname" in
9347 '') d_gethname="$undef";;
9348 esac
9349 case "$d_uname" in
9350 '') d_uname="$undef";;
9351 esac
9352 case "$d_uname$d_gethname" in
9353 *define*)
9354         dflt=n
9355         cat <<EOM
9356  
9357 Every now and then someone has a $call() that lies about the hostname
9358 but can't be fixed for political or economic reasons.  If you wish, I can
9359 pretend $call() isn't there and maybe compute hostname at run-time
9360 thanks to the '$phostname' command.
9361
9362 EOM
9363         rp="Shall I ignore $call() from now on?"
9364         . ./myread
9365         case "$ans" in
9366         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9367         esac;;
9368 esac
9369 case "$phostname" in
9370 '') aphostname='';;
9371 *) case "$aphostname" in
9372         /*) ;;
9373         *) set X $phostname
9374                 shift
9375                 file=$1
9376                 shift
9377                 file=`./loc $file $file $pth`
9378                 aphostname=`echo $file $*`
9379                 ;;
9380         esac
9381         ;;
9382 esac
9383 case "$d_uname$d_gethname" in
9384 *define*) ;;
9385 *)
9386         case "$phostname" in
9387         '')
9388                 echo "There will be no way for $package to get your hostname." >&4;;
9389         *)
9390         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9391                 ;;
9392         esac;;
9393 esac
9394 case "$d_phostname" in
9395 '') d_phostname="$undef";;
9396 esac
9397
9398 : see if this is a netdb.h system
9399 set netdb.h i_netdb
9400 eval $inhdr
9401
9402 : see if prototypes for various gethostxxx netdb.h functions are available
9403 echo " "
9404 set d_gethostprotos gethostent $i_netdb netdb.h
9405 eval $hasproto
9406
9407 : see if getlogin exists
9408 set getlogin d_getlogin
9409 eval $inlibc
9410
9411 : see if getmnt exists
9412 set getmnt d_getmnt
9413 eval $inlibc
9414
9415 : see if getmntent exists
9416 set getmntent d_getmntent
9417 eval $inlibc
9418
9419 : see if getnetbyaddr exists
9420 set getnetbyaddr d_getnbyaddr
9421 eval $inlibc
9422
9423 : see if getnetbyname exists
9424 set getnetbyname d_getnbyname
9425 eval $inlibc
9426
9427 : see if getnetent exists
9428 set getnetent d_getnent
9429 eval $inlibc
9430
9431 : see if prototypes for various getnetxxx netdb.h functions are available
9432 echo " "
9433 set d_getnetprotos getnetent $i_netdb netdb.h
9434 eval $hasproto
9435
9436
9437 : see if getprotobyname exists
9438 set getprotobyname d_getpbyname
9439 eval $inlibc
9440
9441 : see if getprotobynumber exists
9442 set getprotobynumber d_getpbynumber
9443 eval $inlibc
9444
9445 : see if getprotoent exists
9446 set getprotoent d_getpent
9447 eval $inlibc
9448
9449 : see if getpgid exists
9450 set getpgid d_getpgid
9451 eval $inlibc
9452
9453 : see if getpgrp2 exists
9454 set getpgrp2 d_getpgrp2
9455 eval $inlibc
9456
9457 : see if getppid exists
9458 set getppid d_getppid
9459 eval $inlibc
9460
9461 : see if getpriority exists
9462 set getpriority d_getprior
9463 eval $inlibc
9464
9465 : see if prototypes for various getprotoxxx netdb.h functions are available
9466 echo " "
9467 set d_getprotoprotos getprotoent $i_netdb netdb.h
9468 eval $hasproto
9469
9470 : see if getprpwnam exists
9471 set getprpwnam d_getprpwnam
9472 eval $inlibc
9473
9474 : see if getpwent exists
9475 set getpwent d_getpwent
9476 eval $inlibc
9477
9478
9479 : see if getservbyname exists
9480 set getservbyname d_getsbyname
9481 eval $inlibc
9482
9483 : see if getservbyport exists
9484 set getservbyport d_getsbyport
9485 eval $inlibc
9486
9487 : see if getservent exists
9488 set getservent d_getsent
9489 eval $inlibc
9490
9491 : see if prototypes for various getservxxx netdb.h functions are available
9492 echo " "
9493 set d_getservprotos getservent $i_netdb netdb.h
9494 eval $hasproto
9495
9496 : see if getspnam exists
9497 set getspnam d_getspnam
9498 eval $inlibc
9499
9500 : see if gettimeofday or ftime exists
9501 set gettimeofday d_gettimeod
9502 eval $inlibc
9503 case "$d_gettimeod" in
9504 "$undef")
9505         set ftime d_ftime 
9506         eval $inlibc
9507         ;;
9508 *)
9509         val="$undef"; set d_ftime; eval $setvar
9510         ;;
9511 esac
9512 case "$d_gettimeod$d_ftime" in
9513 "$undef$undef")
9514         echo " "
9515         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9516         ;;
9517 esac
9518
9519 : see if this is an grp system
9520 set grp.h i_grp
9521 eval $inhdr
9522
9523 case "$i_grp" in
9524 $define)
9525         xxx=`./findhdr grp.h`
9526         $cppstdin $cppflags $cppminus < $xxx >$$.h
9527
9528         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9529                 val="$define"
9530         else
9531                 val="$undef"
9532         fi
9533         set d_grpasswd
9534         eval $setvar
9535
9536         $rm -f $$.h
9537         ;;
9538 *)
9539         val="$undef";
9540         set d_grpasswd; eval $setvar
9541         ;;
9542 esac
9543
9544 : see if hasmntopt exists
9545 set hasmntopt d_hasmntopt
9546 eval $inlibc
9547
9548 : see if this is a netinet/in.h or sys/in.h system
9549 set netinet/in.h i_niin sys/in.h i_sysin
9550 eval $inhdr
9551
9552 : see if arpa/inet.h has to be included
9553 set arpa/inet.h i_arpainet
9554 eval $inhdr
9555
9556 : see if htonl --and friends-- exists
9557 val=''
9558 set htonl val
9559 eval $inlibc
9560
9561 : Maybe they are macros.
9562 case "$val" in
9563 $undef)
9564         $cat >htonl.c <<EOM
9565 #include <stdio.h>
9566 #include <sys/types.h>
9567 #$i_niin I_NETINET_IN
9568 #$i_sysin I_SYS_IN
9569 #$i_arpainet I_ARPA_INET
9570 #ifdef I_NETINET_IN
9571 #include <netinet/in.h>
9572 #endif
9573 #ifdef I_SYS_IN
9574 #include <sys/in.h>
9575 #endif
9576 #ifdef I_ARPA_INET
9577 #include <arpa/inet.h>
9578 #endif
9579 #ifdef htonl
9580 printf("Defined as a macro.");
9581 #endif
9582 EOM
9583         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9584         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9585                 val="$define"
9586                 echo "But it seems to be defined as a macro." >&4
9587         fi
9588         $rm -f htonl.?
9589         ;;
9590 esac
9591 set d_htonl
9592 eval $setvar
9593
9594 : see if iconv exists
9595 set iconv d_iconv
9596 eval $inlibc
9597
9598 : index or strchr
9599 echo " "
9600 if set index val -f; eval $csym; $val; then
9601         if set strchr val -f d_strchr; eval $csym; $val; then
9602                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9603                         val="$define"
9604                         vali="$undef"
9605                         echo "strchr() found." >&4
9606                 else
9607                         val="$undef"
9608                         vali="$define"
9609                         echo "index() found." >&4
9610                 fi
9611         else
9612                 val="$undef"
9613                 vali="$define"
9614                 echo "index() found." >&4
9615         fi
9616 else
9617         if set strchr val -f d_strchr; eval $csym; $val; then
9618                 val="$define"
9619                 vali="$undef"
9620                 echo "strchr() found." >&4
9621         else
9622                 echo "No index() or strchr() found!" >&4
9623                 val="$undef"
9624                 vali="$undef"
9625         fi
9626 fi
9627 set d_strchr; eval $setvar
9628 val="$vali"
9629 set d_index; eval $setvar
9630
9631 : check whether inet_aton exists
9632 set inet_aton d_inetaton
9633 eval $inlibc
9634
9635 : see if inttypes.h is available
9636 : we want a real compile instead of Inhdr because some systems
9637 : have an inttypes.h which includes non-existent headers
9638 echo " "
9639 $cat >try.c <<EOCP
9640 #include <inttypes.h>
9641 int main() {
9642         static int32_t foo32 = 0x12345678;
9643 }
9644 EOCP
9645 set try
9646 if eval $compile; then
9647         echo "<inttypes.h> found." >&4
9648         val="$define"
9649 else
9650         echo "<inttypes.h> NOT found." >&4
9651         val="$undef"
9652 fi
9653 $rm -f try.c try
9654 set i_inttypes
9655 eval $setvar
9656
9657 : check for int64_t
9658 echo " "
9659 echo "Checking to see if you have int64_t..." >&4
9660 $cat >try.c <<EOCP
9661 #include <sys/types.h>
9662 #$i_inttypes I_INTTYPES
9663 #ifdef I_INTTYPES
9664 #include <inttypes.h>
9665 #endif
9666 int main() { int64_t x = 7; }
9667 EOCP
9668 set try
9669 if eval $compile; then
9670         val="$define"
9671         echo "You have int64_t."
9672 else
9673         val="$undef"
9674         echo "You do not have int64_t."
9675 fi
9676 $rm -f try try.*
9677 set d_int64_t
9678 eval $setvar
9679
9680 : Look for isascii
9681 echo " "
9682 $cat >isascii.c <<'EOCP'
9683 #include <stdio.h>
9684 #include <ctype.h>
9685 int main() {
9686         int c = 'A';
9687         if (isascii(c))
9688                 exit(0);
9689         else
9690                 exit(1);
9691 }
9692 EOCP
9693 set isascii
9694 if eval $compile; then
9695         echo "isascii() found." >&4
9696         val="$define"
9697 else
9698         echo "isascii() NOT found." >&4
9699         val="$undef"
9700 fi
9701 set d_isascii
9702 eval $setvar
9703 $rm -f isascii*
9704
9705 : see if isnan exists
9706 set isnan d_isnan
9707 eval $inlibc
9708
9709 : see if isnanl exists
9710 set isnanl d_isnanl
9711 eval $inlibc
9712
9713 : see if killpg exists
9714 set killpg d_killpg
9715 eval $inlibc
9716
9717 : see if lchown exists
9718 echo " "
9719 $cat > try.c <<'EOCP'
9720 /* System header to define __stub macros and hopefully few prototypes,
9721     which can conflict with char lchown(); below.  */
9722 #include <assert.h>
9723 /* Override any gcc2 internal prototype to avoid an error.  */
9724 /* We use char because int might match the return type of a gcc2
9725    builtin and then its argument prototype would still apply.  */
9726 char lchown();
9727 int main() {
9728     /*  The GNU C library defines this for functions which it implements
9729         to always fail with ENOSYS.  Some functions are actually named
9730         something starting with __ and the normal name is an alias.  */
9731 #if defined (__stub_lchown) || defined (__stub___lchown)
9732 choke me
9733 #else
9734 lchown();
9735 #endif
9736 ; return 0; }
9737 EOCP
9738 set try
9739 if eval $compile; then
9740     $echo "lchown() found." >&4
9741     val="$define"
9742 else
9743     $echo "lchown() NOT found." >&4
9744     val="$undef"
9745 fi
9746 set d_lchown
9747 eval $setvar
9748
9749 : See if number of significant digits in a double precision number is known
9750 echo " "
9751 $cat >ldbl_dig.c <<EOM
9752 #$i_limits I_LIMITS
9753 #$i_float I_FLOAT
9754 #ifdef I_LIMITS
9755 #include <limits.h>
9756 #endif
9757 #ifdef I_FLOAT
9758 #include <float.h>
9759 #endif
9760 #ifdef LDBL_DIG
9761 printf("Contains LDBL_DIG");
9762 #endif
9763 EOM
9764 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9765 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9766         echo "LDBL_DIG found." >&4
9767         val="$define"
9768 else
9769         echo "LDBL_DIG NOT found." >&4
9770         val="$undef"
9771 fi
9772 $rm -f ldbl_dig.?
9773 set d_ldbl_dig
9774 eval $setvar
9775
9776 : see if link exists
9777 set link d_link
9778 eval $inlibc
9779
9780 : see if localeconv exists
9781 set localeconv d_locconv
9782 eval $inlibc
9783
9784 : see if lockf exists
9785 set lockf d_lockf
9786 eval $inlibc
9787
9788 : check for long long
9789 echo " "
9790 echo "Checking to see if you have long long..." >&4
9791 echo 'int main() { long long x = 7; return 0; }' > try.c
9792 set try
9793 if eval $compile; then
9794         val="$define"
9795         echo "You have long long."
9796 else
9797         val="$undef"
9798         echo "You do not have long long."
9799 fi
9800 $rm try.*
9801 set d_longlong
9802 eval $setvar
9803
9804 : check for length of long long
9805 case "${d_longlong}${longlongsize}" in
9806 $define)
9807         echo " "
9808         echo "Checking to see how big your long longs are..." >&4
9809         $cat >try.c <<'EOCP'
9810 #include <stdio.h>
9811 int main()
9812 {
9813     printf("%d\n", (int)sizeof(long long));
9814     return(0);
9815 }
9816 EOCP
9817         set try
9818         if eval $compile_ok; then
9819                 longlongsize=`./try$exe_ext`
9820                 echo "Your long longs are $longlongsize bytes long."
9821         else
9822                 dflt='8'
9823                 echo " "
9824                 echo "(I can't seem to compile the test program.  Guessing...)"
9825                 rp="What is the size of a long long (in bytes)?"
9826                 . ./myread
9827                 longlongsize="$ans"
9828         fi
9829         if $test "X$longsize" = "X$longlongsize"; then
9830                 echo "(That isn't any different from an ordinary long.)"
9831         fi      
9832         ;;
9833 esac
9834 $rm -f try.* try
9835
9836 : see if prototype for lseek is available
9837 echo " "
9838 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9839 eval $hasproto
9840
9841 : see if lstat exists
9842 set lstat d_lstat
9843 eval $inlibc
9844
9845 : see if madvise exists
9846 set madvise d_madvise
9847 eval $inlibc
9848
9849 : see if mblen exists
9850 set mblen d_mblen
9851 eval $inlibc
9852
9853 : see if mbstowcs exists
9854 set mbstowcs d_mbstowcs
9855 eval $inlibc
9856
9857 : see if mbtowc exists
9858 set mbtowc d_mbtowc
9859 eval $inlibc
9860
9861 : see if memchr exists
9862 set memchr d_memchr
9863 eval $inlibc
9864
9865 : see if memcmp exists
9866 set memcmp d_memcmp
9867 eval $inlibc
9868
9869 : see if memcpy exists
9870 set memcpy d_memcpy
9871 eval $inlibc
9872
9873 : see if memmove exists
9874 set memmove d_memmove
9875 eval $inlibc
9876
9877 : see if memset exists
9878 set memset d_memset
9879 eval $inlibc
9880
9881 : see if mkdir exists
9882 set mkdir d_mkdir
9883 eval $inlibc
9884
9885 : see if mkdtemp exists
9886 set mkdtemp d_mkdtemp
9887 eval $inlibc
9888
9889 : see if mkfifo exists
9890 set mkfifo d_mkfifo
9891 eval $inlibc
9892
9893 : see if mkstemp exists
9894 set mkstemp d_mkstemp
9895 eval $inlibc
9896
9897 : see if mkstemps exists
9898 set mkstemps d_mkstemps
9899 eval $inlibc
9900
9901 : see if mktime exists
9902 set mktime d_mktime
9903 eval $inlibc
9904
9905 : see if this is a sys/mman.h system
9906 set sys/mman.h i_sysmman
9907 eval $inhdr
9908
9909 : see if mmap exists
9910 set mmap d_mmap
9911 eval $inlibc
9912 : see what shmat returns
9913 : default to something harmless
9914 mmaptype='void *'
9915 case "$i_sysmman$d_mmap" in
9916 "$define$define")
9917         $cat >mmap.c <<'END'
9918 #include <sys/mman.h>
9919 void *mmap();
9920 END
9921         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9922                 mmaptype='void *'
9923         else
9924                 mmaptype='caddr_t'
9925         fi
9926         echo "and it returns ($mmaptype)." >&4
9927         ;;
9928 esac
9929
9930
9931
9932 : see if modfl exists
9933 set modfl d_modfl
9934 eval $inlibc
9935
9936 : see if mprotect exists
9937 set mprotect d_mprotect
9938 eval $inlibc
9939
9940 : see if msgctl exists
9941 set msgctl d_msgctl
9942 eval $inlibc
9943
9944 : see if msgget exists
9945 set msgget d_msgget
9946 eval $inlibc
9947
9948 : see if msgsnd exists
9949 set msgsnd d_msgsnd
9950 eval $inlibc
9951
9952 : see if msgrcv exists
9953 set msgrcv d_msgrcv
9954 eval $inlibc
9955
9956 : see how much of the 'msg*(2)' library is present.
9957 h_msg=true
9958 echo " "
9959 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9960 *"$undef"*) h_msg=false;;
9961 esac
9962 case "$osname" in
9963 freebsd)
9964     case "`ipcs 2>&1`" in
9965     "SVID messages"*"not configured"*)
9966         echo "Your $osname does not have the msg*(2) configured." >&4
9967         h_msg=false
9968         val="$undef"
9969         set msgctl d_msgctl
9970         eval $setvar
9971         set msgget d_msgget
9972         eval $setvar
9973         set msgsnd d_msgsnd
9974         eval $setvar
9975         set msgrcv d_msgrcv
9976         eval $setvar
9977         ;;
9978     esac
9979     ;;
9980 esac
9981 : we could also check for sys/ipc.h ...
9982 if $h_msg && $test `./findhdr sys/msg.h`; then
9983         echo "You have the full msg*(2) library." >&4
9984         val="$define"
9985 else
9986         echo "You don't have the full msg*(2) library." >&4
9987         val="$undef"
9988 fi
9989 set d_msg
9990 eval $setvar
9991
9992 : see if msync exists
9993 set msync d_msync
9994 eval $inlibc
9995
9996 : see if munmap exists
9997 set munmap d_munmap
9998 eval $inlibc
9999
10000 : see if nice exists
10001 set nice d_nice
10002 eval $inlibc
10003
10004
10005 echo " "
10006 echo "Checking which 64-bit integer type we could use..." >&4
10007
10008 case "$intsize" in
10009 8) val=int
10010    set quadtype
10011    eval $setvar
10012    val='"unsigned int"'
10013    set uquadtype
10014    eval $setvar
10015    quadkind=1
10016    ;;
10017 *) case "$longsize" in
10018    8) val=long
10019       set quadtype
10020       eval $setvar
10021       val='"unsigned long"'
10022       set uquadtype
10023       eval $setvar
10024       quadkind=2
10025       ;;
10026    *) case "$d_longlong:$longlongsize" in
10027       define:8)
10028         val='"long long"'
10029         set quadtype
10030         eval $setvar
10031         val='"unsigned long long"'
10032         set uquadtype
10033         eval $setvar
10034         quadkind=3
10035         ;;
10036       *) case "$d_int64_t" in
10037          define)
10038            val=int64_t
10039            set quadtype
10040            eval $setvar
10041            val=uint64_t
10042            set uquadtype
10043            eval $setvar
10044            quadkind=4
10045            ;;
10046          esac
10047          ;;
10048       esac
10049       ;;
10050    esac
10051    ;;
10052 esac
10053
10054 case "$quadtype" in
10055 '')     echo "Alas, no 64-bit integer types in sight." >&4
10056         d_quad="$undef"
10057         ;;
10058 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10059             verb="will"
10060         else
10061             verb="could"
10062         fi
10063         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10064         d_quad="$define"
10065         ;;
10066 esac
10067
10068 : check for length of character
10069 echo " "
10070 case "$charsize" in
10071 '')
10072         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10073         $cat >try.c <<'EOCP'
10074 #include <stdio.h>
10075 int main()
10076 {
10077     printf("%d\n", (int)sizeof(char));
10078     exit(0);
10079 }
10080 EOCP
10081         set try
10082         if eval $compile_ok; then
10083                 dflt=`./try`
10084         else
10085                 dflt='1'
10086                 echo "(I can't seem to compile the test program.  Guessing...)"
10087         fi
10088         ;;
10089 *)
10090         dflt="$charsize"
10091         ;;
10092 esac
10093 rp="What is the size of a character (in bytes)?"
10094 . ./myread
10095 charsize="$ans"
10096 $rm -f try.c try
10097
10098
10099 echo " "
10100 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10101
10102 case "$use64bitint:$d_quad:$quadtype" in
10103 define:define:?*)
10104         ivtype="$quadtype"
10105         uvtype="$uquadtype"
10106         ivsize=8
10107         uvsize=8
10108         ;;
10109 *)      ivtype="long"
10110         uvtype="unsigned long"
10111         ivsize=$longsize
10112         uvsize=$longsize
10113         ;;
10114 esac
10115
10116 case "$uselongdouble:$d_longdbl" in
10117 define:define)
10118         nvtype="long double"
10119         nvsize=$longdblsize
10120         ;;
10121 *)      nvtype=double
10122         nvsize=$doublesize
10123         ;;
10124 esac
10125
10126 $echo "(IV will be "$ivtype", $ivsize bytes)"
10127 $echo "(UV will be "$uvtype", $uvsize bytes)"
10128 $echo "(NV will be "$nvtype", $nvsize bytes)"
10129
10130 $cat >try.c <<EOCP
10131 #$i_inttypes I_INTTYPES
10132 #ifdef I_INTTYPES
10133 #include <inttypes.h>
10134 #endif
10135 #include <stdio.h>
10136 int main() {
10137 #ifdef INT8
10138    int8_t i =  INT8_MAX;
10139   uint8_t u = UINT8_MAX;
10140   printf("int8_t\n");
10141 #endif
10142 #ifdef INT16
10143    int16_t i =  INT16_MAX;
10144   uint16_t i = UINT16_MAX;
10145   printf("int16_t\n");
10146 #endif
10147 #ifdef INT32
10148    int32_t i =  INT32_MAX;
10149   uint32_t u = UINT32_MAX;
10150   printf("int32_t\n");
10151 #endif
10152 }
10153 EOCP
10154
10155 case "$i8type" in
10156 '')     case "$charsize" in
10157         1)      i8type=char
10158                 u8type="unsigned char"
10159                 i8size=$charsize
10160                 u8size=$charsize
10161                 ;;
10162         esac
10163         ;;
10164 esac
10165 case "$i8type" in
10166 '')     set try -DINT8
10167         if eval $compile; then
10168                 case "`./try$exe_ext`" in
10169                 int8_t) i8type=int8_t
10170                         u8type=uint8_t
10171                         i8size=1
10172                         u8size=1
10173                         ;;
10174                 esac
10175         fi
10176         ;;
10177 esac
10178 case "$i8type" in
10179 '')     if $test $charsize -ge 1; then
10180                 i8type=char
10181                 u8type="unsigned char"
10182                 i8size=$charsize
10183                 u8size=$charsize
10184         fi
10185         ;;
10186 esac
10187
10188 case "$i16type" in
10189 '')     case "$shortsize" in
10190         2)      i16type=short
10191                 u16type="unsigned short"
10192                 i16size=$shortsize
10193                 u16size=$shortsize
10194                 ;;
10195         esac
10196         ;;
10197 esac
10198 case "$i16type" in
10199 '')     set try -DINT16
10200         if eval $compile; then
10201                 case "`./try$exe_ext`" in
10202                 int16_t)
10203                         i16type=int16_t
10204                         u16type=uint16_t
10205                         i16size=2
10206                         u16size=2
10207                         ;;
10208                 esac
10209         fi
10210         ;;
10211 esac
10212 case "$i16type" in
10213 '')     if $test $shortsize -ge 2; then
10214                 i16type=short
10215                 u16type="unsigned short"
10216                 i16size=$shortsize
10217                 u16size=$shortsize
10218         fi
10219         ;;
10220 esac
10221
10222 case "$i32type" in
10223 '')     case "$longsize" in
10224         4)      i32type=long
10225                 u32type="unsigned long"
10226                 i32size=$longsize
10227                 u32size=$longsize
10228                 ;;
10229         *)      case "$intsize" in
10230                 4)      i32type=int
10231                         u32type="unsigned int"
10232                         i32size=$intsize
10233                         u32size=$intsize
10234                         ;;
10235                 esac
10236                 ;;
10237         esac
10238         ;;
10239 esac
10240 case "$i32type" in
10241 '')     set try -DINT32
10242         if eval $compile; then
10243                 case "`./try$exe_ext`" in
10244                 int32_t)
10245                         i32type=int32_t
10246                         u32type=uint32_t
10247                         i32size=4
10248                         u32size=4
10249                         ;;
10250                 esac
10251         fi
10252         ;;
10253 esac
10254 case "$i32type" in
10255 '')     if $test $intsize -ge 4; then
10256                 i32type=int
10257                 u32type="unsigned int"
10258                 i32size=$intsize
10259                 u32size=$intsize
10260         fi
10261         ;;
10262 esac
10263
10264 case "$i64type" in
10265 '')     case "$d_quad:$quadtype" in
10266         define:?*)
10267                 i64type="$quadtype"
10268                 u64type="$uquadtype"
10269                 i64size=8
10270                 u64size=8
10271                 ;;
10272         esac
10273         ;;
10274 esac
10275
10276 $echo "Checking whether your NVs can preserve your UVs..." >&4
10277 $cat <<EOP >try.c
10278 #include <stdio.h>
10279 int main() {
10280     $uvtype k = ($uvtype)~0, l;
10281     $nvtype d;
10282     l = k;
10283     d = ($nvtype)l;
10284     l = ($uvtype)d;
10285     if (l == k)
10286        printf("preserve\n");
10287     exit(0);
10288 }
10289 EOP
10290 set try
10291 if eval $compile; then
10292         case "`./try$exe_ext`" in
10293         preserve) d_nv_preserves_uv="$define" ;;
10294         esac
10295 fi      
10296 case "$d_nv_preserves_uv" in
10297 $define) $echo "Yes, they can."  2>&1 ;;
10298 *)       $echo "No, they can't." 2>&1
10299          d_nv_preserves_uv="$undef"
10300          ;;
10301 esac
10302
10303 $rm -f try.* try
10304
10305 case "$d_nv_preserves_uv" in
10306 "$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
10307 *)      $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10308         $cat <<EOP >try.c
10309 #include <stdio.h>
10310 int main() {
10311     $uvtype u = 0;
10312     int     n = 8 * $uvsize;
10313     int     i;
10314     for (i = 0; i < n; i++) {
10315       u = u << 1 | ($uvtype)1;
10316       if (($uvtype)($nvtype)u != u)
10317         break;
10318     }
10319     printf("%d\n", i);
10320     exit(0);
10321 }
10322 EOP
10323         set try
10324         if eval $compile; then
10325                 d_nv_preserves_uv_bits="`./try$exe_ext`"
10326         fi
10327         case "$d_nv_preserves_uv_bits" in
10328         [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs."  2>&1 ;;
10329         *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10330                 d_nv_preserves_uv_bits="$undef"
10331                 ;;
10332         esac
10333         $rm -f try.* try
10334         ;;
10335 esac
10336
10337
10338
10339 : check for off64_t
10340 echo " "
10341 echo "Checking to see if you have off64_t..." >&4
10342 $cat >try.c <<EOCP
10343 #include <sys/types.h>
10344 #include <unistd.h>
10345 int main() { off64_t x = 7; }
10346 EOCP
10347 set try
10348 if eval $compile; then
10349         val="$define"
10350         echo "You have off64_t."
10351 else
10352         val="$undef"
10353         echo "You do not have off64_t."
10354         case "$lseeksize" in
10355         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10356         esac
10357 fi
10358 $rm -f try.* try
10359 set d_off64_t
10360 eval $setvar
10361
10362 : see if POSIX threads are available
10363 set pthread.h i_pthread
10364 eval $inhdr
10365
10366
10367
10368
10369 : how to create joinable pthreads
10370 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10371         echo " "
10372         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10373         $cat >try.c <<'EOCP'
10374 #include <pthread.h>
10375 int main() {
10376     int detachstate = JOINABLE;
10377 }
10378 EOCP
10379         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10380         if eval $compile; then
10381                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10382                 val="$undef" # Yes, undef.
10383                 set d_old_pthread_create_joinable
10384                 eval $setvar
10385                 val=""
10386                 set old_pthread_create_joinable
10387                 eval $setvar
10388         else
10389                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10390                 if eval $compile; then
10391                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10392                         val="$define"
10393                         set d_old_pthread_create_joinable
10394                         eval $setvar
10395                         val=PTHREAD_CREATE_UNDETACHED
10396                         set old_pthread_create_joinable
10397                         eval $setvar
10398                 else            
10399                         set try -DJOINABLE=__UNDETACHED
10400                         if eval $compile; then
10401                                 echo "You seem to use __UNDETACHED." >&4
10402                                 val="$define"
10403                                 set d_old_pthread_create_joinable
10404                                 eval $setvar
10405                                 val=__UNDETACHED
10406                                 set old_pthread_create_joinable
10407                                 eval $setvar
10408                         else
10409                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10410                                 val="$define"
10411                                 set d_old_pthread_create_joinable
10412                                 eval $setvar
10413                                 val=0
10414                                 set old_pthread_create_joinable
10415                                 eval $setvar
10416                         fi
10417                 fi
10418         fi
10419         $rm -f try try.*
10420 else
10421     d_old_pthread_create_joinable="$undef"
10422     old_pthread_create_joinable=""
10423 fi
10424
10425 : see if pause exists
10426 set pause d_pause
10427 eval $inlibc
10428
10429 : see if pipe exists
10430 set pipe d_pipe
10431 eval $inlibc
10432
10433 : see if poll exists
10434 set poll d_poll
10435 eval $inlibc
10436
10437
10438 : see whether the various POSIXish _yields exist
10439 $cat >try.c <<EOP
10440 #include <pthread.h>
10441 #include <stdio.h>
10442 int main() {
10443 #ifdef SCHED_YIELD
10444         sched_yield();
10445 #else
10446 #ifdef PTHREAD_YIELD
10447         pthread_yield();
10448 #else
10449 #ifdef PTHREAD_YIELD_NULL
10450         pthread_yield(NULL);
10451 #endif
10452 #endif
10453 #endif
10454 }
10455 EOP
10456 : see if sched_yield exists
10457 set try -DSCHED_YIELD
10458 if eval $compile; then
10459     val="$define"
10460     sched_yield='sched_yield()'
10461 else
10462     val="$undef"
10463 fi
10464 case "$usethreads" in
10465 $define)
10466         case "$val" in
10467         $define) echo 'sched_yield() found.' >&4        ;;
10468         *)       echo 'sched_yield() NOT found.' >&4    ;;
10469         esac
10470 esac
10471 set d_sched_yield
10472 eval $setvar
10473
10474 : see if pthread_yield exists
10475 set try -DPTHREAD_YIELD
10476 if eval $compile; then
10477     val="$define"
10478     case "$sched_yield" in
10479     '') sched_yield='pthread_yield()' ;;
10480     esac
10481 else
10482     set try -DPTHREAD_YIELD_NULL
10483     if eval $compile; then
10484         val="$define"
10485         case "$sched_yield" in
10486         '') sched_yield='pthread_yield(NULL)' ;;
10487         esac
10488     else
10489         val="$undef"
10490     fi
10491 fi
10492 case "$usethreads" in
10493 $define)
10494         case "$val" in
10495         $define) echo 'pthread_yield() found.' >&4      ;;
10496         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10497         esac
10498         ;;
10499 esac
10500 set d_pthread_yield
10501 eval $setvar
10502
10503 case "$sched_yield" in
10504 '') sched_yield=undef ;;
10505 esac
10506
10507 $rm -f try try.*
10508
10509 : see if this is a pwd.h system
10510 set pwd.h i_pwd
10511 eval $inhdr
10512
10513 case "$i_pwd" in
10514 $define)
10515         xxx=`./findhdr pwd.h`
10516         $cppstdin $cppflags $cppminus < $xxx >$$.h
10517
10518         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10519                 val="$define"
10520         else
10521                 val="$undef"
10522         fi
10523         set d_pwquota
10524         eval $setvar
10525
10526         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10527                 val="$define"
10528         else
10529                 val="$undef"
10530         fi
10531         set d_pwage
10532         eval $setvar
10533
10534         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10535                 val="$define"
10536         else
10537                 val="$undef"
10538         fi
10539         set d_pwchange
10540         eval $setvar
10541
10542         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10543                 val="$define"
10544         else
10545                 val="$undef"
10546         fi
10547         set d_pwclass
10548         eval $setvar
10549
10550         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10551                 val="$define"
10552         else
10553                 val="$undef"
10554         fi
10555         set d_pwexpire
10556         eval $setvar
10557
10558         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10559                 val="$define"
10560         else
10561                 val="$undef"
10562         fi
10563         set d_pwcomment
10564         eval $setvar
10565
10566         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10567                 val="$define"
10568         else
10569                 val="$undef"
10570         fi
10571         set d_pwgecos
10572         eval $setvar
10573
10574         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10575                 val="$define"
10576         else
10577                 val="$undef"
10578         fi
10579         set d_pwpasswd
10580         eval $setvar
10581
10582         $rm -f $$.h
10583         ;;
10584 *)
10585         val="$undef"; 
10586         set d_pwquota; eval $setvar
10587         set d_pwage; eval $setvar
10588         set d_pwchange; eval $setvar
10589         set d_pwclass; eval $setvar
10590         set d_pwexpire; eval $setvar
10591         set d_pwcomment; eval $setvar
10592         set d_pwgecos; eval $setvar
10593         set d_pwpasswd; eval $setvar
10594         ;;
10595 esac
10596
10597 : see if readdir and friends exist
10598 set readdir d_readdir
10599 eval $inlibc
10600 set seekdir d_seekdir
10601 eval $inlibc
10602 set telldir d_telldir
10603 eval $inlibc
10604 set rewinddir d_rewinddir
10605 eval $inlibc
10606
10607 : see if readlink exists
10608 set readlink d_readlink
10609 eval $inlibc
10610
10611 : see if rename exists
10612 set rename d_rename
10613 eval $inlibc
10614
10615 : see if rmdir exists
10616 set rmdir d_rmdir
10617 eval $inlibc
10618
10619 : see if memory.h is available.
10620 val=''
10621 set memory.h val
10622 eval $inhdr
10623
10624 : See if it conflicts with string.h
10625 case "$val" in
10626 $define)
10627         case "$strings" in
10628         '') ;;
10629         *)
10630                 $cppstdin $cppflags $cppminus < $strings > mem.h
10631                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10632                         echo " "
10633                         echo "We won't be including <memory.h>."
10634                         val="$undef"
10635                 fi
10636                 $rm -f mem.h
10637                 ;;
10638         esac
10639 esac
10640 set i_memory
10641 eval $setvar
10642
10643 : can bcopy handle overlapping blocks?
10644 val="$undef"
10645 case "$d_bcopy" in
10646 "$define")
10647         echo " "
10648         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10649         $cat >try.c <<EOCP
10650 #$i_memory I_MEMORY
10651 #$i_stdlib I_STDLIB
10652 #$i_string I_STRING
10653 #$i_unistd I_UNISTD
10654 EOCP
10655         $cat >>try.c <<'EOCP'
10656 #include <stdio.h>
10657 #ifdef I_MEMORY
10658 #  include <memory.h>
10659 #endif
10660 #ifdef I_STDLIB
10661 #  include <stdlib.h>
10662 #endif
10663 #ifdef I_STRING
10664 #  include <string.h>
10665 #else
10666 #  include <strings.h>
10667 #endif
10668 #ifdef I_UNISTD
10669 #  include <unistd.h>  /* Needed for NetBSD */
10670 #endif
10671 int main()
10672 {
10673 char buf[128], abc[128];
10674 char *b;
10675 int len;
10676 int off;
10677 int align;
10678
10679 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10680
10681 for (align = 7; align >= 0; align--) {
10682         for (len = 36; len; len--) {
10683                 b = buf+align;
10684                 bcopy(abc, b, len);
10685                 for (off = 1; off <= len; off++) {
10686                         bcopy(b, b+off, len);
10687                         bcopy(b+off, b, len);
10688                         if (bcmp(b, abc, len))
10689                                 exit(1);
10690                 }
10691         }
10692 }
10693 exit(0);
10694 }
10695 EOCP
10696         set try
10697         if eval $compile_ok; then
10698                 if ./try 2>/dev/null; then
10699                         echo "Yes, it can."
10700                         val="$define"
10701                 else
10702                         echo "It can't, sorry."
10703                         case "$d_memmove" in
10704                         "$define") echo "But that's Ok since you have memmove()." ;;
10705                         esac
10706                 fi
10707         else
10708                 echo "(I can't compile the test program, so we'll assume not...)"
10709                 case "$d_memmove" in
10710                 "$define") echo "But that's Ok since you have memmove()." ;;
10711                 esac
10712         fi
10713         ;;
10714 esac
10715 $rm -f try.* try core
10716 set d_safebcpy
10717 eval $setvar
10718
10719 : can memcpy handle overlapping blocks?
10720 val="$undef"
10721 case "$d_memcpy" in
10722 "$define")
10723         echo " "
10724         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10725         $cat >try.c <<EOCP
10726 #$i_memory I_MEMORY
10727 #$i_stdlib I_STDLIB
10728 #$i_string I_STRING
10729 #$i_unistd I_UNISTD
10730 EOCP
10731         $cat >>try.c <<'EOCP'
10732 #include <stdio.h>
10733 #ifdef I_MEMORY
10734 #  include <memory.h>
10735 #endif
10736 #ifdef I_STDLIB
10737 #  include <stdlib.h>
10738 #endif
10739 #ifdef I_STRING
10740 #  include <string.h>
10741 #else
10742 #  include <strings.h>
10743 #endif
10744 #ifdef I_UNISTD
10745 #  include <unistd.h>  /* Needed for NetBSD */
10746 #endif
10747 int main()
10748 {
10749 char buf[128], abc[128];
10750 char *b;
10751 int len;
10752 int off;
10753 int align;
10754
10755 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10756    try to store the string in read-only memory. */
10757 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10758
10759 for (align = 7; align >= 0; align--) {
10760         for (len = 36; len; len--) {
10761                 b = buf+align;
10762                 memcpy(b, abc, len);
10763                 for (off = 1; off <= len; off++) {
10764                         memcpy(b+off, b, len);
10765                         memcpy(b, b+off, len);
10766                         if (memcmp(b, abc, len))
10767                                 exit(1);
10768                 }
10769         }
10770 }
10771 exit(0);
10772 }
10773 EOCP
10774         set try
10775         if eval $compile_ok; then
10776                 if ./try 2>/dev/null; then
10777                         echo "Yes, it can."
10778                         val="$define"
10779                 else
10780                         echo "It can't, sorry."
10781                         case "$d_memmove" in
10782                         "$define") echo "But that's Ok since you have memmove()." ;;
10783                         esac
10784                 fi
10785         else
10786                 echo "(I can't compile the test program, so we'll assume not...)"
10787                 case "$d_memmove" in
10788                 "$define") echo "But that's Ok since you have memmove()." ;;
10789                 esac
10790         fi
10791         ;;
10792 esac
10793 $rm -f try.* try core
10794 set d_safemcpy
10795 eval $setvar
10796
10797 : can memcmp be trusted to compare relative magnitude?
10798 val="$undef"
10799 case "$d_memcmp" in
10800 "$define")
10801         echo " "
10802         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10803         $cat >try.c <<EOCP
10804 #$i_memory I_MEMORY
10805 #$i_stdlib I_STDLIB
10806 #$i_string I_STRING
10807 #$i_unistd I_UNISTD
10808 EOCP
10809         $cat >>try.c <<'EOCP'
10810 #include <stdio.h>
10811 #ifdef I_MEMORY
10812 #  include <memory.h>
10813 #endif
10814 #ifdef I_STDLIB
10815 #  include <stdlib.h>
10816 #endif
10817 #ifdef I_STRING
10818 #  include <string.h>
10819 #else
10820 #  include <strings.h>
10821 #endif
10822 #ifdef I_UNISTD
10823 #  include <unistd.h>  /* Needed for NetBSD */
10824 #endif
10825 int main()
10826 {
10827 char a = -1;
10828 char b = 0;
10829 if ((a < b) && memcmp(&a, &b, 1) < 0)
10830         exit(1);
10831 exit(0);
10832 }
10833 EOCP
10834         set try
10835         if eval $compile_ok; then
10836                 if ./try 2>/dev/null; then
10837                         echo "Yes, it can."
10838                         val="$define"
10839                 else
10840                         echo "No, it can't (it uses signed chars)."
10841                 fi
10842         else
10843                 echo "(I can't compile the test program, so we'll assume not...)"
10844         fi
10845         ;;
10846 esac
10847 $rm -f try.* try core
10848 set d_sanemcmp
10849 eval $setvar
10850
10851 : see if select exists
10852 set select d_select
10853 eval $inlibc
10854
10855 : see if semctl exists
10856 set semctl d_semctl
10857 eval $inlibc
10858
10859 : see if semget exists
10860 set semget d_semget
10861 eval $inlibc
10862
10863 : see if semop exists
10864 set semop d_semop
10865 eval $inlibc
10866
10867 : see how much of the 'sem*(2)' library is present.
10868 h_sem=true
10869 echo " "
10870 case "$d_semctl$d_semget$d_semop" in
10871 *"$undef"*) h_sem=false;;
10872 esac
10873 case "$osname" in
10874 freebsd)
10875     case "`ipcs 2>&1`" in
10876     "SVID messages"*"not configured"*)
10877         echo "Your $osname does not have the sem*(2) configured." >&4
10878         h_sem=false
10879         val="$undef"
10880         set semctl d_semctl
10881         eval $setvar
10882         set semget d_semget
10883         eval $setvar
10884         set semop d_semop
10885         eval $setvar
10886         ;;
10887     esac
10888     ;;
10889 esac
10890 : we could also check for sys/ipc.h ...
10891 if $h_sem && $test `./findhdr sys/sem.h`; then
10892         echo "You have the full sem*(2) library." >&4
10893         val="$define"
10894 else
10895         echo "You don't have the full sem*(2) library." >&4
10896         val="$undef"
10897 fi
10898 set d_sem
10899 eval $setvar
10900
10901 : see whether sys/sem.h defines union semun
10902 echo " "
10903 $cat > try.c <<'END'
10904 #include <sys/types.h>
10905 #include <sys/ipc.h>
10906 #include <sys/sem.h>
10907 int main () { union semun semun; semun.buf = 0; }
10908 END
10909 set try
10910 if eval $compile; then
10911     echo "You have union semun in <sys/sem.h>." >&4
10912     val="$define"
10913 else
10914     echo "You do not have union semun in <sys/sem.h>." >&4
10915     val="$undef"
10916 fi
10917 $rm -f try try.c try.h
10918 set d_union_semun
10919 eval $setvar
10920
10921 : see how to do semctl IPC_STAT
10922 case "$d_sem" in
10923 $define)
10924     : see whether semctl IPC_STAT can use union semun
10925     echo " "
10926     $cat > try.h <<END
10927 #ifndef S_IRUSR
10928 #   ifdef S_IREAD
10929 #       define S_IRUSR S_IREAD
10930 #       define S_IWUSR S_IWRITE
10931 #       define S_IXUSR S_IEXEC
10932 #   else
10933 #       define S_IRUSR 0400
10934 #       define S_IWUSR 0200
10935 #       define S_IXUSR 0100
10936 #   endif
10937 #   define S_IRGRP (S_IRUSR>>3)
10938 #   define S_IWGRP (S_IWUSR>>3)
10939 #   define S_IXGRP (S_IXUSR>>3)
10940 #   define S_IROTH (S_IRUSR>>6)
10941 #   define S_IWOTH (S_IWUSR>>6)
10942 #   define S_IXOTH (S_IXUSR>>6)
10943 #endif
10944 #ifndef S_IRWXU
10945 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10946 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10947 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10948 #endif
10949 END
10950
10951     $cat > try.c <<END
10952 #include <sys/types.h>
10953 #include <sys/ipc.h>
10954 #include <sys/sem.h>
10955 #include <sys/stat.h>
10956 #include <stdio.h>
10957 #include <errno.h>
10958 #include "try.h"
10959 #ifndef errno
10960 extern int errno;
10961 #endif
10962 #$d_union_semun HAS_UNION_SEMUN
10963 int main() {
10964     union semun
10965 #ifndef HAS_UNION_SEMUN
10966     {
10967         int val;
10968         struct semid_ds *buf;
10969         unsigned short *array;
10970     }
10971 #endif
10972     arg;
10973     int sem, st;
10974
10975 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10976     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10977     if (sem > -1) {
10978         struct semid_ds argbuf;
10979         arg.buf = &argbuf;
10980 #       ifdef IPC_STAT
10981         st = semctl(sem, 0, IPC_STAT, arg);
10982         if (st == 0)
10983             printf("semun\n");
10984         else
10985 #       endif /* IPC_STAT */
10986             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10987 #       ifdef IPC_RMID
10988         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10989 #       endif /* IPC_RMID */
10990             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10991     } else
10992 #endif /* IPC_PRIVATE && ... */
10993         printf("semget failed: errno = %d\n", errno);
10994   return 0;
10995 }
10996 END
10997     val="$undef"
10998     set try
10999     if eval $compile; then
11000         xxx=`./try`
11001         case "$xxx" in
11002         semun) val="$define" ;;
11003         esac
11004     fi
11005     $rm -f try try.c
11006     set d_semctl_semun
11007     eval $setvar
11008     case "$d_semctl_semun" in
11009     $define)
11010         echo "You can use union semun for semctl IPC_STAT." >&4
11011         also='also'
11012         ;;
11013     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11014         also=''
11015         ;;
11016     esac
11017
11018     : see whether semctl IPC_STAT can use struct semid_ds pointer
11019     $cat > try.c <<'END'
11020 #include <sys/types.h>
11021 #include <sys/ipc.h>
11022 #include <sys/sem.h>
11023 #include <sys/stat.h>
11024 #include "try.h"
11025 #include <stdio.h>
11026 #include <errno.h>
11027 #ifndef errno
11028 extern int errno;
11029 #endif
11030 int main() {
11031     struct semid_ds arg;
11032     int sem, st;
11033
11034 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11035     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11036     if (sem > -1) {
11037 #       ifdef IPC_STAT
11038         st = semctl(sem, 0, IPC_STAT, &arg);
11039         if (st == 0)
11040             printf("semid_ds\n");
11041         else
11042 #       endif /* IPC_STAT */
11043             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11044 #       ifdef IPC_RMID
11045         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11046 #       endif /* IPC_RMID */
11047             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11048     } else
11049 #endif /* IPC_PRIVATE && ... */
11050         printf("semget failed: errno = %d\n", errno);
11051
11052     return 0;
11053 }
11054 END
11055     val="$undef"
11056     set try
11057     if eval $compile; then
11058         xxx=`./try`
11059         case "$xxx" in
11060         semid_ds) val="$define" ;;
11061         esac
11062     fi
11063     $rm -f try try.c
11064     set d_semctl_semid_ds
11065     eval $setvar
11066     case "$d_semctl_semid_ds" in
11067     $define)
11068         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11069         ;;
11070     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11071         ;;
11072     esac
11073     $rm -f try.h
11074     ;;
11075 *)  val="$undef"
11076
11077     # We do not have the full sem*(2) library, so assume we can not
11078     # use either.
11079
11080     set d_semctl_semun
11081     eval $setvar
11082
11083     set d_semctl_semid_ds
11084     eval $setvar
11085     ;;
11086 esac
11087
11088 : see if setegid exists
11089 set setegid d_setegid
11090 eval $inlibc
11091
11092 : see if seteuid exists
11093 set seteuid d_seteuid
11094 eval $inlibc
11095
11096 : see if setgrent exists
11097 set setgrent d_setgrent
11098 eval $inlibc
11099
11100 : see if sethostent exists
11101 set sethostent d_sethent
11102 eval $inlibc
11103
11104 : see if setlinebuf exists
11105 set setlinebuf d_setlinebuf
11106 eval $inlibc
11107
11108 : see if setlocale exists
11109 set setlocale d_setlocale
11110 eval $inlibc
11111
11112 : see if setnetent exists
11113 set setnetent d_setnent
11114 eval $inlibc
11115
11116 : see if setprotoent exists
11117 set setprotoent d_setpent
11118 eval $inlibc
11119
11120 : see if setpgid exists
11121 set setpgid d_setpgid
11122 eval $inlibc
11123
11124 : see if setpgrp2 exists
11125 set setpgrp2 d_setpgrp2
11126 eval $inlibc
11127
11128 : see if setpriority exists
11129 set setpriority d_setprior
11130 eval $inlibc
11131
11132 : see if setproctitle exists
11133 set setproctitle d_setproctitle
11134 eval $inlibc
11135
11136 : see if setpwent exists
11137 set setpwent d_setpwent
11138 eval $inlibc
11139
11140 : see if setregid exists
11141 set setregid d_setregid
11142 eval $inlibc
11143 set setresgid d_setresgid
11144 eval $inlibc
11145
11146 : see if setreuid exists
11147 set setreuid d_setreuid
11148 eval $inlibc
11149 set setresuid d_setresuid
11150 eval $inlibc
11151
11152 : see if setrgid exists
11153 set setrgid d_setrgid
11154 eval $inlibc
11155
11156 : see if setruid exists
11157 set setruid d_setruid
11158 eval $inlibc
11159
11160 : see if setservent exists
11161 set setservent d_setsent
11162 eval $inlibc
11163
11164 : see if setsid exists
11165 set setsid d_setsid
11166 eval $inlibc
11167
11168 : see if setvbuf exists
11169 set setvbuf d_setvbuf
11170 eval $inlibc
11171
11172 : see if sfio.h is available
11173 set sfio.h i_sfio
11174 eval $inhdr
11175
11176
11177 : see if sfio library is available
11178 case "$i_sfio" in
11179 $define)
11180         val=''
11181         set sfreserve val
11182         eval $inlibc
11183         ;;
11184 *)
11185         val="$undef"
11186         ;;
11187 esac
11188 : Ok, but do we want to use it.
11189 case "$val" in
11190 $define)
11191         case "$usesfio" in
11192         true|$define|[yY]*) dflt='y';;
11193         *) dflt='n';;
11194         esac
11195         echo "$package can use the sfio library, but it is experimental."
11196         rp="You seem to have sfio available, do you want to try using it?"
11197         . ./myread
11198         case "$ans" in
11199         y|Y) ;;
11200         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11201                 val="$undef"
11202                 : Remove sfio from list of libraries to use
11203                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11204                 shift
11205                 libs="$*"
11206                 echo "libs = $libs" >&4
11207                 ;;
11208         esac
11209         ;;
11210 *)      case "$usesfio" in
11211         true|$define|[yY]*)
11212                 echo "Sorry, cannot find sfio on this machine" >&4
11213                 echo "Ignoring your setting of usesfio=$usesfio" >&4
11214                 ;;
11215         esac
11216         ;;
11217 esac
11218 set d_sfio
11219 eval $setvar
11220 case "$d_sfio" in
11221 $define) usesfio='true';;
11222 *) usesfio='false';;
11223 esac
11224
11225 : see if shmctl exists
11226 set shmctl d_shmctl
11227 eval $inlibc
11228
11229 : see if shmget exists
11230 set shmget d_shmget
11231 eval $inlibc
11232
11233 : see if shmat exists
11234 set shmat d_shmat
11235 eval $inlibc
11236 : see what shmat returns
11237 case "$d_shmat" in
11238 "$define")
11239         $cat >shmat.c <<'END'
11240 #include <sys/shm.h>
11241 void *shmat();
11242 END
11243         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11244                 shmattype='void *'
11245         else
11246                 shmattype='char *'
11247         fi
11248         echo "and it returns ($shmattype)." >&4
11249         : see if a prototype for shmat is available
11250         xxx=`./findhdr sys/shm.h`
11251         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11252         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11253                 val="$define"
11254         else
11255                 val="$undef"
11256         fi
11257         $rm -f shmat.[co]
11258         ;;
11259 *)
11260         val="$undef"
11261         ;;
11262 esac
11263 set d_shmatprototype
11264 eval $setvar
11265
11266 : see if shmdt exists
11267 set shmdt d_shmdt
11268 eval $inlibc
11269
11270 : see how much of the 'shm*(2)' library is present.
11271 h_shm=true
11272 echo " "
11273 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11274 *"$undef"*) h_shm=false;;
11275 esac
11276 case "$osname" in
11277 freebsd)
11278     case "`ipcs 2>&1`" in
11279     "SVID shared memory"*"not configured"*)
11280         echo "Your $osname does not have the shm*(2) configured." >&4
11281         h_shm=false
11282         val="$undef"
11283         set shmctl d_shmctl
11284         evat $setvar
11285         set shmget d_shmget
11286         evat $setvar
11287         set shmat d_shmat
11288         evat $setvar
11289         set shmdt d_shmdt
11290         evat $setvar
11291         ;;
11292     esac
11293     ;;
11294 esac
11295 : we could also check for sys/ipc.h ...
11296 if $h_shm && $test `./findhdr sys/shm.h`; then
11297         echo "You have the full shm*(2) library." >&4
11298         val="$define"
11299 else
11300         echo "You don't have the full shm*(2) library." >&4
11301         val="$undef"
11302 fi
11303 set d_shm
11304 eval $setvar
11305
11306 echo " "
11307 : see if we have sigaction
11308 if set sigaction val -f d_sigaction; eval $csym; $val; then
11309         echo 'sigaction() found.' >&4
11310         $cat > try.c <<'EOP'
11311 #include <stdio.h>
11312 #include <sys/types.h>
11313 #include <signal.h>
11314 int main()
11315 {
11316     struct sigaction act, oact;
11317     act.sa_flags = 0;
11318     oact.sa_handler = 0;
11319     /* so that act and oact are used */
11320     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11321 }
11322 EOP
11323         set try
11324         if eval $compile_ok; then
11325                 val="$define"
11326         else
11327                 echo "But you don't seem to have a useable struct sigaction." >&4
11328                 val="$undef"
11329         fi
11330 else
11331         echo 'sigaction NOT found.' >&4
11332         val="$undef"
11333 fi
11334 set d_sigaction; eval $setvar
11335 $rm -f try try$_o try.c
11336
11337 : see if sigsetjmp exists
11338 echo " "
11339 case "$d_sigsetjmp" in
11340 '')
11341         $cat >try.c <<'EOP'
11342 #include <setjmp.h>
11343 sigjmp_buf env;
11344 int set = 1;
11345 int main()
11346 {
11347         if (sigsetjmp(env,1))
11348                 exit(set);
11349         set = 0;
11350         siglongjmp(env, 1);
11351         exit(1);
11352 }
11353 EOP
11354         set try
11355         if eval $compile; then
11356                 if ./try >/dev/null 2>&1; then
11357                         echo "POSIX sigsetjmp found." >&4
11358                         val="$define"
11359                 else
11360                         $cat >&4 <<EOM
11361 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11362 I'll ignore them.
11363 EOM
11364                         val="$undef"
11365                 fi
11366         else
11367                 echo "sigsetjmp not found." >&4
11368                 val="$undef"
11369         fi
11370         ;;
11371 *) val="$d_sigsetjmp"
11372         case "$d_sigsetjmp" in
11373         $define) echo "POSIX sigsetjmp found." >&4;;
11374         $undef) echo "sigsetjmp not found." >&4;;
11375         esac
11376         ;;
11377 esac
11378 set d_sigsetjmp
11379 eval $setvar
11380 $rm -f try.c try
11381
11382 : see if sys/stat.h is available
11383 set sys/stat.h i_sysstat
11384 eval $inhdr
11385
11386
11387 : see if stat knows about block sizes
11388 echo " "
11389 echo "Checking to see if your struct stat has st_blocks field..." >&4
11390 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11391 eval $hasfield
11392
11393
11394 : see if this is a sys/vfs.h system
11395 set sys/vfs.h i_sysvfs
11396 eval $inhdr
11397
11398
11399 : see if this is a sys/statfs.h system
11400 set sys/statfs.h i_sysstatfs
11401 eval $inhdr
11402
11403
11404 echo " "
11405 echo "Checking to see if your system supports struct statfs..." >&4
11406 set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
11407 eval $hasstruct
11408 case "$d_statfs_s" in
11409 "$define")      echo "Yes, it does."   ;;
11410 *)              echo "No, it doesn't." ;;
11411 esac
11412
11413
11414
11415 : see if struct statfs knows about f_flags
11416 case "$d_statfs_s" in
11417 define) 
11418         echo " "
11419         echo "Checking to see if your struct statfs has f_flags field..." >&4
11420         set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
11421         eval $hasfield
11422         ;;
11423 *)      val="$undef"
11424         set d_statfs_f_flags
11425         eval $setvar
11426         ;;
11427 esac
11428 case "$d_statfs_f_flags" in
11429 "$define")      echo "Yes, it does."   ;;
11430 *)              echo "No, it doesn't." ;;
11431 esac
11432
11433 : see if _ptr and _cnt from stdio act std
11434 echo " "
11435 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11436         echo "(Looks like you have stdio.h from Linux.)"
11437         case "$stdio_ptr" in
11438         '') stdio_ptr='((fp)->_IO_read_ptr)'
11439                 ptr_lval=$define
11440                 ;;
11441         *)      ptr_lval=$d_stdio_ptr_lval;;
11442         esac
11443         case "$stdio_cnt" in
11444         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11445                 cnt_lval=$undef
11446                 ;;
11447         *)      cnt_lval=$d_stdio_cnt_lval;;
11448         esac
11449         case "$stdio_base" in
11450         '') stdio_base='((fp)->_IO_read_base)';;
11451         esac
11452         case "$stdio_bufsiz" in
11453         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11454         esac
11455 else
11456         case "$stdio_ptr" in
11457         '') stdio_ptr='((fp)->_ptr)'
11458                 ptr_lval=$define
11459                 ;;
11460         *)      ptr_lval=$d_stdio_ptr_lval;;
11461         esac
11462         case "$stdio_cnt" in
11463         '') stdio_cnt='((fp)->_cnt)'
11464                 cnt_lval=$define
11465                 ;;
11466         *)      cnt_lval=$d_stdio_cnt_lval;;
11467         esac
11468         case "$stdio_base" in
11469         '') stdio_base='((fp)->_base)';;
11470         esac
11471         case "$stdio_bufsiz" in
11472         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11473         esac
11474 fi
11475 : test whether _ptr and _cnt really work
11476 echo "Checking how std your stdio is..." >&4
11477 $cat >try.c <<EOP
11478 #include <stdio.h>
11479 #define FILE_ptr(fp)    $stdio_ptr
11480 #define FILE_cnt(fp)    $stdio_cnt
11481 int main() {
11482         FILE *fp = fopen("try.c", "r");
11483         char c = getc(fp);
11484         if (
11485                 18 <= FILE_cnt(fp) &&
11486                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11487         )
11488                 exit(0);
11489         exit(1);
11490 }
11491 EOP
11492 val="$undef"
11493 set try
11494 if eval $compile; then
11495         if ./try; then
11496                 echo "Your stdio acts pretty std."
11497                 val="$define"
11498         else
11499                 echo "Your stdio isn't very std."
11500         fi
11501 else
11502         echo "Your stdio doesn't appear very std."
11503 fi
11504 $rm -f try.c try
11505 set d_stdstdio
11506 eval $setvar
11507
11508 : Can _ptr be used as an lvalue?
11509 case "$d_stdstdio$ptr_lval" in
11510 $define$define) val=$define ;;
11511 *) val=$undef ;;
11512 esac
11513 set d_stdio_ptr_lval
11514 eval $setvar
11515
11516 : Can _cnt be used as an lvalue?
11517 case "$d_stdstdio$cnt_lval" in
11518 $define$define) val=$define ;;
11519 *) val=$undef ;;
11520 esac
11521 set d_stdio_cnt_lval
11522 eval $setvar
11523
11524 : see if _base is also standard
11525 val="$undef"
11526 case "$d_stdstdio" in
11527 $define)
11528         $cat >try.c <<EOP
11529 #include <stdio.h>
11530 #define FILE_base(fp)   $stdio_base
11531 #define FILE_bufsiz(fp) $stdio_bufsiz
11532 int main() {
11533         FILE *fp = fopen("try.c", "r");
11534         char c = getc(fp);
11535         if (
11536                 19 <= FILE_bufsiz(fp) &&
11537                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11538         )
11539                 exit(0);
11540         exit(1);
11541 }
11542 EOP
11543         set try
11544         if eval $compile; then
11545                 if ./try; then
11546                         echo "And its _base field acts std."
11547                         val="$define"
11548                 else
11549                         echo "But its _base field isn't std."
11550                 fi
11551         else
11552                 echo "However, it seems to be lacking the _base field."
11553         fi
11554         $rm -f try.c try
11555         ;;
11556 esac
11557 set d_stdiobase
11558 eval $setvar
11559
11560 $cat >&4 <<EOM
11561 Checking how to access stdio streams by file descriptor number...
11562 EOM
11563 case "$stdio_stream_array" in
11564 '')     $cat >try.c <<EOCP
11565 #include <stdio.h>
11566 int main() {
11567   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11568     printf("yes\n");
11569 }
11570 EOCP
11571         for s in _iob __iob __sF
11572         do
11573                 set try -DSTDIO_STREAM_ARRAY=$s
11574                 if eval $compile; then
11575                         case "`./try$exe_ext`" in
11576                         yes)    stdio_stream_array=$s; break ;;
11577                         esac
11578                 fi
11579         done
11580         $rm -f try.* try$exe_ext
11581 esac
11582 case "$stdio_stream_array" in
11583 '')     $cat >&4 <<EOM
11584 I can't figure out how to access stdio streams by file descriptor number.
11585 EOM
11586         d_stdio_stream_array="$undef"
11587         ;;
11588 *)      $cat >&4 <<EOM
11589 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11590 EOM
11591         d_stdio_stream_array="$define"
11592         ;;
11593 esac
11594
11595 : see if strcoll exists
11596 set strcoll d_strcoll
11597 eval $inlibc
11598
11599 : check for structure copying
11600 echo " "
11601 echo "Checking to see if your C compiler can copy structs..." >&4
11602 $cat >try.c <<'EOCP'
11603 int main()
11604 {
11605         struct blurfl {
11606                 int dyick;
11607         } foo, bar;
11608
11609         foo = bar;
11610 }
11611 EOCP
11612 if $cc -c try.c >/dev/null 2>&1 ; then
11613         val="$define"
11614         echo "Yup, it can."
11615 else
11616         val="$undef"
11617         echo "Nope, it can't."
11618 fi
11619 set d_strctcpy
11620 eval $setvar
11621 $rm -f try.*
11622
11623 : see if strerror and/or sys_errlist[] exist
11624 echo " "
11625 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11626     if set strerror val -f d_strerror; eval $csym; $val; then
11627                 echo 'strerror() found.' >&4
11628                 d_strerror="$define"
11629                 d_strerrm='strerror(e)'
11630                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11631                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11632                         d_syserrlst="$define"
11633                 else
11634                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11635                         d_syserrlst="$undef"
11636                 fi
11637     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11638                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11639                 echo 'strerror() found in string header.' >&4
11640                 d_strerror="$define"
11641                 d_strerrm='strerror(e)'
11642                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11643                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11644                                 d_syserrlst="$define"
11645                 else
11646                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11647                         d_syserrlst="$undef"
11648                 fi
11649     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11650                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11651                 d_strerror="$undef"
11652                 d_syserrlst="$define"
11653                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11654     else
11655                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11656                 d_strerror="$undef"
11657                 d_syserrlst="$undef"
11658                 d_strerrm='"unknown"'
11659     fi
11660 fi
11661
11662 : see if strtod exists
11663 set strtod d_strtod
11664 eval $inlibc
11665
11666 : see if strtol exists
11667 set strtol d_strtol
11668 eval $inlibc
11669
11670 : see if strtold exists
11671 set strtold d_strtold
11672 eval $inlibc
11673
11674 : see if strtoll exists
11675 set strtoll d_strtoll
11676 eval $inlibc
11677
11678 case "$d_longlong-$d_strtoll" in
11679 "$define-$define")
11680         $cat <<EOM
11681 Checking whether your strtoll() works okay...
11682 EOM
11683         $cat >try.c <<'EOCP'
11684 #include <errno.h>
11685 #ifdef __hpux
11686 #define strtoll __strtoll
11687 #endif
11688 #include <stdio.h>
11689 extern long long int strtoll(char *s, char **, int); 
11690 static int bad = 0;
11691 int check(char *s, long long ell, int een) {
11692         long long gll;
11693         errno = 0;
11694         gll = strtoll(s, 0, 10);
11695         if (!((gll == ell) && (errno == een)))
11696                 bad++;
11697 }
11698 int main() {
11699         check(" 1",                                      1LL, 0);
11700         check(" 0",                                      0LL, 0);
11701         check("-1",                                     -1LL, 0);
11702         check("-9223372036854775808", -9223372036854775808LL, 0);
11703         check("-9223372036854775808", -9223372036854775808LL, 0);
11704         check(" 9223372036854775807",  9223372036854775807LL, 0);
11705         check("-9223372036854775808", -9223372036854775808LL, 0);
11706         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11707         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11708         if (!bad)
11709                 printf("ok\n");
11710 }
11711 EOCP
11712         set try
11713         if eval $compile; then
11714                 case "`./try`" in
11715                 ok) echo "Your strtoll() seems to be working okay." ;;
11716                 *) cat <<EOM >&4
11717 Your strtoll() doesn't seem to be working okay.
11718 EOM
11719                    d_strtoll="$undef"
11720                    ;;
11721                 esac
11722         fi
11723         ;;
11724 esac
11725
11726 : see if strtoul exists
11727 set strtoul d_strtoul
11728 eval $inlibc
11729
11730 : see if strtoull exists
11731 set strtoull d_strtoull
11732 eval $inlibc
11733
11734 case "$d_longlong-$d_strtoull" in
11735 "$define-$define")
11736         $cat <<EOM
11737 Checking whether your strtoull() works okay...
11738 EOM
11739         $cat >try.c <<'EOCP'
11740 #include <errno.h>
11741 #ifdef __hpux
11742 #define strtoull __strtoull
11743 #endif
11744 #include <stdio.h>
11745 extern unsigned long long int strtoull(char *s, char **, int); 
11746 static int bad = 0;
11747 int check(char *s, long long eull, int een) {
11748         long long gull;
11749         errno = 0;
11750         gull = strtoull(s, 0, 10);
11751         if (!((gull == eull) && (errno == een)))
11752                 bad++;
11753 }
11754 int main() {
11755         check(" 1",                                       1LL, 0);
11756         check(" 0",                                       0LL, 0);
11757         check("18446744073709551615", 18446744073709551615ULL, 0);
11758         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11759         if (!bad)
11760                 printf("ok\n");
11761 }
11762 EOCP
11763         set try
11764         if eval $compile; then
11765                 case "`./try`" in
11766                 ok) echo "Your strtoull() seems to be working okay." ;;
11767                 *) cat <<EOM >&4
11768 Your strtoull() doesn't seem to be working okay.
11769 EOM
11770                    d_strtoull="$undef"
11771                    ;;
11772                 esac
11773         fi
11774         ;;
11775 esac
11776
11777 : see if strtouq exists
11778 set strtouq d_strtouq
11779 eval $inlibc
11780
11781 : see if strxfrm exists
11782 set strxfrm d_strxfrm
11783 eval $inlibc
11784
11785 : see if symlink exists
11786 set symlink d_symlink
11787 eval $inlibc
11788
11789 : see if syscall exists
11790 set syscall d_syscall
11791 eval $inlibc
11792
11793 : see if sysconf exists
11794 set sysconf d_sysconf
11795 eval $inlibc
11796
11797 : see if system exists
11798 set system d_system
11799 eval $inlibc
11800
11801 : see if tcgetpgrp exists
11802 set tcgetpgrp d_tcgetpgrp
11803 eval $inlibc
11804
11805 : see if tcsetpgrp exists
11806 set tcsetpgrp d_tcsetpgrp
11807 eval $inlibc
11808
11809 : see if prototype for telldir is available
11810 echo " "
11811 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11812 eval $hasproto
11813
11814 : see if this is a sys/times.h system
11815 set sys/times.h i_systimes
11816 eval $inhdr
11817
11818 : see if times exists
11819 echo " "
11820 if set times val -f d_times; eval $csym; $val; then
11821         echo 'times() found.' >&4
11822         d_times="$define"
11823         inc=''
11824         case "$i_systimes" in
11825         "$define") inc='sys/times.h';;
11826         esac
11827         rp="What is the type returned by times() on this system?"
11828         set clock_t clocktype long stdio.h sys/types.h $inc
11829         eval $typedef_ask
11830 else
11831         echo 'times() NOT found, hope that will do.' >&4
11832         d_times="$undef"
11833         clocktype='int'
11834 fi
11835
11836 : see if truncate exists
11837 set truncate d_truncate
11838 eval $inlibc
11839
11840 : see if tzname[] exists
11841 echo " "
11842 if set tzname val -a d_tzname; eval $csym; $val; then
11843         val="$define"
11844         echo 'tzname[] found.' >&4
11845 else
11846         val="$undef"
11847         echo 'tzname[] NOT found.' >&4
11848 fi
11849 set d_tzname
11850 eval $setvar
11851
11852 : see if umask exists
11853 set umask d_umask
11854 eval $inlibc
11855
11856 : see if ustat exists
11857 set ustat d_ustat
11858 eval $inlibc
11859
11860 : backward compatibility for d_hvfork
11861 if test X$d_hvfork != X; then
11862         d_vfork="$d_hvfork"
11863         d_hvfork=''
11864 fi
11865 : see if there is a vfork
11866 val=''
11867 set vfork val
11868 eval $inlibc
11869
11870 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11871 : perl on Solaris 2.x, and probably elsewhere.
11872 case "$val" in
11873 $define)
11874         echo " "
11875         case "$usevfork" in
11876         false) dflt='n';;
11877         *) dflt='y';;
11878         esac
11879         cat <<'EOM'
11880  
11881 Perl can only use a vfork() that doesn't suffer from strict
11882 restrictions on calling functions or modifying global data in
11883 the child.  For example, glibc-2.1 contains such a vfork()
11884 that is unsuitable.  If your system provides a proper fork()
11885 call, chances are that you do NOT want perl to use vfork().
11886
11887 EOM
11888         rp="Do you still want to use vfork()?"
11889         . ./myread
11890         case "$ans" in
11891         y|Y) ;;
11892         *)
11893                 echo "Ok, we won't use vfork()."
11894                 val="$undef"
11895                 ;;
11896         esac
11897         ;;
11898 esac
11899 set d_vfork
11900 eval $setvar
11901 case "$d_vfork" in
11902 $define) usevfork='true';;
11903 *) usevfork='false';;
11904 esac
11905
11906 : see if this is an sysdir system
11907 set sys/dir.h i_sysdir
11908 eval $inhdr
11909
11910 : see if this is an sysndir system
11911 set sys/ndir.h i_sysndir
11912 eval $inhdr
11913
11914 : see if closedir exists
11915 set closedir d_closedir
11916 eval $inlibc
11917
11918 case "$d_closedir" in
11919 "$define")
11920         echo " "
11921         echo "Checking whether closedir() returns a status..." >&4
11922         cat > closedir.c <<EOM
11923 #$i_dirent I_DIRENT             /**/
11924 #$i_sysdir I_SYS_DIR            /**/
11925 #$i_sysndir I_SYS_NDIR          /**/
11926 #$i_systypes I_SYS_TYPES        /**/
11927
11928 #if defined(I_SYS_TYPES)
11929 #include <sys/types.h>
11930 #endif
11931 #if defined(I_DIRENT)
11932 #include <dirent.h>
11933 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11934 #include <sys/dir.h>
11935 #endif
11936 #else
11937 #ifdef I_SYS_NDIR
11938 #include <sys/ndir.h>
11939 #else
11940 #ifdef I_SYS_DIR
11941 #ifdef hp9000s500
11942 #include <ndir.h>       /* may be wrong in the future */
11943 #else
11944 #include <sys/dir.h>
11945 #endif
11946 #endif
11947 #endif
11948 #endif 
11949 int main() { return closedir(opendir(".")); }
11950 EOM
11951         set closedir
11952         if eval $compile_ok; then
11953                 if ./closedir > /dev/null 2>&1 ; then
11954                         echo "Yes, it does."
11955                         val="$undef"
11956                 else
11957                         echo "No, it doesn't."
11958                         val="$define"
11959                 fi
11960         else
11961                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11962                 val="$define"
11963         fi
11964         ;;
11965 *)
11966         val="$undef";
11967         ;;
11968 esac
11969 set d_void_closedir
11970 eval $setvar
11971 $rm -f closedir*
11972 : check for volatile keyword
11973 echo " "
11974 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11975 $cat >try.c <<'EOCP'
11976 int main()
11977 {
11978         typedef struct _goo_struct goo_struct;
11979         goo_struct * volatile goo = ((goo_struct *)0);
11980         struct _goo_struct {
11981                 long long_int;
11982                 int reg_int;
11983                 char char_var;
11984         };
11985         typedef unsigned short foo_t;
11986         char *volatile foo;
11987         volatile int bar;
11988         volatile foo_t blech;
11989         foo = foo;
11990 }
11991 EOCP
11992 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11993         val="$define"
11994         echo "Yup, it does."
11995 else
11996         val="$undef"
11997         echo "Nope, it doesn't."
11998 fi
11999 set d_volatile
12000 eval $setvar
12001 $rm -f try.*
12002
12003 : see if there is a wait4
12004 set wait4 d_wait4
12005 eval $inlibc
12006
12007 : see if waitpid exists
12008 set waitpid d_waitpid
12009 eval $inlibc
12010
12011 : see if wcstombs exists
12012 set wcstombs d_wcstombs
12013 eval $inlibc
12014
12015 : see if wctomb exists
12016 set wctomb d_wctomb
12017 eval $inlibc
12018
12019 : preserve RCS keywords in files with variable substitution, grrr
12020 Date='$Date'
12021 Id='$Id'
12022 Log='$Log'
12023 RCSfile='$RCSfile'
12024 Revision='$Revision'
12025
12026 case "$crosscompile" in
12027 ''|[nN]*) crosscompile="$undef" ;;
12028 esac
12029
12030 case "$osname" in
12031 next|rhapsody|darwin) multiarch="$define" ;;
12032 esac
12033 case "$multiarch" in
12034 ''|[nN]*) multiarch="$undef" ;;
12035 esac
12036
12037 : check for alignment requirements
12038 echo " "
12039 case "$crosscompile$multiarch" in
12040 *$define*)
12041         $cat <<EOM
12042 You seem to be either cross-compiling or doing a multiarchitecture build,
12043 skipping the memory alignment check.
12044
12045 EOM
12046         case "$alignbytes" in
12047         '') alignbytes=8 ;;
12048         esac
12049         ;;
12050 *)
12051         case "$alignbytes" in
12052         '') echo "Checking alignment constraints..." >&4
12053                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12054                         $cat >try.c <<'EOCP'
12055 typedef long double NV;
12056 EOCP
12057                 else
12058                         $cat >try.c <<'EOCP'
12059 typedef double NV;
12060 EOCP
12061                 fi
12062                 $cat >>try.c <<'EOCP'
12063 #include <stdio.h>
12064 struct foobar {
12065         char foo;
12066         NV bar;
12067 } try_algn;
12068 int main()
12069 {
12070     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12071     return(0);
12072 }
12073 EOCP
12074                 set try
12075                 if eval $compile_ok; then
12076                         dflt=`./try`
12077                 else
12078                         dflt='8'
12079                         echo "(I can't seem to compile the test program...)"
12080                 fi
12081                 ;;
12082         *) dflt="$alignbytes"
12083                 ;;
12084         esac
12085         rp="Doubles must be aligned on a how-many-byte boundary?"
12086         . ./myread
12087         alignbytes="$ans"
12088         $rm -f try.c try
12089         ;;
12090 esac
12091
12092
12093 : set the base revision
12094 baserev=5.0
12095
12096 : check for ordering of bytes in a long
12097 echo " "
12098 case "$crosscompile$multiarch" in
12099 *$define*)
12100         $cat <<EOM
12101 You seem to be either cross-compiling or doing a multiarchitecture build,
12102 skipping the byteorder check.
12103
12104 EOM
12105         byteorder='0xffff'
12106         ;;
12107 *)
12108         case "$byteorder" in
12109         '')
12110                 $cat <<'EOM'
12111 In the following, larger digits indicate more significance.  A big-endian
12112 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12113 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12114 machines may have weird orders like 3412.  A Cray will report 87654321,
12115 an Alpha will report 12345678. If the test program works the default is
12116 probably right.
12117 I'm now running the test program...
12118 EOM
12119                 $cat >try.c <<'EOCP'
12120 #include <stdio.h>
12121 int main()
12122 {
12123         int i;
12124         union {
12125                 unsigned long l;
12126                 char c[sizeof(long)];
12127         } u;
12128
12129         if (sizeof(long) > 4)
12130                 u.l = (0x08070605L << 32) | 0x04030201L;
12131         else
12132                 u.l = 0x04030201L;
12133         for (i = 0; i < sizeof(long); i++)
12134                 printf("%c", u.c[i]+'0');
12135         printf("\n");
12136         exit(0);
12137 }
12138 EOCP
12139                 xxx_prompt=y
12140                 set try
12141                 if eval $compile && ./try > /dev/null; then
12142                         dflt=`./try`
12143                         case "$dflt" in
12144                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12145                                 echo "(The test program ran ok.)"
12146                                 echo "byteorder=$dflt"
12147                                 xxx_prompt=n
12148                         ;;
12149                         ????|????????) echo "(The test program ran ok.)" ;;
12150                         *) echo "(The test program didn't run right for some reason.)" ;;
12151                         esac
12152                 else
12153                         dflt='4321'
12154                         cat <<'EOM'
12155 (I can't seem to compile the test program.  Guessing big-endian...)
12156 EOM
12157                 fi
12158                 case "$xxx_prompt" in
12159                 y)
12160                         rp="What is the order of bytes in a long?"
12161                         . ./myread
12162                         byteorder="$ans"
12163                         ;;
12164                 *)      byteorder=$dflt
12165                         ;;
12166                 esac
12167                 ;;
12168         esac
12169         $rm -f try.c try
12170         ;;
12171 esac
12172
12173
12174 : how do we catenate cpp tokens here?
12175 echo " "
12176 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12177 $cat >cpp_stuff.c <<'EOCP'
12178 #define RCAT(a,b)a/**/b
12179 #define ACAT(a,b)a ## b
12180 RCAT(Rei,ser)
12181 ACAT(Cir,cus)
12182 EOCP
12183 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12184 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12185         echo "Oh!  Smells like ANSI's been here." >&4
12186         echo "We can catify or stringify, separately or together!"
12187         cpp_stuff=42
12188 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12189         echo "Ah, yes!  The good old days!" >&4
12190         echo "However, in the good old days we don't know how to stringify and"
12191         echo "catify at the same time."
12192         cpp_stuff=1
12193 else
12194         $cat >&4 <<EOM
12195 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12196 to have to edit the values of CAT[2-5] in config.h...
12197 EOM
12198         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12199 fi
12200 $rm -f cpp_stuff.*
12201
12202 : see if this is a db.h system
12203 set db.h i_db
12204 eval $inhdr
12205
12206 case "$i_db" in
12207 $define)
12208         : Check db version.
12209         echo " "
12210         echo "Checking Berkeley DB version ..." >&4
12211         $cat >try.c <<EOCP
12212 #$d_const HASCONST
12213 #ifndef HASCONST
12214 #define const
12215 #endif
12216 #include <sys/types.h>
12217 #include <stdio.h>
12218 #include <db.h>
12219 int main()
12220 {
12221 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12222     int Major, Minor, Patch ;
12223     unsigned long Version ;
12224     (void)db_version(&Major, &Minor, &Patch) ;
12225     printf("You have Berkeley DB Version 2 or greater\n");
12226
12227     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12228                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12229     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12230                 Major, Minor, Patch) ;
12231
12232     /* check that db.h & libdb are compatible */
12233     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12234         printf("db.h and libdb are incompatible\n") ;
12235         exit(3);        
12236     }
12237
12238     printf("db.h and libdb are compatible\n") ;
12239
12240     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12241                 + DB_VERSION_PATCH ;
12242
12243     /* needs to be >= 2.3.4 */
12244     if (Version < 2003004) {
12245     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12246         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12247         exit(2);        
12248     }
12249
12250     exit(0);
12251 #else
12252 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12253     printf("You have Berkeley DB Version 1\n");
12254     exit(0);    /* DB version < 2: the coast is clear. */
12255 #else
12256     exit(1);    /* <db.h> not Berkeley DB? */
12257 #endif
12258 #endif
12259 }
12260 EOCP
12261         set try
12262         if eval $compile_ok && ./try; then
12263                 echo 'Looks OK.' >&4
12264         else
12265                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12266                 i_db=$undef
12267                 case " $libs " in
12268                 *"-ldb "*)
12269                         : Remove db from list of libraries to use
12270                         echo "Removing unusable -ldb from library list" >&4
12271                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12272                         shift
12273                         libs="$*"
12274                         echo "libs = $libs" >&4
12275                         ;;
12276                 esac
12277         fi
12278         $rm -f try.*
12279         ;;
12280 esac
12281
12282 case "$i_db" in
12283 define)
12284         : Check the return type needed for hash 
12285         echo " "
12286         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12287         $cat >try.c <<EOCP
12288 #$d_const HASCONST
12289 #ifndef HASCONST
12290 #define const
12291 #endif
12292 #include <sys/types.h>
12293 #include <db.h>
12294
12295 #ifndef DB_VERSION_MAJOR
12296 u_int32_t hash_cb (ptr, size)
12297 const void *ptr;
12298 size_t size;
12299 {
12300 }
12301 HASHINFO info;
12302 int main()
12303 {
12304         info.hash = hash_cb;
12305 }
12306 #endif
12307 EOCP
12308         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12309                 if $contains warning try.out >>/dev/null 2>&1 ; then
12310                         db_hashtype='int'
12311                 else
12312                         db_hashtype='u_int32_t'
12313                 fi
12314         else
12315                 : XXX Maybe we should just give up here.
12316                 db_hashtype=u_int32_t
12317                 $cat try.out >&4
12318                 echo "Help:  I can't seem to compile the db test program." >&4
12319                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12320         fi
12321         $rm -f try.*
12322         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12323         ;;
12324 *)      db_hashtype=u_int32_t
12325         ;;
12326 esac
12327 case "$i_db" in
12328 define)
12329         : Check the return type needed for prefix 
12330         echo " "
12331         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12332         cat >try.c <<EOCP
12333 #$d_const HASCONST
12334 #ifndef HASCONST
12335 #define const
12336 #endif
12337 #include <sys/types.h>
12338 #include <db.h>
12339
12340 #ifndef DB_VERSION_MAJOR
12341 size_t prefix_cb (key1, key2)
12342 const DBT *key1;
12343 const DBT *key2;
12344 {
12345 }
12346 BTREEINFO info;
12347 int main()
12348 {
12349         info.prefix = prefix_cb;
12350 }
12351 #endif
12352 EOCP
12353         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12354                 if $contains warning try.out >>/dev/null 2>&1 ; then
12355                         db_prefixtype='int'
12356                 else
12357                         db_prefixtype='size_t'
12358                 fi
12359         else
12360                 db_prefixtype='size_t'
12361                 : XXX Maybe we should just give up here.
12362                 $cat try.out >&4
12363                 echo "Help:  I can't seem to compile the db test program." >&4
12364                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12365         fi
12366         $rm -f try.*
12367         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12368         ;;
12369 *)      db_prefixtype='size_t'
12370         ;;
12371 esac
12372
12373 : check for void type
12374 echo " "
12375 echo "Checking to see how well your C compiler groks the void type..." >&4
12376 case "$voidflags" in
12377 '')
12378         $cat >try.c <<'EOCP'
12379 #if TRY & 1
12380 void sub() {
12381 #else
12382 sub() {
12383 #endif
12384         extern void moo();      /* function returning void */
12385         void (*goo)();          /* ptr to func returning void */
12386 #if TRY & 8
12387         void *hue;              /* generic ptr */
12388 #endif
12389 #if TRY & 2
12390         void (*foo[10])();
12391 #endif
12392
12393 #if TRY & 4
12394         if(goo == moo) {
12395                 exit(0);
12396         }
12397 #endif
12398         exit(0);
12399 }
12400 int main() { sub(); }
12401 EOCP
12402         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12403                 voidflags=$defvoidused
12404         echo "Good.  It appears to support void to the level $package wants.">&4
12405                 if $contains warning .out >/dev/null 2>&1; then
12406                         echo "However, you might get some warnings that look like this:"
12407                         $cat .out
12408                 fi
12409         else
12410 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12411                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12412                         echo "It supports 1..."
12413                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12414                                 echo "It also supports 2..."
12415                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12416                                         voidflags=7
12417                                         echo "And it supports 4 but not 8 definitely."
12418                                 else
12419                                         echo "It doesn't support 4..."
12420                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12421                                                 voidflags=11
12422                                                 echo "But it supports 8."
12423                                         else
12424                                                 voidflags=3
12425                                                 echo "Neither does it support 8."
12426                                         fi
12427                                 fi
12428                         else
12429                                 echo "It does not support 2..."
12430                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12431                                         voidflags=13
12432                                         echo "But it supports 4 and 8."
12433                                 else
12434                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12435                                                 voidflags=5
12436                                                 echo "And it supports 4 but has not heard about 8."
12437                                         else
12438                                                 echo "However it supports 8 but not 4."
12439                                         fi
12440                                 fi
12441                         fi
12442                 else
12443                         echo "There is no support at all for void."
12444                         voidflags=0
12445                 fi
12446         fi
12447 esac
12448 case "$voidflags" in
12449 "$defvoidused") ;;
12450 *)      $cat >&4 <<'EOM'
12451   Support flag bits are:
12452     1: basic void declarations.
12453     2: arrays of pointers to functions returning void.
12454     4: operations between pointers to and addresses of void functions.
12455     8: generic void pointers.
12456 EOM
12457         dflt="$voidflags";
12458         rp="Your void support flags add up to what?"
12459         . ./myread
12460         voidflags="$ans"
12461         ;;
12462 esac
12463 $rm -f try.* .out
12464
12465
12466 : How can we generate normalized random numbers ?
12467 echo " "
12468 echo "Looking for a random number function..." >&4
12469 case "$randfunc" in
12470 '')
12471         if set drand48 val -f; eval $csym; $val; then
12472                 dflt="drand48"
12473                 echo "Good, found drand48()." >&4
12474         elif set random val -f; eval $csym; $val; then
12475                 dflt="random"
12476                 echo "OK, found random()." >&4
12477         else
12478                 dflt="rand"
12479                 echo "Yick, looks like I have to use rand()." >&4
12480         fi
12481         echo " "
12482         ;;
12483 *)
12484         dflt="$randfunc"
12485         ;;
12486 esac
12487 cont=true
12488
12489 case "$ccflags" in
12490 *-Dmy_rand=*|*-Dmy_srand=*)
12491         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12492         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12493         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12494         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12495         ;;
12496 esac
12497
12498 while $test "$cont"; do
12499         rp="Use which function to generate random numbers?"
12500         . ./myread
12501         if $test "$ans" = "$dflt"; then
12502                 : null
12503         else
12504                 randbits=''
12505         fi
12506         randfunc="$ans"
12507         if set $ans val -f; eval $csym; $val; then
12508                 cont=''
12509         else
12510                 dflt=y
12511                 rp="I cannot find function $ans. Use that name anyway?"
12512                 . ./myread
12513                 dflt=rand
12514                 case "$ans" in
12515                         [yY]*) cont='';;
12516                 esac
12517         fi
12518         case "$cont" in
12519         '')
12520                 case "$randfunc" in
12521                 drand48)
12522                         drand01="drand48()"
12523                         seedfunc="srand48"
12524                         randbits=48
12525                         randseedtype=long
12526                         ;;
12527                 rand|random)
12528                         case "$randbits" in
12529                         '')
12530 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12531                                 $cat >try.c <<EOCP
12532 #$i_unistd I_UNISTD
12533 #$i_stdlib I_STDLIB
12534 #include <stdio.h>
12535 #ifdef I_UNISTD
12536 #  include <unistd.h>
12537 #endif
12538 #ifdef I_STDLIB
12539 #  include <stdlib.h>
12540 #endif
12541 int main()
12542 {
12543         register int i;
12544         register unsigned long tmp;
12545         register unsigned long max = 0L;
12546
12547         for (i = 1000; i; i--) {
12548                 tmp = (unsigned long) $randfunc();
12549                 if (tmp > max) max = tmp;
12550         }
12551         for (i = 0; max; i++)
12552                 max /= 2;
12553         printf("%d\n",i);
12554 }
12555 EOCP
12556                                 set try
12557                                 if eval $compile_ok; then
12558                                         dflt=`try`
12559                                 else
12560                                         dflt='?'
12561                                         echo "(I can't seem to compile the test program...)"
12562                                 fi
12563                                 ;;
12564                         *)
12565                                 dflt="$randbits"
12566                                 ;;
12567                         esac
12568                         rp="How many bits does your $randfunc() function produce?"
12569                         . ./myread
12570                         randbits="$ans"
12571                         $rm -f try.c try
12572                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12573                         seedfunc="s$randfunc"
12574                         randseedtype=unsigned
12575                         ;;
12576                 *)
12577                         dflt="31"
12578                         rp="How many bits does your $randfunc() function produce?"
12579                         . ./myread
12580                         randbits="$ans"
12581                         seedfunc="s$randfunc"
12582                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12583                         if set $seedfunc val -f; eval $csym; $val; then
12584                                 echo "(Using $seedfunc() to seed random generator)"
12585                         else
12586                                 echo "(Warning: no $seedfunc() to seed random generator)"
12587                                 seedfunc=rand
12588                         fi
12589                         randseedtype=unsigned
12590                         ;;
12591                 esac
12592                 ;;
12593         esac
12594 done
12595
12596 echo " "
12597 echo "Determining whether or not we are on an EBCDIC system..." >&4
12598 $cat >tebcdic.c <<'EOM'
12599 int main()
12600 {
12601   if ('M'==0xd4) return 0;
12602   return 1;
12603 }
12604 EOM
12605
12606 val=$undef
12607 set tebcdic
12608 if eval $compile_ok; then
12609         if ./tebcdic; then
12610                 echo "You have EBCDIC." >&4
12611                 val="$define"
12612         else
12613                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12614         fi
12615 else
12616         echo "I'm unable to compile the test program." >&4
12617         echo "I'll assume ASCII or some ISO Latin." >&4
12618 fi
12619 $rm -f tebcdic.c tebcdic
12620 set ebcdic
12621 eval $setvar
12622
12623 echo " "
12624 $cat >&4 <<EOM
12625 Checking how to flush all pending stdio output...
12626 EOM
12627 # I only know how to find the first 32 possibly open files on SunOS.
12628 # See also hints/sunos_4_1.sh and util.c  --AD
12629 case "$osname" in
12630 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12631 esac
12632 $cat >>try.c <<EOCP
12633 #include <stdio.h>
12634 #$i_unistd I_UNISTD
12635 #ifdef I_UNISTD
12636 # include <unistd.h>
12637 #endif
12638 #$d_sysconf HAS_SYSCONF
12639 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12640 #ifdef HAS_STDIO_STREAM_ARRAY
12641 # define STDIO_STREAM_ARRAY $stdio_stream_array
12642 #endif
12643 int main() {
12644   FILE* p = fopen("try.out", "w");
12645 #ifdef TRY_FPUTC
12646   fputc('x', p);
12647 #else
12648 # ifdef TRY_FPRINTF
12649   fprintf(p, "x");
12650 # endif
12651 #endif
12652 #ifdef TRY_FFLUSH_NULL
12653   fflush(NULL);
12654 #endif
12655 #ifdef TRY_FFLUSH_ALL
12656   {
12657     long open_max = -1;
12658 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12659     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12660 # else
12661 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12662     open_max = sysconf(_SC_OPEN_MAX);
12663 #  else
12664 #   ifdef FOPEN_MAX
12665     open_max = FOPEN_MAX;
12666 #   else
12667 #    ifdef OPEN_MAX
12668     open_max = OPEN_MAX;
12669 #    else
12670 #     ifdef _NFILE
12671     open_max = _NFILE;
12672 #     endif
12673 #    endif
12674 #   endif
12675 #  endif
12676 # endif 
12677 # ifdef HAS_STDIO_STREAM_ARRAY
12678     if (open_max > 0) {
12679       long i;
12680       for (i = 0; i < open_max; i++)
12681             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12682                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12683                 STDIO_STREAM_ARRAY[i]._flag)
12684                 fflush(&STDIO_STREAM_ARRAY[i]);
12685     }   
12686   }
12687 # endif
12688 #endif
12689   _exit(42);
12690 }
12691 EOCP
12692 : first we have to find out how _not_ to flush
12693 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12694     output=''
12695     set try -DTRY_FPUTC
12696     if eval $compile; then
12697             $rm -f try.out
12698             ./try$exe_ext 2>/dev/null
12699             if $test ! -s try.out -a "X$?" = X42; then
12700                 output=-DTRY_FPUTC
12701             fi
12702     fi
12703     case "$output" in
12704     '')
12705             set try -DTRY_FPRINTF
12706             $rm -f try.out
12707             if eval $compile; then
12708                     $rm -f try.out
12709                     ./try$exe_ext 2>/dev/null
12710                     if $test ! -s try.out -a "X$?" = X42; then
12711                         output=-DTRY_FPRINTF
12712                     fi
12713             fi
12714         ;;
12715     esac
12716 fi
12717 : check for fflush NULL behaviour
12718 case "$fflushNULL" in
12719 '')     set try -DTRY_FFLUSH_NULL $output
12720         if eval $compile; then
12721                 $rm -f try.out
12722                 ./try$exe_ext 2>/dev/null
12723                 code="$?"
12724                 if $test -s try.out -a "X$code" = X42; then
12725                         fflushNULL="`$cat try.out`"
12726                 else
12727                         if $test "X$code" != X42; then
12728                                 $cat >&4 <<EOM
12729 (If this test failed, don't worry, we'll try another method shortly.)
12730 EOM
12731                         fi
12732                 fi
12733         fi
12734         $rm -f core try.core core.try.*
12735         case "$fflushNULL" in
12736         x)      $cat >&4 <<EOM
12737 Your fflush(NULL) works okay for output streams.
12738 Let's see if it clobbers input pipes...
12739 EOM
12740 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12741 # bug that improperly flushes the input end of pipes.  So we avoid the
12742 # autoflush on fork/system/exec support for now. :-(
12743 $cat >tryp.c <<EOCP
12744 #include <stdio.h>
12745 int
12746 main(int argc, char **argv)
12747 {
12748     char buf[1024];
12749     int i;
12750     char *bp = buf;
12751     while (1) {
12752         while ((i = getc(stdin)) != -1
12753                && (*bp++ = i) != '\n'
12754                && bp < &buf[1024])
12755         /* DO NOTHING */ ;
12756         *bp = '\0';
12757         fprintf(stdout, "%s", buf);
12758         fflush(NULL);
12759         if (i == -1)
12760             return 0;
12761         bp = buf;
12762     }
12763 }
12764 EOCP
12765                 fflushNULL="$define"
12766                 set tryp
12767                 if eval $compile; then
12768                     $rm -f tryp.out
12769                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12770                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12771                        $cat >&4 <<EOM
12772 fflush(NULL) seems to behave okay with input streams.
12773 EOM
12774                         fflushNULL="$define"
12775                     else
12776                         $cat >&4 <<EOM
12777 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12778 EOM
12779                         fflushNULL="$undef"
12780                     fi
12781                 fi
12782                 $rm -f core tryp.c tryp.core core.tryp.*
12783                 ;;
12784         '')     $cat >&4 <<EOM
12785 Your fflush(NULL) isn't working (contrary to ANSI C).
12786 EOM
12787                 fflushNULL="$undef"
12788                 ;;
12789         *)      $cat >&4 <<EOM
12790 Cannot figure out whether your fflush(NULL) works or not.
12791 I'm assuming it doesn't (contrary to ANSI C).
12792 EOM
12793                 fflushNULL="$undef"
12794                 ;;
12795         esac
12796         ;;
12797 $define|true|[yY]*)
12798         fflushNULL="$define"
12799         ;;
12800 *)
12801         fflushNULL="$undef"
12802         ;;
12803 esac
12804 : check explicit looping only if NULL did not work, and if the pipe
12805 : bug does not show up on an explicit flush too
12806 case "$fflushNULL" in
12807 "$undef")
12808         $cat >tryp.c <<EOCP
12809 #include <stdio.h>
12810 int
12811 main(int argc, char **argv)
12812 {
12813     char buf[1024];
12814     int i;
12815     char *bp = buf;
12816     while (1) {
12817         while ((i = getc(stdin)) != -1
12818                && (*bp++ = i) != '\n'
12819                && bp < &buf[1024])
12820         /* DO NOTHING */ ;
12821         *bp = '\0';
12822         fprintf(stdout, "%s", buf);
12823         fflush(stdin);
12824         if (i == -1)
12825             return 0;
12826         bp = buf;
12827     }
12828 }
12829 EOCP
12830         set tryp
12831         if eval $compile; then
12832             $rm -f tryp.out
12833             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12834             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12835                $cat >&4 <<EOM
12836 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12837 EOM
12838                 : now check for fflushall behaviour
12839                 case "$fflushall" in
12840                 '')     set try -DTRY_FFLUSH_ALL $output
12841                         if eval $compile; then
12842                                 $cat >&4 <<EOM
12843 (Now testing the other method--but note that this also may fail.)
12844 EOM
12845                                 $rm -f try.out
12846                                 ./try$exe_ext 2>/dev/null
12847                                 if $test -s try.out -a "X$?" = X42; then
12848                                         fflushall="`$cat try.out`"
12849                                 fi
12850                         fi
12851                         $rm -f core try.core core.try.*
12852                         case "$fflushall" in
12853                         x)      $cat >&4 <<EOM
12854 Whew. Flushing explicitly all the stdio streams works.
12855 EOM
12856                                 fflushall="$define"
12857                                 ;;
12858                         '')     $cat >&4 <<EOM
12859 Sigh. Flushing explicitly all the stdio streams doesn't work.
12860 EOM
12861                                 fflushall="$undef"
12862                                 ;;
12863                         *)      $cat >&4 <<EOM
12864 Cannot figure out whether flushing stdio streams explicitly works or not.
12865 I'm assuming it doesn't.
12866 EOM
12867                                 fflushall="$undef"
12868                                 ;;
12869                         esac
12870                         ;;
12871                 "$define"|true|[yY]*)
12872                         fflushall="$define"
12873                         ;;
12874                 *)
12875                         fflushall="$undef"
12876                         ;;
12877                 esac
12878             else
12879                 $cat >&4 <<EOM
12880 All is futile.  Even fflush(stdin) clobbers input pipes!
12881 EOM
12882                 fflushall="$undef"
12883             fi
12884         else
12885             fflushall="$undef"
12886         fi
12887         $rm -f core tryp.c tryp.core core.tryp.*
12888         ;;
12889 *)      fflushall="$undef"
12890         ;;
12891 esac
12892
12893 case "$fflushNULL$fflushall" in
12894 undefundef)
12895         $cat <<EOM
12896 OK, I give up.  I cannot figure out how to flush pending stdio output.
12897 We won't be flushing handles at all before fork/exec/popen.
12898 EOM
12899         ;;
12900 esac
12901 $rm -f try.* try$exe_ext
12902
12903 : Store the full pathname to the ar program for use in the C program
12904 : Respect a hint or command line value for full_ar.
12905 case "$full_ar" in
12906 '') full_ar=$ar ;;
12907 esac
12908
12909 : Store the full pathname to the sed program for use in the C program
12910 full_sed=$sed
12911
12912 : see what type gids are declared as in the kernel
12913 echo " "
12914 echo "Looking for the type for group ids returned by getgid()."
12915 set gid_t gidtype xxx stdio.h sys/types.h
12916 eval $typedef
12917 case "$gidtype" in
12918 xxx)
12919         xxx=`./findhdr sys/user.h`
12920         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12921         case $1 in
12922         unsigned) dflt="$1 $2" ;;
12923         *) dflt="$1" ;;
12924         esac
12925         ;;
12926 *) dflt="$gidtype";;
12927 esac
12928 case "$gidtype" in
12929 gid_t) echo "gid_t found." ;;
12930 *)      rp="What is the type for group ids returned by getgid()?"
12931         . ./myread
12932         gidtype="$ans"
12933         ;;
12934 esac
12935
12936 echo " "
12937 case "$gidtype" in
12938 *_t) zzz="$gidtype"     ;;
12939 *)   zzz="gid"          ;;
12940 esac
12941 echo "Checking the size of $zzz..." >&4 
12942 cat > try.c <<EOCP
12943 #include <sys/types.h>
12944 #include <stdio.h>
12945 int main() {
12946     printf("%d\n", (int)sizeof($gidtype));
12947     exit(0);
12948 }
12949 EOCP
12950 set try
12951 if eval $compile_ok; then
12952         yyy=`./try`
12953         case "$yyy" in
12954         '')     gidsize=4
12955                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12956                 ;;
12957         *)      gidsize=$yyy
12958                 echo "Your $zzz is $gidsize bytes long."
12959                 ;;
12960         esac
12961 else
12962         gidsize=4
12963         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12964 fi
12965
12966
12967 echo " "
12968 case "$gidtype" in
12969 *_t) zzz="$gidtype"     ;;
12970 *)   zzz="gid"          ;;
12971 esac
12972 echo "Checking the sign of $zzz..." >&4 
12973 cat > try.c <<EOCP
12974 #include <sys/types.h>
12975 #include <stdio.h>
12976 int main() {
12977         $gidtype foo = -1;
12978         if (foo < 0)
12979                 printf("-1\n");
12980         else
12981                 printf("1\n");
12982 }
12983 EOCP
12984 set try
12985 if eval $compile; then
12986         yyy=`./try`
12987         case "$yyy" in
12988         '')     gidsign=1
12989                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12990                 ;;
12991         *)      gidsign=$yyy
12992                 case "$gidsign" in
12993                  1) echo "Your $zzz is unsigned." ;;
12994                 -1) echo "Your $zzz is signed."   ;;
12995                 esac
12996                 ;;
12997         esac
12998 else
12999         gidsign=1
13000         echo "(I can't compile the test program--guessing unsigned.)" >&4
13001 fi
13002
13003
13004 echo " "
13005
13006 if $test X"$quadtype" != X; then
13007
13008 echo "Checking how to print 64-bit integers..." >&4
13009
13010 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13011         $cat >try.c <<'EOCP'
13012 #include <sys/types.h>
13013 #include <stdio.h>
13014 int main() {
13015   int q = 12345678901;
13016   printf("%ld\n", q);
13017 }
13018 EOCP
13019         set try
13020         if eval $compile; then
13021                 yyy=`./try$exe_ext`
13022                 case "$yyy" in
13023                 12345678901)
13024                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13025                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
13026                         echo "We will use %d."
13027                         ;;
13028                 esac
13029         fi
13030 fi
13031
13032 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13033         $cat >try.c <<'EOCP'
13034 #include <sys/types.h>
13035 #include <stdio.h>
13036 int main() {
13037   long q = 12345678901;
13038   printf("%ld\n", q);
13039 }
13040 EOCP
13041         set try
13042         if eval $compile; then
13043                 yyy=`./try$exe_ext`
13044                 case "$yyy" in
13045                 12345678901)
13046                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13047                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
13048                         echo "We will use %ld."
13049                         ;;
13050                 esac
13051         fi
13052 fi
13053
13054 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13055         $cat >try.c <<'EOCP'
13056 #include <sys/types.h>
13057 #include <inttypes.h>
13058 #include <stdio.h>
13059 int main() {
13060   int64_t q = 12345678901;
13061   printf("%" PRId64 "\n", q);
13062 }
13063 EOCP
13064         set try
13065         if eval $compile; then
13066                 yyy=`./try$exe_ext`
13067                 case "$yyy" in
13068                 12345678901)
13069                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13070                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
13071                         echo "We will use the C9X style."
13072                         ;;
13073                 esac
13074         fi
13075 fi
13076
13077 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13078         $cat >try.c <<'EOCP'
13079 #include <sys/types.h>
13080 #include <stdio.h>
13081 int main() {
13082   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
13083   printf("%lld\n", q);
13084 }
13085 EOCP
13086         set try
13087         if eval $compile; then
13088                 yyy=`./try$exe_ext`
13089                 case "$yyy" in
13090                 12345678901)
13091                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13092                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
13093                         echo "We will use the %lld style."
13094                         ;;
13095                 esac
13096         fi
13097 fi
13098
13099 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13100         $cat >try.c <<EOCP
13101 #include <sys/types.h>
13102 #include <stdio.h>
13103 int main() {
13104   $quadtype q = 12345678901;
13105   printf("%Ld\n", q);
13106 }
13107 EOCP
13108         set try
13109         if eval $compile; then
13110                 yyy=`./try$exe_ext`
13111                 case "$yyy" in
13112                 12345678901)
13113                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13114                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
13115                         echo "We will use %Ld."
13116                         ;;
13117                 esac
13118         fi
13119 fi
13120
13121 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13122         $cat >try.c <<EOCP
13123 #include <sys/types.h>
13124 #include <stdio.h>
13125 int main() {
13126   $quadtype q = 12345678901;
13127   printf("%qd\n", q);
13128 }
13129 EOCP
13130         set try
13131         if eval $compile; then
13132                 yyy=`./try$exe_ext`
13133                 case "$yyy" in
13134                 12345678901)
13135                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13136                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
13137                         echo "We will use %qd."
13138                         ;;
13139                 esac
13140         fi
13141 fi
13142
13143 if $test X"$sPRId64" = X; then
13144         echo "Cannot figure out how to print 64-bit integers." >&4
13145 fi
13146
13147 $rm -f try try.*
13148
13149 fi
13150
13151 case "$sPRId64" in
13152 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13153         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
13154         ;;
13155 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13156         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
13157         ;;
13158 esac
13159
13160
13161 echo " "
13162 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13163
13164 if $test X"$ivsize" = X8; then
13165         ivdformat="$sPRId64"
13166         uvuformat="$sPRIu64"
13167         uvoformat="$sPRIo64"
13168         uvxformat="$sPRIx64"
13169 else
13170         if $test X"$ivsize" = X"$longsize"; then
13171                 ivdformat='"ld"'
13172                 uvuformat='"lu"'
13173                 uvoformat='"lo"'
13174                 uvxformat='"lx"'
13175         else
13176                 if $test X"$ivsize" = X"$intsize"; then
13177                         ivdformat='"d"'
13178                         uvuformat='"u"'
13179                         uvoformat='"o"'
13180                         uvxformat='"x"'
13181                 else
13182                         : far out
13183                         if $test X"$ivsize" = X"$shortsize"; then
13184                                 ivdformat='"hd"'
13185                                 uvuformat='"hu"'
13186                                 uvoformat='"ho"'
13187                                 uvxformat='"hx"'
13188                         fi
13189                 fi
13190         fi
13191 fi
13192
13193 case "$ivdformat" in
13194 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13195     exit 1
13196     ;;
13197 esac
13198
13199
13200 echo " "
13201 $echo "Checking the format string to be used for gids..." >&4
13202
13203 case "$gidsign" in
13204 -1)     if $test X"$gidsize" = X"$ivsize"; then
13205                 gidformat="$ivdformat"
13206         else
13207                 if $test X"$gidsize" = X"$longsize"; then
13208                         gidformat='"ld"'
13209                 else
13210                         if $test X"$gidsize" = X"$intsize"; then
13211                                 gidformat='"d"'
13212                         else
13213                                 if $test X"$gidsize" = X"$shortsize"; then
13214                                         gidformat='"hd"'
13215                                 fi
13216                         fi
13217                 fi
13218         fi
13219         ;;
13220 *)      if $test X"$gidsize" = X"$uvsize"; then
13221                 gidformat="$uvuformat"
13222         else
13223                 if $test X"$gidsize" = X"$longsize"; then
13224                         gidformat='"lu"'
13225                 else
13226                         if $test X"$gidsize" = X"$intsize"; then
13227                                 gidformat='"u"'
13228                         else
13229                                 if $test X"$gidsize" = X"$shortsize"; then
13230                                         gidformat='"hu"'
13231                                 fi
13232                         fi
13233                 fi
13234         fi
13235         ;;
13236 esac
13237
13238 : see if getgroups exists
13239 set getgroups d_getgrps
13240 eval $inlibc
13241
13242 : see if setgroups exists
13243 set setgroups d_setgrps
13244 eval $inlibc
13245
13246
13247 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13248 echo " "
13249 case "$d_getgrps$d_setgrps" in
13250 *define*)
13251         case "$groupstype" in
13252         '') dflt="$gidtype" ;;
13253         *)  dflt="$groupstype" ;;
13254         esac
13255         $cat <<EOM
13256 What type of pointer is the second argument to getgroups() and setgroups()?
13257 Usually this is the same as group ids, $gidtype, but not always.
13258
13259 EOM
13260         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13261         . ./myread
13262         groupstype="$ans"
13263         ;;
13264 *)  groupstype="$gidtype";;
13265 esac
13266
13267 echo " "
13268 echo "Checking if your $make program sets \$(MAKE)..." >&4
13269 case "$make_set_make" in
13270 '')
13271         $sed 's/^X //' > testmake.mak << 'EOF'
13272 Xall:
13273 X       @echo 'maketemp="$(MAKE)"'
13274 EOF
13275         case "`$make -f testmake.mak 2>/dev/null`" in
13276         *maketemp=*) make_set_make='#' ;;
13277         *)      make_set_make="MAKE=$make" ;;
13278         esac
13279         $rm -f testmake.mak
13280         ;;
13281 esac
13282 case "$make_set_make" in
13283 '#') echo "Yup, it does.";;
13284 *) echo "Nope, it doesn't.";;
13285 esac
13286
13287 : see what type is used for mode_t
13288 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13289 set mode_t modetype int stdio.h sys/types.h
13290 eval $typedef_ask
13291
13292 : define a fucntion to check prototypes
13293 $cat > protochk <<EOSH
13294 $startsh
13295 cc="$cc"
13296 optimize="$optimize"
13297 ccflags="$ccflags"
13298 prototype="$prototype"
13299 define="$define"
13300 rm=$rm
13301 EOSH
13302
13303 $cat >> protochk <<'EOSH'
13304
13305 $rm -f try.c
13306 foo="$1"
13307 shift
13308 while test $# -ge 2; do
13309         case "$1" in
13310                 $define) echo "#include <$2>" >> try.c ;;
13311                 literal) echo "$2" >> try.c ;;
13312         esac
13313     shift 2
13314 done
13315 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13316 cat >> try.c <<'EOCP'
13317 #ifdef CAN_PROTOTYPE
13318 #define _(args) args
13319 #else
13320 #define _(args) ()
13321 #endif
13322 EOCP
13323 echo "$foo" >> try.c
13324 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13325 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13326 status=$?
13327 $rm -f try.[co]
13328 exit $status
13329 EOSH
13330 chmod +x protochk
13331 $eunicefix protochk
13332
13333 : see what type is used for size_t
13334 rp="What is the type used for the length parameter for string functions?"
13335 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13336 eval $typedef_ask
13337
13338 : check for type of arguments to gethostbyaddr. 
13339 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13340         case "$d_gethbyaddr" in
13341         $define)
13342                 $cat <<EOM
13343
13344 Checking to see what type of arguments are accepted by gethostbyaddr().
13345 EOM
13346                 hdrs="$define sys/types.h
13347                         $d_socket sys/socket.h 
13348                         $i_niin netinet/in.h 
13349                         $i_netdb netdb.h
13350                         $i_unistd unistd.h"
13351                 : The first arg can 'char *' or 'void *'
13352                 : The second arg is some of integral type
13353                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13354                         for yyy in size_t long int; do
13355                                 case "$netdb_host_type" in
13356                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13357                                         if ./protochk "$try" $hdrs; then
13358                                                 echo "Your system accepts $xxx for the first arg."
13359                                                 echo "...and $yyy for the second arg."
13360                                                 netdb_host_type="$xxx"
13361                                                 netdb_hlen_type="$yyy"
13362                                         fi
13363                                         ;;
13364                                 esac
13365                         done
13366                 done
13367                 : In case none of those worked, prompt the user.
13368                 case "$netdb_host_type" in
13369                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13370                         dflt='char *'
13371                         . ./myread
13372                         netdb_host_type=$ans
13373                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13374                         dflt="$sizetype"
13375                         . ./myread
13376                         netdb_hlen_type=$ans
13377                         ;;
13378                 esac
13379                 ;;
13380         *)      : no gethostbyaddr, so pick harmless defaults
13381                 netdb_host_type='char *'
13382                 netdb_hlen_type="$sizetype"
13383                 ;;
13384         esac
13385         # Remove the "const" if needed. -- but then we'll have a 
13386         # prototype clash!
13387         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13388 fi
13389
13390 : check for type of argument to gethostbyname. 
13391 if test "X$netdb_name_type" = X ; then
13392         case "$d_gethbyname" in
13393         $define)
13394                 $cat <<EOM
13395
13396 Checking to see what type of argument is accepted by gethostbyname().
13397 EOM
13398                 hdrs="$define sys/types.h
13399                         $d_socket sys/socket.h 
13400                         $i_niin netinet/in.h 
13401                         $i_netdb netdb.h
13402                         $i_unistd unistd.h"
13403                 for xxx in "const char *" "char *"; do
13404                         case "$netdb_name_type" in
13405                         '')     try="extern struct hostent *gethostbyname($xxx);"
13406                                 if ./protochk "$try" $hdrs; then
13407                                         echo "Your system accepts $xxx."
13408                                         netdb_name_type="$xxx"
13409                                 fi
13410                                 ;;
13411                         esac
13412                 done
13413                 : In case none of those worked, prompt the user.
13414                 case "$netdb_name_type" in
13415                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13416                         dflt='char *'
13417                         . ./myread
13418                         netdb_name_type=$ans
13419                         ;;
13420                 esac
13421                 ;;
13422         *)      : no gethostbyname, so pick harmless default
13423                 netdb_name_type='char *'
13424                 ;;
13425         esac
13426 fi
13427
13428 : check for type of 1st argument to getnetbyaddr. 
13429 if test "X$netdb_net_type" = X ; then
13430         case "$d_getnbyaddr" in
13431         $define)
13432                 $cat <<EOM
13433
13434 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13435 EOM
13436                 hdrs="$define sys/types.h
13437                         $d_socket sys/socket.h 
13438                         $i_niin netinet/in.h 
13439                         $i_netdb netdb.h
13440                         $i_unistd unistd.h"
13441                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13442                         case "$netdb_net_type" in
13443                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13444                                 if ./protochk "$try" $hdrs; then
13445                                         echo "Your system accepts $xxx."
13446                                         netdb_net_type="$xxx"
13447                                 fi
13448                                 ;;
13449                         esac
13450                 done
13451                 : In case none of those worked, prompt the user.
13452                 case "$netdb_net_type" in
13453                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13454                         dflt='long'
13455                         . ./myread
13456                         netdb_net_type=$ans
13457                         ;;
13458                 esac
13459                 ;;
13460         *)      : no getnetbyaddr, so pick harmless default
13461                 netdb_net_type='long'
13462                 ;;
13463         esac
13464 fi
13465 : locate the preferred pager for this system
13466 case "$pager" in
13467 '')
13468         dflt=''
13469         case "$pg" in
13470         /*) dflt=$pg;;
13471         esac
13472         case "$more" in
13473         /*) dflt=$more;;
13474         esac
13475         case "$less" in
13476         /*) dflt=$less;;
13477         esac
13478         case "$dflt" in
13479         '') dflt=/usr/ucb/more;;
13480         esac
13481         ;;
13482 *) dflt="$pager";;
13483 esac
13484 echo " "
13485 fn=f/
13486 rp='What pager is used on your system?'
13487 . ./getfile
13488 pager="$ans"
13489
13490 : see what type pids are declared as in the kernel
13491 rp="What is the type of process ids on this system?"
13492 set pid_t pidtype int stdio.h sys/types.h
13493 eval $typedef_ask
13494
13495 : Find earliest binary compatible site_perl subdirectory perl can use.
13496 case "$bincompat5005" in
13497 "$define") xs_apiversion='5.005' ;;
13498 *) xs_apiversion=$version ;;   # The current site_perl version.
13499 esac
13500 : Find earliest pure perl site_perl subdirectory perl can use.
13501 : The versioned directories started at 5.005.
13502 pm_apiversion='5.005'
13503
13504 : check for length of pointer
13505 echo " "
13506 case "$ptrsize" in
13507 '')
13508         echo "Checking to see how big your pointers are..." >&4
13509         if test "$voidflags" -gt 7; then
13510                 echo '#define VOID_PTR char *' > try.c
13511         else
13512                 echo '#define VOID_PTR void *' > try.c
13513         fi
13514         $cat >>try.c <<'EOCP'
13515 #include <stdio.h>
13516 int main()
13517 {
13518     printf("%d\n", (int)sizeof(VOID_PTR));
13519     exit(0);
13520 }
13521 EOCP
13522         set try
13523         if eval $compile_ok; then
13524                 ptrsize=`./try`
13525                 echo "Your pointers are $ptrsize bytes long."
13526         else
13527                 dflt='4'
13528                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13529                 rp="What is the size of a pointer (in bytes)?"
13530                 . ./myread
13531                 ptrsize="$ans"
13532         fi
13533         ;;
13534 esac
13535 $rm -f try.c try
13536
13537 : see if ar generates random libraries by itself
13538 echo " "
13539 echo "Checking how to generate random libraries on your machine..." >&4
13540 echo 'int bar1() { return bar2(); }' > bar1.c
13541 echo 'int bar2() { return 2; }' > bar2.c
13542 $cat > foo.c <<'EOP'
13543 int main() { printf("%d\n", bar1()); exit(0); }
13544 EOP
13545 $cc $ccflags -c bar1.c >/dev/null 2>&1
13546 $cc $ccflags -c bar2.c >/dev/null 2>&1
13547 $cc $ccflags -c foo.c >/dev/null 2>&1
13548 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13549 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13550         ./foobar >/dev/null 2>&1; then
13551         echo "$ar appears to generate random libraries itself."
13552         orderlib=false
13553         ranlib=":"
13554 elif $ar ts bar$_a >/dev/null 2>&1 &&
13555         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13556         ./foobar >/dev/null 2>&1; then
13557                 echo "a table of contents needs to be added with '$ar ts'."
13558                 orderlib=false
13559                 ranlib="$ar ts"
13560 else
13561         case "$ranlib" in
13562         :) ranlib='';;
13563         '')
13564                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13565                 $test -f $ranlib || ranlib=''
13566                 ;;
13567         esac
13568         if $test -n "$ranlib"; then
13569                 echo "your system has '$ranlib'; we'll use that."
13570                 orderlib=false
13571         else
13572                 echo "your system doesn't seem to support random libraries"
13573                 echo "so we'll use lorder and tsort to order the libraries."
13574                 orderlib=true
13575                 ranlib=":"
13576         fi
13577 fi
13578 $rm -f foo* bar* 
13579
13580 : check for type of arguments to select. 
13581 case "$selecttype" in
13582 '') case "$d_select" in
13583         $define)
13584                 echo " "
13585                 $cat <<EOM
13586 Checking to see what type of arguments are accepted by select().
13587 EOM
13588                 hdrs="$define sys/types.h
13589                         $i_systime sys/time.h 
13590                         $i_sysselct sys/select.h
13591                         $d_socket sys/socket.h"
13592                 : The first arg can be int, unsigned, or size_t
13593                 : The last arg may or may not be 'const'
13594                 val=''
13595                 : void pointer has been seen but using that
13596                 : breaks the selectminbits test
13597                 for xxx in 'fd_set *' 'int *'; do
13598                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13599                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13600                                         case "$val" in
13601                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13602                                                 if ./protochk "$try" $hdrs; then
13603                                                         echo "Your system accepts $xxx."
13604                                                         val="$xxx"
13605                                                 fi
13606                                                 ;;
13607                                         esac
13608                                 done
13609                         done
13610                 done
13611                 case "$val" in
13612                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13613                         case "$d_fd_set" in
13614                                 $define) dflt="fd_set *" ;;
13615                                 *)              dflt="int *" ;;
13616                         esac
13617                         . ./myread
13618                         val=$ans
13619                         ;;
13620                 esac
13621                 selecttype="$val"
13622                 ;;
13623         *)      : no select, so pick a harmless default
13624                 selecttype='int *'
13625                 ;;
13626         esac
13627         ;;
13628 esac
13629
13630 : check for the select 'width'
13631 case "$selectminbits" in
13632 '') case "$d_select" in
13633         $define)
13634                 $cat <<EOM
13635
13636 Checking to see on how many bits at a time your select() operates...
13637 EOM
13638                 $cat >try.c <<EOCP
13639 #include <sys/types.h>
13640 #$i_time I_TIME
13641 #$i_systime I_SYS_TIME
13642 #$i_systimek I_SYS_TIME_KERNEL
13643 #ifdef I_TIME
13644 #   include <time.h>
13645 #endif
13646 #ifdef I_SYS_TIME
13647 #   ifdef I_SYS_TIME_KERNEL
13648 #       define KERNEL
13649 #   endif
13650 #   include <sys/time.h>
13651 #   ifdef I_SYS_TIME_KERNEL
13652 #       undef KERNEL
13653 #   endif
13654 #endif
13655 #$i_sysselct I_SYS_SELECT
13656 #ifdef I_SYS_SELECT
13657 #include <sys/select.h>
13658 #endif
13659 #$d_socket HAS_SOCKET
13660 #ifdef HAS_SOCKET
13661 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13662 #endif
13663 #include <stdio.h>
13664 $selecttype b;
13665 #define S sizeof(*(b))
13666 #define MINBITS 64
13667 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13668 #define NBITS  (NBYTES * 8)
13669 int main() {
13670     char s[NBYTES];
13671     struct timeval t;
13672     int i;
13673     FILE* fp;
13674     int fd;
13675
13676     fclose(stdin);
13677     fp = fopen("try.c", "r");
13678     if (fp == 0)
13679       exit(1);
13680     fd = fileno(fp);
13681     if (fd < 0)
13682       exit(2);
13683     b = ($selecttype)s;
13684     for (i = 0; i < NBITS; i++)
13685         FD_SET(i, b);
13686     t.tv_sec  = 0;
13687     t.tv_usec = 0;
13688     select(fd + 1, b, 0, 0, &t);
13689     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13690     printf("%d\n", i + 1);
13691     return 0;
13692 }
13693 EOCP
13694                 set try
13695                 if eval $compile_ok; then
13696                         selectminbits=`./try`
13697                         case "$selectminbits" in
13698                         '')     cat >&4 <<EOM
13699 Cannot figure out on how many bits at a time your select() operates.
13700 I'll play safe and guess it is 32 bits.
13701 EOM
13702                                 selectminbits=32
13703                                 bits="32 bits"
13704                                 ;;
13705                         1)      bits="1 bit" ;;
13706                         *)      bits="$selectminbits bits" ;;
13707                         esac
13708                         echo "Your select() operates on $bits at a time." >&4
13709                 else
13710                         rp='What is the minimum number of bits your select() operates on?'
13711                         case "$byteorder" in
13712                         1234|12345678)  dflt=32 ;;
13713                         *)              dflt=1  ;;
13714                         esac
13715                         . ./myread
13716                         val=$ans
13717                         selectminbits="$val"
13718                 fi
13719                 $rm -f try.* try
13720                 ;;
13721         *)      : no select, so pick a harmless default
13722                 selectminbits='32'
13723                 ;;
13724         esac
13725         ;;
13726 esac
13727
13728 : Trace out the files included by signal.h, then look for SIGxxx names.
13729 : Remove SIGARRAYSIZE used by HPUX.
13730 : Remove SIGSTKSIZE used by Linux.
13731 : Remove SIGSTKSZ used by Posix.
13732 : Remove SIGTYP void lines used by OS2.
13733 : Some cpps, like os390, dont give the file name anywhere
13734 if [ "X$fieldn" = X ]; then
13735         : Just make some guesses.  We check them later.
13736         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13737 else
13738         xxx=`echo '#include <signal.h>' |
13739         $cppstdin $cppminus $cppflags 2>/dev/null |
13740         $grep '^[       ]*#.*include' | 
13741         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13742 fi
13743 : Check this list of files to be sure we have parsed the cpp output ok.
13744 : This will also avoid potentially non-existent files, such 
13745 : as ../foo/bar.h
13746 xxxfiles=''
13747 for xx in $xxx /dev/null ; do
13748         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13749 done
13750 : If we have found no files, at least try signal.h
13751 case "$xxxfiles" in
13752 '')     xxxfiles=`./findhdr signal.h` ;;
13753 esac
13754 xxx=`awk '
13755 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13756         print substr($2, 4, 20)
13757 }
13758 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13759         print substr($3, 4, 20)
13760 }' $xxxfiles`
13761 : Append some common names just in case the awk scan failed.
13762 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13763 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13764 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13765 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13766 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13767
13768 : generate a few handy files for later
13769 $cat > signal.c <<'EOCP'
13770 #include <sys/types.h>
13771 #include <signal.h>
13772 #include <stdio.h>
13773 int main() {
13774
13775 /* Strange style to avoid deeply-nested #if/#else/#endif */
13776 #ifndef NSIG
13777 #  ifdef _NSIG
13778 #    define NSIG (_NSIG)
13779 #  endif
13780 #endif
13781
13782 #ifndef NSIG
13783 #  ifdef SIGMAX
13784 #    define NSIG (SIGMAX+1)
13785 #  endif
13786 #endif
13787
13788 #ifndef NSIG
13789 #  ifdef SIG_MAX
13790 #    define NSIG (SIG_MAX+1)
13791 #  endif
13792 #endif
13793
13794 #ifndef NSIG
13795 #  ifdef MAXSIG
13796 #    define NSIG (MAXSIG+1)
13797 #  endif
13798 #endif
13799
13800 #ifndef NSIG
13801 #  ifdef MAX_SIG
13802 #    define NSIG (MAX_SIG+1)
13803 #  endif
13804 #endif
13805
13806 #ifndef NSIG
13807 #  ifdef SIGARRAYSIZE
13808 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13809 #  endif
13810 #endif
13811
13812 #ifndef NSIG
13813 #  ifdef _sys_nsig
13814 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13815 #  endif
13816 #endif
13817
13818 /* Default to some arbitrary number that's big enough to get most
13819    of the common signals.
13820 */
13821 #ifndef NSIG
13822 #    define NSIG 50
13823 #endif
13824
13825 printf("NSIG %d\n", NSIG);
13826
13827 #ifndef JUST_NSIG
13828
13829 EOCP
13830
13831 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13832 {
13833         printf "#ifdef SIG"; printf $1; printf "\n"
13834         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13835         printf $1; printf ");\n"
13836         printf "#endif\n"
13837 }
13838 END {
13839         printf "#endif /* JUST_NSIG */\n";
13840         printf "exit(0);\n}\n";
13841 }
13842 ' >>signal.c
13843 $cat >signal.awk <<'EOP'
13844 BEGIN { ndups = 0 }
13845 $1 ~ /^NSIG$/ { nsig = $2 }
13846 ($1 !~ /^NSIG$/) && (NF == 2) {
13847     if ($2 > maxsig) { maxsig = $2 }
13848     if (sig_name[$2]) {
13849         dup_name[ndups] = $1
13850         dup_num[ndups] = $2
13851         ndups++ 
13852     }
13853     else {
13854         sig_name[$2] = $1
13855         sig_num[$2] = $2
13856     }
13857 }
13858 END { 
13859     if (nsig == 0) {
13860         nsig = maxsig + 1
13861     }
13862     printf("NSIG %d\n", nsig);
13863     for (n = 1; n < nsig; n++) {
13864         if (sig_name[n]) {
13865             printf("%s %d\n", sig_name[n], sig_num[n])
13866         }
13867         else {
13868             printf("NUM%d %d\n", n, n) 
13869         }
13870     }
13871     for (n = 0; n < ndups; n++) {
13872         printf("%s %d\n", dup_name[n], dup_num[n])
13873     }
13874 }
13875 EOP
13876 $cat >signal_cmd <<EOS
13877 $startsh
13878 if $test -s signal.lst; then
13879     echo "Using your existing signal.lst file"
13880         exit 0
13881 fi
13882 xxx="$xxx"
13883 EOS
13884 $cat >>signal_cmd <<'EOS'
13885
13886 set signal
13887 if eval $compile_ok; then
13888         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13889 else
13890         echo "(I can't seem be able to compile the whole test program)" >&4
13891         echo "(I'll try it in little pieces.)" >&4
13892         set signal -DJUST_NSIG
13893         if eval $compile_ok; then
13894                 ./signal$_exe > signal.nsg
13895                 $cat signal.nsg
13896         else
13897                 echo "I can't seem to figure out how many signals you have." >&4
13898                 echo "Guessing 50." >&4
13899                 echo 'NSIG 50' > signal.nsg
13900         fi
13901         : Now look at all the signal names, one at a time.
13902         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13903                 $cat > signal.c <<EOCP
13904 #include <sys/types.h>
13905 #include <signal.h>
13906 #include <stdio.h>
13907 int main() {
13908 printf("$xx %d\n", SIG${xx});
13909 return 0;
13910 }
13911 EOCP
13912                 set signal
13913                 if eval $compile; then
13914                         echo "SIG${xx} found."
13915                         ./signal$_exe  >> signal.ls1
13916                 else
13917                         echo "SIG${xx} NOT found."
13918                 fi
13919         done
13920         if $test -s signal.ls1; then
13921                 $cat signal.nsg signal.ls1 |
13922                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13923         fi
13924
13925 fi
13926 if $test -s signal.lst; then
13927         :
13928 else
13929         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13930         echo 'kill -l' >signal
13931         set X `csh -f <signal`
13932         $rm -f signal
13933         shift
13934         case $# in
13935         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13936         esac
13937         echo $@ | $tr ' ' $trnl | \
13938             $awk '{ printf "%s %d\n", $1, ++s; }
13939                   END { printf "NSIG %d\n", ++s }' >signal.lst
13940 fi
13941 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13942 EOS
13943 chmod a+x signal_cmd
13944 $eunicefix signal_cmd
13945
13946 : generate list of signal names
13947 echo " "
13948 case "$sig_name_init" in
13949 '') doinit=yes ;;
13950 *)  case "$sig_num_init" in
13951     ''|*,*) doinit=yes ;;
13952     esac ;;
13953 esac
13954 case "$doinit" in
13955 yes)
13956         echo "Generating a list of signal names and numbers..." >&4
13957         . ./signal_cmd
13958         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13959         sig_name=`$awk 'BEGIN { printf "ZERO " }
13960                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13961         sig_num=`$awk  'BEGIN { printf "0 " }
13962                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13963         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13964                              !/^NSIG/   { printf "\"%s\", ", $1 }
13965                              END        { printf "0\n" }' signal.lst`
13966         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13967                              !/^NSIG/   { printf "%d, ", $2}
13968                              END        { printf "0\n"}' signal.lst`
13969         ;;
13970 esac
13971 echo "The following $sig_count signals are available:"
13972 echo " "
13973 echo $sig_name | $awk \
13974 'BEGIN { linelen = 0 }
13975 {
13976         for (i = 1; i <= NF; i++) {
13977                 name = "SIG" $i " "
13978                 linelen = linelen + length(name)
13979                 if (linelen > 70) {
13980                         printf "\n"
13981                         linelen = length(name)
13982                 }
13983                 printf "%s", name
13984         }
13985         printf "\n"
13986 }'
13987 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13988
13989 echo " "
13990 case "$sizetype" in
13991 *_t) zzz="$sizetype"    ;;
13992 *)   zzz="filesize"     ;;
13993 esac
13994 echo "Checking the size of $zzz..." >&4 
13995 cat > try.c <<EOCP
13996 #include <sys/types.h>
13997 #include <stdio.h>
13998 int main() {
13999     printf("%d\n", (int)sizeof($sizetype));
14000     exit(0);
14001 }
14002 EOCP
14003 set try
14004 if eval $compile_ok; then
14005         yyy=`./try`
14006         case "$yyy" in
14007         '')     sizesize=4
14008                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14009                 ;;
14010         *)      sizesize=$yyy
14011                 echo "Your $zzz size is $sizesize bytes."
14012                 ;;
14013         esac
14014 else
14015         sizesize=4
14016         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14017 fi
14018
14019
14020 : check for socklen_t
14021 echo " "
14022 echo "Checking to see if you have socklen_t..." >&4
14023 $cat >try.c <<EOCP
14024 #include <sys/types.h>
14025 #$d_socket HAS_SOCKET
14026 #ifdef HAS_SOCKET
14027 #include <sys/socket.h>
14028 #endif
14029 int main() { socklen_t x = 16; }
14030 EOCP
14031 set try
14032 if eval $compile; then
14033         val="$define"
14034         echo "You have socklen_t."
14035 else
14036         val="$undef"
14037         echo "You do not have socklen_t."
14038         case "$sizetype" in
14039         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14040         esac
14041 fi
14042 $rm -f try try.*
14043 set d_socklen_t
14044 eval $setvar
14045
14046 : check for type of the size argument to socket calls
14047 case "$d_socket" in
14048 "$define")
14049         $cat <<EOM
14050
14051 Checking to see what type is the last argument of accept().
14052 EOM
14053         hdrs="$define sys/types.h $d_socket sys/socket.h" 
14054         yyy=''
14055         case "$d_socklen_t" in
14056         "$define") yyy="$yyy socklen_t"
14057         esac
14058         yyy="$yyy $sizetype int long unsigned"
14059         for xxx in $yyy; do
14060                 case "$socksizetype" in
14061                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14062                         if ./protochk "$try" $hdrs; then
14063                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
14064                                 socksizetype="$xxx"
14065                         fi
14066                         ;;
14067                 esac
14068         done
14069 : In case none of those worked, prompt the user.
14070         case "$socksizetype" in
14071         '')     rp='What is the type for socket address structure sizes?'
14072                 dflt='int'
14073                 . ./myread
14074                 socksizetype=$ans
14075                 ;;
14076         esac
14077         ;;
14078 *)      : no sockets, so pick relatively harmless default
14079         socksizetype='int'
14080         ;;
14081 esac
14082
14083 : see what type is used for signed size_t
14084 set ssize_t ssizetype int stdio.h sys/types.h
14085 eval $typedef
14086 dflt="$ssizetype"
14087 $cat > ssize.c <<EOM
14088 #include <stdio.h>
14089 #include <sys/types.h>
14090 #define Size_t $sizetype
14091 #define SSize_t $dflt
14092 int main()
14093 {
14094         if (sizeof(Size_t) == sizeof(SSize_t))
14095                 printf("$dflt\n");
14096         else if (sizeof(Size_t) == sizeof(int))
14097                 printf("int\n");
14098         else 
14099                 printf("long\n");
14100         exit(0);
14101 }
14102 EOM
14103 echo " "
14104 set ssize
14105 if eval $compile_ok && ./ssize > /dev/null; then
14106         ssizetype=`./ssize`
14107         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14108 else
14109         $cat >&4 <<EOM
14110 Help! I can't compile and run the ssize_t test program: please enlighten me!
14111 (This is probably a misconfiguration in your system or libraries, and
14112 you really ought to fix it.  Still, I'll try anyway.)
14113
14114 I need a type that is the same size as $sizetype, but is guaranteed to
14115 be signed.  Common values are ssize_t, int and long.
14116
14117 EOM
14118         rp="What signed type is the same size as $sizetype?"
14119         . ./myread
14120         ssizetype="$ans"
14121 fi
14122 $rm -f ssize ssize.*
14123
14124 : see what type of char stdio uses.
14125 echo " "
14126 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14127         echo "Your stdio uses unsigned chars." >&4
14128         stdchar="unsigned char"
14129 else
14130         echo "Your stdio uses signed chars." >&4
14131         stdchar="char"
14132 fi
14133
14134 : see if time exists
14135 echo " "
14136 if test "X$d_time" = X -o X"$timetype" = X; then
14137     if set time val -f d_time; eval $csym; $val; then
14138                 echo 'time() found.' >&4
14139                 val="$define"
14140                 rp="What is the type returned by time() on this system?"
14141                 set time_t timetype long stdio.h sys/types.h
14142                 eval $typedef_ask
14143     else
14144                 echo 'time() not found, hope that will do.' >&4
14145                 val="$undef"
14146                 timetype='int';
14147     fi
14148     set d_time
14149     eval $setvar
14150 fi
14151
14152 : see what type uids are declared as in the kernel
14153 echo " "
14154 echo "Looking for the type for user ids returned by getuid()."
14155 set uid_t uidtype xxx stdio.h sys/types.h
14156 eval $typedef
14157 case "$uidtype" in
14158 xxx)
14159         xxx=`./findhdr sys/user.h`
14160         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14161         case $1 in
14162         unsigned) dflt="$1 $2" ;;
14163         *) dflt="$1" ;;
14164         esac
14165         ;;
14166 *) dflt="$uidtype";;
14167 esac
14168 case "$uidtype" in
14169 uid_t)  echo "uid_t found." ;;
14170 *)      rp="What is the type for user ids returned by getuid()?"
14171         . ./myread
14172         uidtype="$ans"
14173         ;;
14174 esac
14175
14176 echo " "
14177 case "$uidtype" in
14178 *_t) zzz="$uidtype"     ;;
14179 *)   zzz="uid"          ;;
14180 esac
14181 echo "Checking the size of $zzz..." >&4 
14182 cat > try.c <<EOCP
14183 #include <sys/types.h>
14184 #include <stdio.h>
14185 int main() {
14186     printf("%d\n", (int)sizeof($uidtype));
14187     exit(0);
14188 }
14189 EOCP
14190 set try
14191 if eval $compile_ok; then
14192         yyy=`./try`
14193         case "$yyy" in
14194         '')     uidsize=4
14195                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14196                 ;;
14197         *)      uidsize=$yyy
14198                 echo "Your $zzz is $uidsize bytes long."
14199                 ;;
14200         esac
14201 else
14202         uidsize=4
14203         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14204 fi
14205
14206 echo " "
14207 case "$uidtype" in
14208 *_t) zzz="$uidtype"     ;;
14209 *)   zzz="uid"          ;;
14210 esac
14211 echo "Checking the sign of $zzz..." >&4
14212 cat > try.c <<EOCP
14213 #include <sys/types.h>
14214 #include <stdio.h>
14215 int main() {
14216         $uidtype foo = -1;
14217         if (foo < 0)
14218                 printf("-1\n");
14219         else
14220                 printf("1\n");
14221 }
14222 EOCP
14223 set try
14224 if eval $compile; then
14225         yyy=`./try`
14226         case "$yyy" in
14227         '')     uidsign=1
14228                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14229                 ;;
14230         *)      uidsign=$yyy
14231                 case "$uidsign" in
14232                  1) echo "Your $zzz is unsigned." ;;
14233                 -1) echo "Your $zzz is signed."   ;;
14234                 esac
14235                 ;;
14236         esac
14237 else
14238         uidsign=1
14239         echo "(I can't compile the test program--guessing unsigned.)" >&4
14240 fi
14241
14242
14243
14244 echo " "
14245 $echo "Checking the format string to be used for uids..." >&4
14246
14247 case "$uidsign" in
14248 -1)     if $test X"$uidsize" = X"$ivsize"; then
14249                 uidformat="$ivdformat"
14250         else
14251                 if $test X"$uidsize" = X"$longsize"; then
14252                         uidformat='"ld"'
14253                 else
14254                         if $test X"$uidsize" = X"$intsize"; then
14255                                 uidformat='"d"'
14256                         else
14257                                 if $test X"$uidsize" = X"$shortsize"; then
14258                                         uidformat='"hd"'
14259                                 fi
14260                         fi
14261                 fi
14262         fi
14263         ;;
14264 *)      if $test X"$uidsize" = X"$uvsize"; then
14265                 uidformat="$uvuformat"
14266         else
14267                 if $test X"$uidsize" = X"$longsize"; then
14268                         uidformat='"lu"'
14269                 else
14270                         if $test X"$uidsize" = X"$intsize"; then
14271                                 uidformat='"u"'
14272                         else
14273                                 if $test X"$uidsize" = X"$shortsize"; then
14274                                         uidformat='"hu"'
14275                                 fi
14276                         fi
14277                 fi
14278         fi
14279         ;;
14280 esac
14281
14282 : see if dbm.h is available
14283 : see if dbmclose exists
14284 set dbmclose d_dbmclose
14285 eval $inlibc
14286
14287 case "$d_dbmclose" in
14288 $define)
14289         set dbm.h i_dbm
14290         eval $inhdr
14291         case "$i_dbm" in
14292         $define)
14293                 val="$undef"
14294                 set i_rpcsvcdbm
14295                 eval $setvar
14296                 ;;
14297         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14298                 eval $inhdr
14299                 ;;
14300         esac
14301         ;;
14302 *)      echo "We won't be including <dbm.h>"
14303         val="$undef"
14304         set i_dbm
14305         eval $setvar
14306         val="$undef"
14307         set i_rpcsvcdbm
14308         eval $setvar
14309         ;;
14310 esac
14311
14312 : see if this is a sys/file.h system
14313 val=''
14314 set sys/file.h val
14315 eval $inhdr
14316
14317 : do we need to include sys/file.h ?
14318 case "$val" in
14319 "$define")
14320         echo " "
14321         if $h_sysfile; then
14322                 val="$define"
14323                 echo "We'll be including <sys/file.h>." >&4
14324         else
14325                 val="$undef"
14326                 echo "We won't be including <sys/file.h>." >&4
14327         fi
14328         ;;
14329 *)
14330         h_sysfile=false
14331         ;;
14332 esac
14333 set i_sysfile
14334 eval $setvar
14335
14336 : see if fcntl.h is there
14337 val=''
14338 set fcntl.h val
14339 eval $inhdr
14340
14341 : see if we can include fcntl.h
14342 case "$val" in
14343 "$define")
14344         echo " "
14345         if $h_fcntl; then
14346                 val="$define"
14347                 echo "We'll be including <fcntl.h>." >&4
14348         else
14349                 val="$undef"
14350                 if $h_sysfile; then
14351         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14352                 else
14353                         echo "We won't be including <fcntl.h>." >&4
14354                 fi
14355         fi
14356         ;;
14357 *)
14358         h_fcntl=false
14359         val="$undef"
14360         ;;
14361 esac
14362 set i_fcntl
14363 eval $setvar
14364
14365 : see if this is a iconv.h system
14366 set iconv.h i_iconv
14367 eval $inhdr
14368
14369 : see if this is a ieeefp.h system
14370 set ieeefp.h i_ieeefp
14371 eval $inhdr
14372
14373 : see if locale.h is available
14374 set locale.h i_locale
14375 eval $inhdr
14376
14377 : see if mach cthreads are available
14378 if test "X$usethreads" = "X$define"; then
14379         set mach/cthreads.h i_machcthr
14380         eval $inhdr
14381 else
14382         i_machcthr="$undef"
14383 fi
14384
14385
14386
14387 : see if this is a math.h system
14388 set math.h i_math
14389 eval $inhdr
14390
14391 : see if this is a mntent.h system
14392 set mntent.h i_mntent
14393 eval $inhdr
14394
14395 : see if ndbm.h is available
14396 set ndbm.h t_ndbm
14397 eval $inhdr
14398 case "$t_ndbm" in
14399 $define)
14400         : see if dbm_open exists
14401         set dbm_open d_dbm_open
14402         eval $inlibc
14403         case "$d_dbm_open" in
14404         $undef)
14405                 t_ndbm="$undef"
14406                 echo "We won't be including <ndbm.h>"
14407                 ;;
14408         esac
14409         ;;
14410 esac
14411 val="$t_ndbm"
14412 set i_ndbm
14413 eval $setvar
14414
14415 : see if net/errno.h is available
14416 val=''
14417 set net/errno.h val
14418 eval $inhdr
14419
14420 : Unfortunately, it causes problems on some systems.  Arrgh.
14421 case "$val" in
14422 $define)
14423         cat > try.c <<'EOM'
14424 #include <stdio.h>
14425 #include <errno.h>
14426 #include <net/errno.h>
14427 int func()
14428 {
14429         return ENOTSOCK;
14430 }
14431 EOM
14432         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14433                 echo "We'll be including <net/errno.h>." >&4
14434         else
14435                 echo "We won't be including <net/errno.h>." >&4
14436                 val="$undef"
14437         fi
14438         $rm -f try.* try
14439         ;;
14440 esac
14441 set i_neterrno
14442 eval $setvar
14443
14444 : see if netinet/tcp.h is available
14445 set netinet/tcp.h i_netinettcp
14446 eval $inhdr
14447
14448 : see if this is a poll.h system
14449 set poll.h i_poll
14450 eval $inhdr
14451
14452 : see if this is a prot.h system
14453 set prot.h i_prot
14454 eval $inhdr
14455
14456 echo " "
14457 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14458 $cat <<'EOSH' > Cppsym.know
14459 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14460 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14461 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14462 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14463 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14464 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14465 bull c cadmus clipper CMU COFF COMPILER_VERSION
14466 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14467 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14468 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14469 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14470 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14471 H3050R H3050RX hbullx20 hcx host_mips
14472 hp200 hp300 hp700 HP700 hp800 hp9000
14473 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14474 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14475 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14476 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14477 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14478 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14479 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14480 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14481 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14482 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14483 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14484 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14485 MATH_HAS_NO_SIDE_EFFECTS
14486 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14487 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14488 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14489 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14490 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14491 NetBSD news1500 news1700 news1800 news1900 news3700
14492 news700 news800 news900 NeXT NLS ns16000 ns32000
14493 ns32016 ns32332 ns32k nsc32000
14494 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14495 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14496 pc532 pdp11 PGC PIC plexus PORTAR posix
14497 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14498 POSIX_C_SOURCE POSIX_SOURCE POWER
14499 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14500 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14501 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14502 sony sony_news sonyrisc sparc sparclite spectrum
14503 stardent stdc STDC_EXT stratos sun sun3 sun386
14504 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14505 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14506 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14507 sysV68 sysV88 Tek4132 Tek4300 titan
14508 tower tower32 tower32_200 tower32_600 tower32_700
14509 tower32_800 tower32_850 tss
14510 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14511 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14512 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14513 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14514 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14515 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14516 z8000
14517 EOSH
14518 # Maybe put other stuff here too.
14519 cat <<EOSH >>Cppsym.know
14520 $osname
14521 EOSH
14522 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14523 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14524 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14525 $rm -f Cppsym.a Cppsym.b
14526 cat <<EOSH > Cppsym
14527 $startsh
14528 if $test \$# -gt 0; then
14529     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14530     if $test -s Cppsym.got; then
14531         $rm -f Cppsym.got
14532         exit 0
14533     fi
14534     $rm -f Cppsym.got
14535     exit 1
14536 else
14537     $tr " " "$trnl" | ./Cppsym.try
14538     exit 0
14539 fi
14540 EOSH
14541 chmod +x Cppsym
14542 $eunicefix Cppsym
14543 cat <<EOSH > Cppsym.try
14544 $startsh
14545 cat <<'EOCP' > try.c
14546 #include <stdio.h>
14547 int main() {
14548 EOCP
14549 $awk \\
14550 EOSH
14551 cat <<'EOSH' >> Cppsym.try
14552 'length($1) > 0 {
14553     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14554     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14555     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14556     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14557 }'       >> try.c
14558 echo '}' >> try.c
14559 EOSH
14560 cat <<EOSH >> Cppsym.try
14561 ccflags="$ccflags"
14562 case "$osname-$gccversion" in
14563 irix-) ccflags="\$ccflags -woff 1178" ;;
14564 esac
14565 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14566 EOSH
14567 chmod +x Cppsym.try
14568 $eunicefix Cppsym.try
14569 ./Cppsym < Cppsym.know > Cppsym.true
14570 : now check the C compiler for additional symbols
14571 postprocess_cc_v=''
14572 case "$osname" in
14573 aix) postprocess_cc_v="|$tr , ' '" ;;
14574 esac
14575 $cat >ccsym <<EOS
14576 $startsh
14577 $cat >tmp.c <<EOF
14578 extern int foo;
14579 EOF
14580 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14581 do
14582         case "\$i" in
14583         -D*) echo "\$i" | $sed 's/^-D//';;
14584         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14585         esac
14586 done
14587 $rm -f try.c
14588 EOS
14589 postprocess_cc_v=''
14590 chmod +x ccsym
14591 $eunicefix ccsym
14592 ./ccsym > ccsym1.raw
14593 if $test -s ccsym1.raw; then
14594        $sort ccsym1.raw | $uniq >ccsym.raw
14595 else
14596        mv ccsym1.raw ccsym.raw
14597 fi
14598
14599 $awk '/\=/ { print $0; next }
14600         { print $0"=1" }' ccsym.raw >ccsym.list
14601 $awk '/\=/ { print $0; next }
14602         { print $0"=1" }' Cppsym.true >ccsym.true
14603 $comm -13 ccsym.true ccsym.list >ccsym.own
14604 $comm -12 ccsym.true ccsym.list >ccsym.com
14605 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14606 also=''
14607 if $test -z ccsym.raw; then
14608         echo "Your C compiler doesn't seem to define any symbols!" >&4
14609         echo " "
14610         echo "However, your C preprocessor defines the following symbols:"
14611         $cat Cppsym.true
14612         ccsymbols=''
14613         cppsymbols=`$cat Cppsym.true`
14614         cppsymbols=`echo $cppsymbols`
14615         cppccsymbols="$cppsymbols"
14616 else
14617         if $test -s ccsym.com; then
14618                 echo "Your C compiler and pre-processor define these symbols:"
14619                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14620                 also='also '
14621                 symbols='ones'
14622                 cppccsymbols=`$cat ccsym.com`
14623                 cppccsymbols=`echo $cppccsymbols`
14624                 $test "$silent" || sleep 1
14625         fi
14626         if $test -s ccsym.cpp; then
14627                 $test "$also" && echo " "
14628                 echo "Your C pre-processor ${also}defines the following symbols:"
14629                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14630                 also='further '
14631                 cppsymbols=`$cat ccsym.cpp`
14632                 cppsymbols=`echo $cppsymbols`
14633                 $test "$silent" || sleep 1
14634         fi
14635         if $test -s ccsym.own; then
14636                 $test "$also" && echo " "
14637                 echo "Your C compiler ${also}defines the following cpp symbols:"
14638                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14639                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14640                 ccsymbols=`$cat ccsym.own`
14641                 ccsymbols=`echo $ccsymbols`
14642                 $test "$silent" || sleep 1
14643         fi
14644 fi
14645 $rm -f ccsym*
14646
14647 : see if this is a termio system
14648 val="$undef"
14649 val2="$undef"
14650 val3="$undef"
14651 if $test `./findhdr termios.h`; then
14652         set tcsetattr i_termios
14653         eval $inlibc
14654         val3="$i_termios"
14655 fi
14656 echo " "
14657 case "$val3" in
14658 "$define") echo "You have POSIX termios.h... good!" >&4;;
14659 *) if ./Cppsym pyr; then
14660                 case "`/bin/universe`" in
14661                 ucb) if $test `./findhdr sgtty.h`; then
14662                                 val2="$define"
14663                                 echo "<sgtty.h> found." >&4
14664                         else
14665                                 echo "System is pyramid with BSD universe."
14666                                 echo "<sgtty.h> not found--you could have problems." >&4
14667                         fi;;
14668                 *) if $test `./findhdr termio.h`; then
14669                                 val="$define"
14670                                 echo "<termio.h> found." >&4
14671                         else
14672                                 echo "System is pyramid with USG universe."
14673                                 echo "<termio.h> not found--you could have problems." >&4
14674                         fi;;
14675                 esac
14676         elif ./usg; then
14677                 if $test `./findhdr termio.h`; then
14678                         echo "<termio.h> found." >&4
14679                         val="$define"
14680                 elif $test `./findhdr sgtty.h`; then
14681                         echo "<sgtty.h> found." >&4
14682                         val2="$define"
14683                 else
14684 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14685                 fi
14686         else
14687                 if $test `./findhdr sgtty.h`; then
14688                         echo "<sgtty.h> found." >&4
14689                         val2="$define"
14690                 elif $test `./findhdr termio.h`; then
14691                         echo "<termio.h> found." >&4
14692                         val="$define"
14693                 else
14694 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14695                 fi
14696         fi;;
14697 esac
14698 set i_termio; eval $setvar
14699 val=$val2; set i_sgtty; eval $setvar
14700 val=$val3; set i_termios; eval $setvar
14701
14702 : see if this is a shadow.h system
14703 set shadow.h i_shadow
14704 eval $inhdr
14705
14706 : see if this is a socks.h system
14707 set socks.h i_socks
14708 eval $inhdr
14709
14710 : see if stdarg is available
14711 echo " "
14712 if $test `./findhdr stdarg.h`; then
14713         echo "<stdarg.h> found." >&4
14714         valstd="$define"
14715 else
14716         echo "<stdarg.h> NOT found." >&4
14717         valstd="$undef"
14718 fi
14719
14720 : see if varags is available
14721 echo " "
14722 if $test `./findhdr varargs.h`; then
14723         echo "<varargs.h> found." >&4
14724 else
14725         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14726 fi
14727
14728 : set up the varargs testing programs
14729 $cat > varargs.c <<EOP
14730 #ifdef I_STDARG
14731 #include <stdarg.h>
14732 #endif
14733 #ifdef I_VARARGS
14734 #include <varargs.h>
14735 #endif
14736
14737 #ifdef I_STDARG
14738 int f(char *p, ...)
14739 #else
14740 int f(va_alist)
14741 va_dcl
14742 #endif
14743 {
14744         va_list ap;
14745 #ifndef I_STDARG
14746         char *p;
14747 #endif
14748 #ifdef I_STDARG
14749         va_start(ap,p);
14750 #else
14751         va_start(ap);
14752         p = va_arg(ap, char *);
14753 #endif
14754         va_end(ap);
14755 }
14756 EOP
14757 $cat > varargs <<EOP
14758 $startsh
14759 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14760         echo "true"
14761 else
14762         echo "false"
14763 fi
14764 $rm -f varargs$_o
14765 EOP
14766 chmod +x varargs
14767
14768 : now check which varargs header should be included
14769 echo " "
14770 i_varhdr=''
14771 case "$valstd" in
14772 "$define")
14773         if `./varargs I_STDARG`; then
14774                 val='stdarg.h'
14775         elif `./varargs I_VARARGS`; then
14776                 val='varargs.h'
14777         fi
14778         ;;
14779 *)
14780         if `./varargs I_VARARGS`; then
14781                 val='varargs.h'
14782         fi
14783         ;;
14784 esac
14785 case "$val" in
14786 '')
14787 echo "I could not find the definition for va_dcl... You have problems..." >&4
14788         val="$undef"; set i_stdarg; eval $setvar
14789         val="$undef"; set i_varargs; eval $setvar
14790         ;;
14791 *) 
14792         set i_varhdr
14793         eval $setvar
14794         case "$i_varhdr" in
14795         stdarg.h)
14796                 val="$define"; set i_stdarg; eval $setvar
14797                 val="$undef"; set i_varargs; eval $setvar
14798                 ;;
14799         varargs.h)
14800                 val="$undef"; set i_stdarg; eval $setvar
14801                 val="$define"; set i_varargs; eval $setvar
14802                 ;;
14803         esac
14804         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14805 esac
14806 $rm -f varargs*
14807
14808 : see if stddef is available
14809 set stddef.h i_stddef
14810 eval $inhdr
14811
14812 : see if this is a sunmath.h system
14813 set sunmath.h i_sunmath
14814 eval $inhdr
14815
14816 : see if sys/access.h is available
14817 set sys/access.h i_sysaccess
14818 eval $inhdr
14819
14820 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14821 set sys/filio.h i_sysfilio
14822 eval $inhdr
14823 echo " "
14824 if $test `./findhdr sys/ioctl.h`; then
14825         val="$define"
14826         echo '<sys/ioctl.h> found.' >&4
14827 else
14828         val="$undef"
14829         if $test $i_sysfilio = "$define"; then
14830             echo '<sys/ioctl.h> NOT found.' >&4
14831         else
14832                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14833                 $test $i_termio = "$define" && xxx="termio.h"
14834                 $test $i_termios = "$define" && xxx="termios.h"
14835 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14836         fi
14837 fi
14838 set i_sysioctl
14839 eval $setvar
14840
14841
14842 : see if this is a syslog.h system
14843 set syslog.h i_syslog
14844 eval $inhdr
14845
14846
14847 : see if this is a sys/mode.h system
14848 set sys/mode.h i_sysmode
14849 eval $inhdr
14850
14851 : see if sys/resource.h has to be included
14852 set sys/resource.h i_sysresrc
14853 eval $inhdr
14854
14855 : see if sys/security.h is available
14856 set sys/security.h i_syssecrt
14857 eval $inhdr
14858
14859 : see if this is a sys/statvfs.h system
14860 set sys/statvfs.h i_sysstatvfs
14861 eval $inhdr
14862
14863 : see if this is a sys/uio.h system
14864 set sys/uio.h i_sysuio
14865 eval $inhdr
14866
14867 : see if this is a sys/un.h system
14868 set sys/un.h i_sysun
14869 eval $inhdr
14870
14871
14872 : see if this is a sys/utsname.h system
14873 set sys/utsname.h i_sysutsname
14874 eval $inhdr
14875
14876 : see if this is a syswait system
14877 set sys/wait.h i_syswait
14878 eval $inhdr
14879
14880 : see if this is a ustat.h system
14881 set ustat.h i_ustat
14882 eval $inhdr
14883
14884 : see if this is an utime system
14885 set utime.h i_utime
14886 eval $inhdr
14887
14888 : see if this is a values.h system
14889 set values.h i_values
14890 eval $inhdr
14891
14892 : see if this is a vfork system
14893 case "$d_vfork" in
14894 "$define")
14895         set vfork.h i_vfork
14896         eval $inhdr
14897         ;;
14898 *)
14899         i_vfork="$undef"
14900         ;;
14901 esac
14902
14903 : see if gdbm.h is available
14904 set gdbm.h t_gdbm
14905 eval $inhdr
14906 case "$t_gdbm" in
14907 $define)
14908         : see if gdbm_open exists
14909         set gdbm_open d_gdbm_open
14910         eval $inlibc
14911         case "$d_gdbm_open" in
14912         $undef)
14913                 t_gdbm="$undef"
14914                 echo "We won't be including <gdbm.h>"
14915                 ;;
14916         esac
14917         ;;
14918 esac
14919 val="$t_gdbm"
14920 set i_gdbm
14921 eval $setvar
14922
14923 echo " "
14924 echo "Looking for extensions..." >&4
14925 : If we are using the old config.sh, known_extensions may contain
14926 : old or inaccurate or duplicate values.
14927 known_extensions=''
14928 nonxs_extensions=''
14929 : We do not use find because it might not be available.
14930 : We do not just use MANIFEST because the user may have dropped
14931 : some additional extensions into the source tree and expect them
14932 : to be built.
14933
14934 : Function to recursively find available extensions, ignoring DynaLoader
14935 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14936 find_extensions='
14937     for xxx in *; do
14938        case "$xxx" in
14939            DynaLoader|dynaload) ;;
14940            *)
14941            if $test -f $xxx/$xxx.xs; then
14942                known_extensions="$known_extensions $1$xxx";
14943            elif $test -f $xxx/Makefile.PL; then
14944                nonxs_extensions="$nonxs_extensions $1$xxx";
14945            else
14946                if $test -d $xxx -a $# -lt 10; then
14947                    set $1$xxx/ $*;
14948                    cd $xxx;
14949                    eval $find_extensions;
14950                    cd ..;
14951                    shift;
14952                fi;
14953            fi
14954            ;;
14955        esac;
14956     done'
14957 tdir=`pwd`
14958 cd $rsrc/ext
14959 set X
14960 shift
14961 eval $find_extensions
14962 set X $nonxs_extensions
14963 shift
14964 nonxs_extensions="$*"
14965 set X $known_extensions
14966 shift
14967 known_extensions="$*"
14968 cd $tdir
14969
14970 : Now see which are supported on this system.
14971 avail_ext=''
14972 for xxx in $known_extensions ; do
14973         case "$xxx" in
14974         DB_File|db_file)
14975                 case "$i_db" in
14976                 $define) avail_ext="$avail_ext $xxx" ;;
14977                 esac
14978                 ;;
14979         GDBM_File|gdbm_fil)
14980                 case "$i_gdbm" in 
14981                 $define) avail_ext="$avail_ext $xxx" ;;
14982                 esac
14983                 ;;
14984         NDBM_File|ndbm_fil)
14985                 case "$i_ndbm" in
14986                 $define)
14987                     case "$osname-$use64bitint" in
14988                     hpux-define)
14989                         case "$libs" in
14990                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14991                         esac
14992                         ;;
14993                     *) avail_ext="$avail_ext $xxx" ;;
14994                     esac
14995                     ;;
14996                 esac
14997                 ;;
14998         ODBM_File|odbm_fil) 
14999                 case "${i_dbm}${i_rpcsvcdbm}" in
15000                 *"${define}"*)
15001                     case "$osname-$use64bitint" in
15002                     hpux-define)
15003                         case "$libs" in
15004                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15005                         esac
15006                         ;;
15007                     *) avail_ext="$avail_ext $xxx" ;;
15008                     esac
15009                     ;;
15010                 esac
15011                 ;;
15012         POSIX|posix)
15013                 case "$useposix" in
15014                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15015                 esac
15016                 ;;
15017         Opcode|opcode)
15018                 case "$useopcode" in
15019                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15020                 esac
15021                 ;;
15022         Socket|socket)
15023                 case "$d_socket" in 
15024                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15025                 esac
15026                 ;;
15027         Sys/Syslog|sys/syslog)
15028                 : XXX syslog requires socket
15029                 case "$d_socket" in 
15030                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15031                 esac
15032                 ;;
15033         Thread|thread)
15034                 case "$usethreads" in 
15035                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15036                 esac
15037                 ;;
15038         IPC/SysV|ipc/sysv)
15039                 : XXX Do we need a useipcsysv variable here
15040                 case "${d_msg}${d_sem}${d_shm}" in 
15041                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15042                 esac
15043                 ;;
15044         *)      avail_ext="$avail_ext $xxx"
15045                 ;;
15046         esac
15047 done
15048
15049 set X $avail_ext
15050 shift
15051 avail_ext="$*"
15052
15053 : Now see which nonxs extensions are supported on this system.
15054 : For now assume all are.
15055 nonxs_ext=''
15056 for xxx in $nonxs_extensions ; do
15057         case "$xxx" in
15058         *)      nonxs_ext="$nonxs_ext $xxx"
15059                 ;;
15060         esac
15061 done
15062
15063 set X $nonxs_ext
15064 shift
15065 nonxs_ext="$*"
15066
15067 case $usedl in
15068 $define)
15069         $cat <<EOM
15070 A number of extensions are supplied with $package.  You may choose to
15071 compile these extensions for dynamic loading (the default), compile
15072 them into the $package executable (static loading), or not include
15073 them at all.  Answer "none" to include no extensions.
15074 Note that DynaLoader is always built and need not be mentioned here.
15075
15076 EOM
15077         case "$dynamic_ext" in
15078         '') dflt="$avail_ext" ;;
15079         *)      dflt="$dynamic_ext"
15080                 # Perhaps we are reusing an old out-of-date config.sh.
15081                 case "$hint" in
15082                 previous)
15083                         if test X"$dynamic_ext" != X"$avail_ext"; then
15084                                 $cat <<EOM
15085 NOTICE:  Your previous config.sh list may be incorrect. 
15086 The extensions now available to you are 
15087         ${avail_ext}
15088 but the default list from your previous config.sh is
15089         ${dynamic_ext} 
15090
15091 EOM
15092                         fi
15093                         ;;
15094                 esac
15095                 ;;
15096         esac
15097         case "$dflt" in
15098         '')     dflt=none;;
15099         esac
15100         rp="What extensions do you wish to load dynamically?"
15101         . ./myread
15102         case "$ans" in
15103         none) dynamic_ext=' ' ;;
15104         *) dynamic_ext="$ans" ;;
15105         esac
15106
15107         case "$static_ext" in
15108         '')
15109                 : Exclude those already listed in dynamic linking
15110                 dflt=''
15111                 for xxx in $avail_ext; do
15112                         case " $dynamic_ext " in
15113                         *" $xxx "*) ;;
15114                         *) dflt="$dflt $xxx" ;;
15115                         esac
15116                 done
15117                 set X $dflt
15118                 shift
15119                 dflt="$*"
15120                 ;;
15121         *)  dflt="$static_ext" 
15122                 ;;
15123         esac
15124
15125         case "$dflt" in
15126         '')     dflt=none;;
15127         esac
15128         rp="What extensions do you wish to load statically?"
15129         . ./myread
15130         case "$ans" in
15131         none) static_ext=' ' ;;
15132         *) static_ext="$ans" ;;
15133         esac
15134         ;;
15135 *)
15136         $cat <<EOM
15137 A number of extensions are supplied with $package.  Answer "none" 
15138 to include no extensions. 
15139 Note that DynaLoader is always built and need not be mentioned here.
15140
15141 EOM
15142         case "$static_ext" in
15143         '') dflt="$avail_ext" ;;
15144         *)      dflt="$static_ext"
15145                 # Perhaps we are reusing an old out-of-date config.sh.
15146                 case "$hint" in
15147                 previous)
15148                         if test X"$static_ext" != X"$avail_ext"; then
15149                                 $cat <<EOM
15150 NOTICE:  Your previous config.sh list may be incorrect. 
15151 The extensions now available to you are 
15152         ${avail_ext}
15153 but the default list from your previous config.sh is
15154         ${static_ext} 
15155
15156 EOM
15157                         fi
15158                         ;;
15159                 esac
15160                 ;;
15161         esac
15162         : Exclude those that are not xs extensions
15163         case "$dflt" in
15164         '')     dflt=none;;
15165         esac
15166         rp="What extensions do you wish to include?"
15167         . ./myread
15168         case "$ans" in
15169         none) static_ext=' ' ;;
15170         *) static_ext="$ans" ;;
15171         esac
15172         ;;
15173 esac
15174
15175 set X $dynamic_ext $static_ext $nonxs_ext
15176 shift
15177 extensions="$*"
15178
15179 : Remove build directory name from cppstdin so it can be used from
15180 : either the present location or the final installed location.
15181 echo " "
15182 : Get out of the UU directory to get correct path name.
15183 cd ..
15184 case "$cppstdin" in
15185 `pwd`/cppstdin)
15186         echo "Stripping down cppstdin path name"
15187         cppstdin=cppstdin
15188         ;;
15189 esac
15190 cd UU
15191
15192 : end of configuration questions
15193 echo " "
15194 echo "End of configuration questions."
15195 echo " "
15196
15197 : back to where it started
15198 if test -d ../UU; then
15199         cd ..
15200 fi
15201
15202 : configuration may be patched via a 'config.over' file
15203 if $test -f config.over; then
15204         echo " "
15205         dflt=y
15206         rp='I see a config.over file.  Do you wish to load it?'
15207         . UU/myread
15208         case "$ans" in
15209         n*) echo "OK, I'll ignore it.";;
15210         *)      . ./config.over
15211                 echo "Configuration override changes have been loaded."
15212                 ;;
15213         esac
15214 fi
15215
15216 : in case they want portability, strip down executable paths
15217 case "$d_portable" in
15218 "$define")
15219         echo " "
15220         echo "Stripping down executable paths..." >&4
15221         for file in $loclist $trylist; do
15222                 eval temp=\$$file
15223                 eval $file=`basename $temp`
15224         done
15225         ;;
15226 esac
15227
15228 : create config.sh file
15229 echo " "
15230 echo "Creating config.sh..." >&4
15231 $spitshell <<EOT >config.sh
15232 $startsh
15233 #
15234 # This file was produced by running the Configure script. It holds all the
15235 # definitions figured out by Configure. Should you modify one of these values,
15236 # do not forget to propagate your changes by running "Configure -der". You may
15237 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15238 #
15239
15240 # Package name      : $package
15241 # Source directory  : $src
15242 # Configuration time: $cf_time
15243 # Configured by     : $cf_by
15244 # Target system     : $myuname
15245
15246 Author='$Author'
15247 Date='$Date'
15248 Header='$Header'
15249 Id='$Id'
15250 Locker='$Locker'
15251 Log='$Log'
15252 Mcc='$Mcc'
15253 RCSfile='$RCSfile'
15254 Revision='$Revision'
15255 Source='$Source'
15256 State='$State'
15257 _a='$_a'
15258 _exe='$_exe'
15259 _o='$_o'
15260 afs='$afs'
15261 alignbytes='$alignbytes'
15262 ansi2knr='$ansi2knr'
15263 aphostname='$aphostname'
15264 api_revision='$api_revision'
15265 api_subversion='$api_subversion'
15266 api_version='$api_version'
15267 api_versionstring='$api_versionstring'
15268 ar='$ar'
15269 archlib='$archlib'
15270 archlibexp='$archlibexp'
15271 archname64='$archname64'
15272 archname='$archname'
15273 archobjs='$archobjs'
15274 awk='$awk'
15275 baserev='$baserev'
15276 bash='$bash'
15277 bin='$bin'
15278 bincompat5005='$bincompat5005'
15279 binexp='$binexp'
15280 bison='$bison'
15281 byacc='$byacc'
15282 byteorder='$byteorder'
15283 c='$c'
15284 castflags='$castflags'
15285 cat='$cat'
15286 cc='$cc'
15287 cccdlflags='$cccdlflags'
15288 ccdlflags='$ccdlflags'
15289 ccflags='$ccflags'
15290 ccsymbols='$ccsymbols'
15291 cf_by='$cf_by'
15292 cf_email='$cf_email'
15293 cf_time='$cf_time'
15294 charsize='$charsize'
15295 chgrp='$chgrp'
15296 chmod='$chmod'
15297 chown='$chown'
15298 clocktype='$clocktype'
15299 comm='$comm'
15300 compress='$compress'
15301 contains='$contains'
15302 cp='$cp'
15303 cpio='$cpio'
15304 cpp='$cpp'
15305 cpp_stuff='$cpp_stuff'
15306 cppccsymbols='$cppccsymbols'
15307 cppflags='$cppflags'
15308 cpplast='$cpplast'
15309 cppminus='$cppminus'
15310 cpprun='$cpprun'
15311 cppstdin='$cppstdin'
15312 cppsymbols='$cppsymbols'
15313 crosscompile='$crosscompile'
15314 cryptlib='$cryptlib'
15315 csh='$csh'
15316 d_Gconvert='$d_Gconvert'
15317 d_PRIEldbl='$d_PRIEldbl'
15318 d_PRIFldbl='$d_PRIFldbl'
15319 d_PRIGldbl='$d_PRIGldbl'
15320 d_PRIX64='$d_PRIX64'
15321 d_PRId64='$d_PRId64'
15322 d_PRIeldbl='$d_PRIeldbl'
15323 d_PRIfldbl='$d_PRIfldbl'
15324 d_PRIgldbl='$d_PRIgldbl'
15325 d_PRIi64='$d_PRIi64'
15326 d_PRIo64='$d_PRIo64'
15327 d_PRIu64='$d_PRIu64'
15328 d_PRIx64='$d_PRIx64'
15329 d_access='$d_access'
15330 d_accessx='$d_accessx'
15331 d_alarm='$d_alarm'
15332 d_archlib='$d_archlib'
15333 d_atolf='$d_atolf'
15334 d_atoll='$d_atoll'
15335 d_attribut='$d_attribut'
15336 d_bcmp='$d_bcmp'
15337 d_bcopy='$d_bcopy'
15338 d_bincompat5005='$d_bincompat5005'
15339 d_bsd='$d_bsd'
15340 d_bsdgetpgrp='$d_bsdgetpgrp'
15341 d_bsdsetpgrp='$d_bsdsetpgrp'
15342 d_bzero='$d_bzero'
15343 d_casti32='$d_casti32'
15344 d_castneg='$d_castneg'
15345 d_charvspr='$d_charvspr'
15346 d_chown='$d_chown'
15347 d_chroot='$d_chroot'
15348 d_chsize='$d_chsize'
15349 d_closedir='$d_closedir'
15350 d_const='$d_const'
15351 d_crypt='$d_crypt'
15352 d_csh='$d_csh'
15353 d_cuserid='$d_cuserid'
15354 d_dbl_dig='$d_dbl_dig'
15355 d_difftime='$d_difftime'
15356 d_dirnamlen='$d_dirnamlen'
15357 d_dlerror='$d_dlerror'
15358 d_dlopen='$d_dlopen'
15359 d_dlsymun='$d_dlsymun'
15360 d_dosuid='$d_dosuid'
15361 d_drand48proto='$d_drand48proto'
15362 d_dup2='$d_dup2'
15363 d_eaccess='$d_eaccess'
15364 d_endgrent='$d_endgrent'
15365 d_endhent='$d_endhent'
15366 d_endnent='$d_endnent'
15367 d_endpent='$d_endpent'
15368 d_endpwent='$d_endpwent'
15369 d_endsent='$d_endsent'
15370 d_eofnblk='$d_eofnblk'
15371 d_eunice='$d_eunice'
15372 d_fchmod='$d_fchmod'
15373 d_fchown='$d_fchown'
15374 d_fcntl='$d_fcntl'
15375 d_fd_macros='$d_fd_macros'
15376 d_fd_set='$d_fd_set'
15377 d_fds_bits='$d_fds_bits'
15378 d_fgetpos='$d_fgetpos'
15379 d_flexfnam='$d_flexfnam'
15380 d_flock='$d_flock'
15381 d_fork='$d_fork'
15382 d_fpathconf='$d_fpathconf'
15383 d_fpos64_t='$d_fpos64_t'
15384 d_frexpl='$d_frexpl'
15385 d_fs_data_s='$d_fs_data_s'
15386 d_fseeko='$d_fseeko'
15387 d_fsetpos='$d_fsetpos'
15388 d_fstatfs='$d_fstatfs'
15389 d_fstatvfs='$d_fstatvfs'
15390 d_ftello='$d_ftello'
15391 d_ftime='$d_ftime'
15392 d_getcwd='$d_getcwd'
15393 d_getespwnam='$d_getespwnam'
15394 d_getfsstat='$d_getfsstat'
15395 d_getgrent='$d_getgrent'
15396 d_getgrps='$d_getgrps'
15397 d_gethbyaddr='$d_gethbyaddr'
15398 d_gethbyname='$d_gethbyname'
15399 d_gethent='$d_gethent'
15400 d_gethname='$d_gethname'
15401 d_gethostprotos='$d_gethostprotos'
15402 d_getlogin='$d_getlogin'
15403 d_getmnt='$d_getmnt'
15404 d_getmntent='$d_getmntent'
15405 d_getnbyaddr='$d_getnbyaddr'
15406 d_getnbyname='$d_getnbyname'
15407 d_getnent='$d_getnent'
15408 d_getnetprotos='$d_getnetprotos'
15409 d_getpbyname='$d_getpbyname'
15410 d_getpbynumber='$d_getpbynumber'
15411 d_getpent='$d_getpent'
15412 d_getpgid='$d_getpgid'
15413 d_getpgrp2='$d_getpgrp2'
15414 d_getpgrp='$d_getpgrp'
15415 d_getppid='$d_getppid'
15416 d_getprior='$d_getprior'
15417 d_getprotoprotos='$d_getprotoprotos'
15418 d_getprpwnam='$d_getprpwnam'
15419 d_getpwent='$d_getpwent'
15420 d_getsbyname='$d_getsbyname'
15421 d_getsbyport='$d_getsbyport'
15422 d_getsent='$d_getsent'
15423 d_getservprotos='$d_getservprotos'
15424 d_getspnam='$d_getspnam'
15425 d_gettimeod='$d_gettimeod'
15426 d_gnulibc='$d_gnulibc'
15427 d_grpasswd='$d_grpasswd'
15428 d_hasmntopt='$d_hasmntopt'
15429 d_htonl='$d_htonl'
15430 d_iconv='$d_iconv'
15431 d_index='$d_index'
15432 d_inetaton='$d_inetaton'
15433 d_int64_t='$d_int64_t'
15434 d_isascii='$d_isascii'
15435 d_isnan='$d_isnan'
15436 d_isnanl='$d_isnanl'
15437 d_killpg='$d_killpg'
15438 d_lchown='$d_lchown'
15439 d_ldbl_dig='$d_ldbl_dig'
15440 d_link='$d_link'
15441 d_locconv='$d_locconv'
15442 d_lockf='$d_lockf'
15443 d_longdbl='$d_longdbl'
15444 d_longlong='$d_longlong'
15445 d_lseekproto='$d_lseekproto'
15446 d_lstat='$d_lstat'
15447 d_madvise='$d_madvise'
15448 d_mblen='$d_mblen'
15449 d_mbstowcs='$d_mbstowcs'
15450 d_mbtowc='$d_mbtowc'
15451 d_memchr='$d_memchr'
15452 d_memcmp='$d_memcmp'
15453 d_memcpy='$d_memcpy'
15454 d_memmove='$d_memmove'
15455 d_memset='$d_memset'
15456 d_mkdir='$d_mkdir'
15457 d_mkdtemp='$d_mkdtemp'
15458 d_mkfifo='$d_mkfifo'
15459 d_mkstemp='$d_mkstemp'
15460 d_mkstemps='$d_mkstemps'
15461 d_mktime='$d_mktime'
15462 d_mmap='$d_mmap'
15463 d_modfl='$d_modfl'
15464 d_mprotect='$d_mprotect'
15465 d_msg='$d_msg'
15466 d_msg_ctrunc='$d_msg_ctrunc'
15467 d_msg_dontroute='$d_msg_dontroute'
15468 d_msg_oob='$d_msg_oob'
15469 d_msg_peek='$d_msg_peek'
15470 d_msg_proxy='$d_msg_proxy'
15471 d_msgctl='$d_msgctl'
15472 d_msgget='$d_msgget'
15473 d_msgrcv='$d_msgrcv'
15474 d_msgsnd='$d_msgsnd'
15475 d_msync='$d_msync'
15476 d_munmap='$d_munmap'
15477 d_mymalloc='$d_mymalloc'
15478 d_nice='$d_nice'
15479 d_nv_preserves_uv='$d_nv_preserves_uv'
15480 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15481 d_off64_t='$d_off64_t'
15482 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15483 d_oldpthreads='$d_oldpthreads'
15484 d_oldsock='$d_oldsock'
15485 d_open3='$d_open3'
15486 d_pathconf='$d_pathconf'
15487 d_pause='$d_pause'
15488 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15489 d_phostname='$d_phostname'
15490 d_pipe='$d_pipe'
15491 d_poll='$d_poll'
15492 d_portable='$d_portable'
15493 d_pthread_yield='$d_pthread_yield'
15494 d_pwage='$d_pwage'
15495 d_pwchange='$d_pwchange'
15496 d_pwclass='$d_pwclass'
15497 d_pwcomment='$d_pwcomment'
15498 d_pwexpire='$d_pwexpire'
15499 d_pwgecos='$d_pwgecos'
15500 d_pwpasswd='$d_pwpasswd'
15501 d_pwquota='$d_pwquota'
15502 d_qgcvt='$d_qgcvt'
15503 d_quad='$d_quad'
15504 d_readdir='$d_readdir'
15505 d_readlink='$d_readlink'
15506 d_rename='$d_rename'
15507 d_rewinddir='$d_rewinddir'
15508 d_rmdir='$d_rmdir'
15509 d_safebcpy='$d_safebcpy'
15510 d_safemcpy='$d_safemcpy'
15511 d_sanemcmp='$d_sanemcmp'
15512 d_sched_yield='$d_sched_yield'
15513 d_scm_rights='$d_scm_rights'
15514 d_seekdir='$d_seekdir'
15515 d_select='$d_select'
15516 d_sem='$d_sem'
15517 d_semctl='$d_semctl'
15518 d_semctl_semid_ds='$d_semctl_semid_ds'
15519 d_semctl_semun='$d_semctl_semun'
15520 d_semget='$d_semget'
15521 d_semop='$d_semop'
15522 d_setegid='$d_setegid'
15523 d_seteuid='$d_seteuid'
15524 d_setgrent='$d_setgrent'
15525 d_setgrps='$d_setgrps'
15526 d_sethent='$d_sethent'
15527 d_setlinebuf='$d_setlinebuf'
15528 d_setlocale='$d_setlocale'
15529 d_setnent='$d_setnent'
15530 d_setpent='$d_setpent'
15531 d_setpgid='$d_setpgid'
15532 d_setpgrp2='$d_setpgrp2'
15533 d_setpgrp='$d_setpgrp'
15534 d_setprior='$d_setprior'
15535 d_setproctitle='$d_setproctitle'
15536 d_setpwent='$d_setpwent'
15537 d_setregid='$d_setregid'
15538 d_setresgid='$d_setresgid'
15539 d_setresuid='$d_setresuid'
15540 d_setreuid='$d_setreuid'
15541 d_setrgid='$d_setrgid'
15542 d_setruid='$d_setruid'
15543 d_setsent='$d_setsent'
15544 d_setsid='$d_setsid'
15545 d_setvbuf='$d_setvbuf'
15546 d_sfio='$d_sfio'
15547 d_shm='$d_shm'
15548 d_shmat='$d_shmat'
15549 d_shmatprototype='$d_shmatprototype'
15550 d_shmctl='$d_shmctl'
15551 d_shmdt='$d_shmdt'
15552 d_shmget='$d_shmget'
15553 d_sigaction='$d_sigaction'
15554 d_sigsetjmp='$d_sigsetjmp'
15555 d_socket='$d_socket'
15556 d_socklen_t='$d_socklen_t'
15557 d_sockpair='$d_sockpair'
15558 d_sqrtl='$d_sqrtl'
15559 d_statblks='$d_statblks'
15560 d_statfs_f_flags='$d_statfs_f_flags'
15561 d_statfs_s='$d_statfs_s'
15562 d_statvfs='$d_statvfs'
15563 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15564 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15565 d_stdio_stream_array='$d_stdio_stream_array'
15566 d_stdiobase='$d_stdiobase'
15567 d_stdstdio='$d_stdstdio'
15568 d_strchr='$d_strchr'
15569 d_strcoll='$d_strcoll'
15570 d_strctcpy='$d_strctcpy'
15571 d_strerrm='$d_strerrm'
15572 d_strerror='$d_strerror'
15573 d_strtod='$d_strtod'
15574 d_strtol='$d_strtol'
15575 d_strtold='$d_strtold'
15576 d_strtoll='$d_strtoll'
15577 d_strtoul='$d_strtoul'
15578 d_strtoull='$d_strtoull'
15579 d_strtouq='$d_strtouq'
15580 d_strxfrm='$d_strxfrm'
15581 d_suidsafe='$d_suidsafe'
15582 d_symlink='$d_symlink'
15583 d_syscall='$d_syscall'
15584 d_sysconf='$d_sysconf'
15585 d_sysernlst='$d_sysernlst'
15586 d_syserrlst='$d_syserrlst'
15587 d_system='$d_system'
15588 d_tcgetpgrp='$d_tcgetpgrp'
15589 d_tcsetpgrp='$d_tcsetpgrp'
15590 d_telldir='$d_telldir'
15591 d_telldirproto='$d_telldirproto'
15592 d_time='$d_time'
15593 d_times='$d_times'
15594 d_truncate='$d_truncate'
15595 d_tzname='$d_tzname'
15596 d_umask='$d_umask'
15597 d_uname='$d_uname'
15598 d_union_semun='$d_union_semun'
15599 d_ustat='$d_ustat'
15600 d_vendorarch='$d_vendorarch'
15601 d_vendorbin='$d_vendorbin'
15602 d_vendorlib='$d_vendorlib'
15603 d_vfork='$d_vfork'
15604 d_void_closedir='$d_void_closedir'
15605 d_voidsig='$d_voidsig'
15606 d_voidtty='$d_voidtty'
15607 d_volatile='$d_volatile'
15608 d_vprintf='$d_vprintf'
15609 d_wait4='$d_wait4'
15610 d_waitpid='$d_waitpid'
15611 d_wcstombs='$d_wcstombs'
15612 d_wctomb='$d_wctomb'
15613 d_xenix='$d_xenix'
15614 date='$date'
15615 db_hashtype='$db_hashtype'
15616 db_prefixtype='$db_prefixtype'
15617 defvoidused='$defvoidused'
15618 direntrytype='$direntrytype'
15619 dlext='$dlext'
15620 dlsrc='$dlsrc'
15621 doublesize='$doublesize'
15622 drand01='$drand01'
15623 dynamic_ext='$dynamic_ext'
15624 eagain='$eagain'
15625 ebcdic='$ebcdic'
15626 echo='$echo'
15627 egrep='$egrep'
15628 emacs='$emacs'
15629 eunicefix='$eunicefix'
15630 exe_ext='$exe_ext'
15631 expr='$expr'
15632 extensions='$extensions'
15633 fflushNULL='$fflushNULL'
15634 fflushall='$fflushall'
15635 find='$find'
15636 firstmakefile='$firstmakefile'
15637 flex='$flex'
15638 fpossize='$fpossize'
15639 fpostype='$fpostype'
15640 freetype='$freetype'
15641 full_ar='$full_ar'
15642 full_csh='$full_csh'
15643 full_sed='$full_sed'
15644 gccosandvers='$gccosandvers'
15645 gccversion='$gccversion'
15646 gidformat='$gidformat'
15647 gidsign='$gidsign'
15648 gidsize='$gidsize'
15649 gidtype='$gidtype'
15650 glibpth='$glibpth'
15651 grep='$grep'
15652 groupcat='$groupcat'
15653 groupstype='$groupstype'
15654 gzip='$gzip'
15655 h_fcntl='$h_fcntl'
15656 h_sysfile='$h_sysfile'
15657 hint='$hint'
15658 hostcat='$hostcat'
15659 huge='$huge'
15660 i16size='$i16size'
15661 i16type='$i16type'
15662 i32size='$i32size'
15663 i32type='$i32type'
15664 i64size='$i64size'
15665 i64type='$i64type'
15666 i8size='$i8size'
15667 i8type='$i8type'
15668 i_arpainet='$i_arpainet'
15669 i_bsdioctl='$i_bsdioctl'
15670 i_db='$i_db'
15671 i_dbm='$i_dbm'
15672 i_dirent='$i_dirent'
15673 i_dld='$i_dld'
15674 i_dlfcn='$i_dlfcn'
15675 i_fcntl='$i_fcntl'
15676 i_float='$i_float'
15677 i_gdbm='$i_gdbm'
15678 i_grp='$i_grp'
15679 i_iconv='$i_iconv'
15680 i_ieeefp='$i_ieeefp'
15681 i_inttypes='$i_inttypes'
15682 i_limits='$i_limits'
15683 i_locale='$i_locale'
15684 i_machcthr='$i_machcthr'
15685 i_malloc='$i_malloc'
15686 i_math='$i_math'
15687 i_memory='$i_memory'
15688 i_mntent='$i_mntent'
15689 i_ndbm='$i_ndbm'
15690 i_netdb='$i_netdb'
15691 i_neterrno='$i_neterrno'
15692 i_netinettcp='$i_netinettcp'
15693 i_niin='$i_niin'
15694 i_poll='$i_poll'
15695 i_prot='$i_prot'
15696 i_pthread='$i_pthread'
15697 i_pwd='$i_pwd'
15698 i_rpcsvcdbm='$i_rpcsvcdbm'
15699 i_sfio='$i_sfio'
15700 i_sgtty='$i_sgtty'
15701 i_shadow='$i_shadow'
15702 i_socks='$i_socks'
15703 i_stdarg='$i_stdarg'
15704 i_stddef='$i_stddef'
15705 i_stdlib='$i_stdlib'
15706 i_string='$i_string'
15707 i_sunmath='$i_sunmath'
15708 i_sysaccess='$i_sysaccess'
15709 i_sysdir='$i_sysdir'
15710 i_sysfile='$i_sysfile'
15711 i_sysfilio='$i_sysfilio'
15712 i_sysin='$i_sysin'
15713 i_sysioctl='$i_sysioctl'
15714 i_syslog='$i_syslog'
15715 i_sysmman='$i_sysmman'
15716 i_sysmode='$i_sysmode'
15717 i_sysmount='$i_sysmount'
15718 i_sysndir='$i_sysndir'
15719 i_sysparam='$i_sysparam'
15720 i_sysresrc='$i_sysresrc'
15721 i_syssecrt='$i_syssecrt'
15722 i_sysselct='$i_sysselct'
15723 i_syssockio='$i_syssockio'
15724 i_sysstat='$i_sysstat'
15725 i_sysstatfs='$i_sysstatfs'
15726 i_sysstatvfs='$i_sysstatvfs'
15727 i_systime='$i_systime'
15728 i_systimek='$i_systimek'
15729 i_systimes='$i_systimes'
15730 i_systypes='$i_systypes'
15731 i_sysuio='$i_sysuio'
15732 i_sysun='$i_sysun'
15733 i_sysutsname='$i_sysutsname'
15734 i_sysvfs='$i_sysvfs'
15735 i_syswait='$i_syswait'
15736 i_termio='$i_termio'
15737 i_termios='$i_termios'
15738 i_time='$i_time'
15739 i_unistd='$i_unistd'
15740 i_ustat='$i_ustat'
15741 i_utime='$i_utime'
15742 i_values='$i_values'
15743 i_varargs='$i_varargs'
15744 i_varhdr='$i_varhdr'
15745 i_vfork='$i_vfork'
15746 ignore_versioned_solibs='$ignore_versioned_solibs'
15747 inc_version_list='$inc_version_list'
15748 inc_version_list_init='$inc_version_list_init'
15749 incpath='$incpath'
15750 inews='$inews'
15751 installarchlib='$installarchlib'
15752 installbin='$installbin'
15753 installman1dir='$installman1dir'
15754 installman3dir='$installman3dir'
15755 installprefix='$installprefix'
15756 installprefixexp='$installprefixexp'
15757 installprivlib='$installprivlib'
15758 installscript='$installscript'
15759 installsitearch='$installsitearch'
15760 installsitebin='$installsitebin'
15761 installsitelib='$installsitelib'
15762 installstyle='$installstyle'
15763 installusrbinperl='$installusrbinperl'
15764 installvendorarch='$installvendorarch'
15765 installvendorbin='$installvendorbin'
15766 installvendorlib='$installvendorlib'
15767 intsize='$intsize'
15768 ivdformat='$ivdformat'
15769 ivsize='$ivsize'
15770 ivtype='$ivtype'
15771 known_extensions='$known_extensions'
15772 ksh='$ksh'
15773 large='$large'
15774 ld='$ld'
15775 lddlflags='$lddlflags'
15776 ldflags='$ldflags'
15777 ldlibpthname='$ldlibpthname'
15778 less='$less'
15779 lib_ext='$lib_ext'
15780 libc='$libc'
15781 libperl='$libperl'
15782 libpth='$libpth'
15783 libs='$libs'
15784 libsdirs='$libsdirs'
15785 libsfiles='$libsfiles'
15786 libsfound='$libsfound'
15787 libspath='$libspath'
15788 libswanted='$libswanted'
15789 line='$line'
15790 lint='$lint'
15791 lkflags='$lkflags'
15792 ln='$ln'
15793 lns='$lns'
15794 locincpth='$locincpth'
15795 loclibpth='$loclibpth'
15796 longdblsize='$longdblsize'
15797 longlongsize='$longlongsize'
15798 longsize='$longsize'
15799 lp='$lp'
15800 lpr='$lpr'
15801 ls='$ls'
15802 lseeksize='$lseeksize'
15803 lseektype='$lseektype'
15804 mail='$mail'
15805 mailx='$mailx'
15806 make='$make'
15807 make_set_make='$make_set_make'
15808 mallocobj='$mallocobj'
15809 mallocsrc='$mallocsrc'
15810 malloctype='$malloctype'
15811 man1dir='$man1dir'
15812 man1direxp='$man1direxp'
15813 man1ext='$man1ext'
15814 man3dir='$man3dir'
15815 man3direxp='$man3direxp'
15816 man3ext='$man3ext'
15817 medium='$medium'
15818 mips_type='$mips_type'
15819 mkdir='$mkdir'
15820 mmaptype='$mmaptype'
15821 models='$models'
15822 modetype='$modetype'
15823 more='$more'
15824 multiarch='$multiarch'
15825 mv='$mv'
15826 myarchname='$myarchname'
15827 mydomain='$mydomain'
15828 myhostname='$myhostname'
15829 myuname='$myuname'
15830 n='$n'
15831 netdb_hlen_type='$netdb_hlen_type'
15832 netdb_host_type='$netdb_host_type'
15833 netdb_name_type='$netdb_name_type'
15834 netdb_net_type='$netdb_net_type'
15835 nm='$nm'
15836 nm_opt='$nm_opt'
15837 nm_so_opt='$nm_so_opt'
15838 nonxs_ext='$nonxs_ext'
15839 nroff='$nroff'
15840 nvsize='$nvsize'
15841 nvtype='$nvtype'
15842 o_nonblock='$o_nonblock'
15843 obj_ext='$obj_ext'
15844 old_pthread_create_joinable='$old_pthread_create_joinable'
15845 optimize='$optimize'
15846 orderlib='$orderlib'
15847 osname='$osname'
15848 osvers='$osvers'
15849 otherlibdirs='$otherlibdirs'
15850 package='$package'
15851 pager='$pager'
15852 passcat='$passcat'
15853 patchlevel='$patchlevel'
15854 path_sep='$path_sep'
15855 perl5='$perl5'
15856 perl='$perl'
15857 perladmin='$perladmin'
15858 perlpath='$perlpath'
15859 pg='$pg'
15860 phostname='$phostname'
15861 pidtype='$pidtype'
15862 plibpth='$plibpth'
15863 pm_apiversion='$pm_apiversion'
15864 pmake='$pmake'
15865 pr='$pr'
15866 prefix='$prefix'
15867 prefixexp='$prefixexp'
15868 privlib='$privlib'
15869 privlibexp='$privlibexp'
15870 prototype='$prototype'
15871 ptrsize='$ptrsize'
15872 quadkind='$quadkind'
15873 quadtype='$quadtype'
15874 randbits='$randbits'
15875 randfunc='$randfunc'
15876 randseedtype='$randseedtype'
15877 ranlib='$ranlib'
15878 rd_nodata='$rd_nodata'
15879 revision='$revision'
15880 rm='$rm'
15881 rmail='$rmail'
15882 runnm='$runnm'
15883 sPRIEldbl='$sPRIEldbl'
15884 sPRIFldbl='$sPRIFldbl'
15885 sPRIGldbl='$sPRIGldbl'
15886 sPRIX64='$sPRIX64'
15887 sPRId64='$sPRId64'
15888 sPRIeldbl='$sPRIeldbl'
15889 sPRIfldbl='$sPRIfldbl'
15890 sPRIgldbl='$sPRIgldbl'
15891 sPRIi64='$sPRIi64'
15892 sPRIo64='$sPRIo64'
15893 sPRIu64='$sPRIu64'
15894 sPRIx64='$sPRIx64'
15895 sched_yield='$sched_yield'
15896 scriptdir='$scriptdir'
15897 scriptdirexp='$scriptdirexp'
15898 sed='$sed'
15899 seedfunc='$seedfunc'
15900 selectminbits='$selectminbits'
15901 selecttype='$selecttype'
15902 sendmail='$sendmail'
15903 sh='$sh'
15904 shar='$shar'
15905 sharpbang='$sharpbang'
15906 shmattype='$shmattype'
15907 shortsize='$shortsize'
15908 shrpenv='$shrpenv'
15909 shsharp='$shsharp'
15910 sig_count='$sig_count'
15911 sig_name='$sig_name'
15912 sig_name_init='$sig_name_init'
15913 sig_num='$sig_num'
15914 sig_num_init='$sig_num_init'
15915 signal_t='$signal_t'
15916 sitearch='$sitearch'
15917 sitearchexp='$sitearchexp'
15918 sitebin='$sitebin'
15919 sitebinexp='$sitebinexp'
15920 sitelib='$sitelib'
15921 sitelib_stem='$sitelib_stem'
15922 sitelibexp='$sitelibexp'
15923 siteprefix='$siteprefix'
15924 siteprefixexp='$siteprefixexp'
15925 sizesize='$sizesize'
15926 sizetype='$sizetype'
15927 sleep='$sleep'
15928 smail='$smail'
15929 small='$small'
15930 so='$so'
15931 sockethdr='$sockethdr'
15932 socketlib='$socketlib'
15933 socksizetype='$socksizetype'
15934 sort='$sort'
15935 spackage='$spackage'
15936 spitshell='$spitshell'
15937 split='$split'
15938 src='$src'
15939 ssizetype='$ssizetype'
15940 startperl='$startperl'
15941 startsh='$startsh'
15942 static_ext='$static_ext'
15943 stdchar='$stdchar'
15944 stdio_base='$stdio_base'
15945 stdio_bufsiz='$stdio_bufsiz'
15946 stdio_cnt='$stdio_cnt'
15947 stdio_filbuf='$stdio_filbuf'
15948 stdio_ptr='$stdio_ptr'
15949 stdio_stream_array='$stdio_stream_array'
15950 strings='$strings'
15951 submit='$submit'
15952 subversion='$subversion'
15953 sysman='$sysman'
15954 tail='$tail'
15955 tar='$tar'
15956 tbl='$tbl'
15957 tee='$tee'
15958 test='$test'
15959 timeincl='$timeincl'
15960 timetype='$timetype'
15961 touch='$touch'
15962 tr='$tr'
15963 trnl='$trnl'
15964 troff='$troff'
15965 u16size='$u16size'
15966 u16type='$u16type'
15967 u32size='$u32size'
15968 u32type='$u32type'
15969 u64size='$u64size'
15970 u64type='$u64type'
15971 u8size='$u8size'
15972 u8type='$u8type'
15973 uidformat='$uidformat'
15974 uidsign='$uidsign'
15975 uidsize='$uidsize'
15976 uidtype='$uidtype'
15977 uname='$uname'
15978 uniq='$uniq'
15979 uquadtype='$uquadtype'
15980 use5005threads='$use5005threads'
15981 use64bitall='$use64bitall'
15982 use64bitint='$use64bitint'
15983 usedl='$usedl'
15984 useithreads='$useithreads'
15985 uselargefiles='$uselargefiles'
15986 uselongdouble='$uselongdouble'
15987 usemorebits='$usemorebits'
15988 usemultiplicity='$usemultiplicity'
15989 usemymalloc='$usemymalloc'
15990 usenm='$usenm'
15991 useopcode='$useopcode'
15992 useperlio='$useperlio'
15993 useposix='$useposix'
15994 usesfio='$usesfio'
15995 useshrplib='$useshrplib'
15996 usesocks='$usesocks'
15997 usethreads='$usethreads'
15998 usevendorprefix='$usevendorprefix'
15999 usevfork='$usevfork'
16000 usrinc='$usrinc'
16001 uuname='$uuname'
16002 uvoformat='$uvoformat'
16003 uvsize='$uvsize'
16004 uvtype='$uvtype'
16005 uvuformat='$uvuformat'
16006 uvxformat='$uvxformat'
16007 vendorarch='$vendorarch'
16008 vendorarchexp='$vendorarchexp'
16009 vendorbin='$vendorbin'
16010 vendorbinexp='$vendorbinexp'
16011 vendorlib='$vendorlib'
16012 vendorlib_stem='$vendorlib_stem'
16013 vendorlibexp='$vendorlibexp'
16014 vendorprefix='$vendorprefix'
16015 vendorprefixexp='$vendorprefixexp'
16016 version='$version'
16017 vi='$vi'
16018 voidflags='$voidflags'
16019 xlibpth='$xlibpth'
16020 xs_apiversion='$xs_apiversion'
16021 zcat='$zcat'
16022 zip='$zip'
16023 EOT
16024
16025 : Add in command line options if available
16026 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16027
16028 : add special variables
16029 $test -f $src/patchlevel.h && \
16030 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16031 echo "CONFIGDOTSH=true" >>config.sh
16032
16033 : propagate old symbols
16034 if $test -f UU/config.sh; then
16035         <UU/config.sh sort | uniq >UU/oldconfig.sh
16036         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16037         sort | uniq -u >UU/oldsyms
16038         set X `cat UU/oldsyms`
16039         shift
16040         case $# in
16041         0) ;;
16042         *)
16043                 cat <<EOM
16044 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16045 EOM
16046                 echo "# Variables propagated from previous config.sh file." >>config.sh
16047                 for sym in `cat UU/oldsyms`; do
16048                         echo "    Propagating $hint variable "'$'"$sym..."
16049                         eval 'tmp="$'"${sym}"'"'
16050                         echo "$tmp" | \
16051                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16052                 done
16053                 ;;
16054         esac
16055 fi
16056
16057 : Finish up by extracting the .SH files
16058 case "$alldone" in
16059 exit)
16060         $rm -rf UU
16061         echo "Done."
16062         exit 0
16063         ;;
16064 cont)
16065         ;;
16066 '')
16067         dflt=''
16068         nostick=true
16069         $cat <<EOM
16070
16071 If you'd like to make any changes to the config.sh file before I begin
16072 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16073
16074 EOM
16075         rp="Press return or use a shell escape to edit config.sh:"
16076         . UU/myread
16077         nostick=''
16078         case "$ans" in
16079         '') ;;
16080         *) : in case they cannot read
16081                 sh 1>&4 -c "$ans";;
16082         esac
16083         ;;
16084 esac
16085
16086 : if this fails, just run all the .SH files by hand
16087 . ./config.sh
16088
16089 echo " "
16090 exec 1>&4
16091 . ./UU/extract
16092
16093 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16094         dflt=y
16095         case "$silent" in
16096         true) ;;
16097         *)
16098                 $cat <<EOM
16099
16100 Now you need to generate make dependencies by running "$make depend".
16101 You might prefer to run it in background: "$make depend > makedepend.out &"
16102 It can take a while, so you might not want to run it right now.
16103
16104 EOM
16105                 ;;
16106         esac
16107         rp="Run $make depend now?"
16108         . UU/myread
16109         case "$ans" in
16110         y*)
16111                 $make depend && echo "Now you must run a $make."
16112                 ;;
16113         *)
16114                 echo "You must run '$make depend' then '$make'."
16115                 ;;
16116         esac
16117 elif test -f [Mm]akefile; then
16118         echo " "
16119         echo "Now you must run a $make."
16120 else
16121         echo "Done."
16122 fi
16123
16124 if $test -f Policy.sh; then
16125     $cat <<EOM
16126
16127 If you compile $package on a different machine or from a different object
16128 directory, copy the Policy.sh file from this object directory to the
16129 new one before you run Configure -- this will help you with most of
16130 the policy defaults.
16131
16132 EOM
16133 fi
16134 if $test -f config.msg; then
16135     echo "Hmm.  I also noted the following information while running:"
16136     echo " "
16137     $cat config.msg >&4
16138     $rm -f config.msg
16139 fi
16140 $rm -f kit*isdone ark*isdone
16141 $rm -rf UU
16142
16143 : End of Configure
16144