Continue what #4494 started; introduce uid and gid formats.
[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 Oct 30 02:37:12 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 charsize=''
302 contains=''
303 cpp_stuff=''
304 cpplast=''
305 cppminus=''
306 cpprun=''
307 cppstdin=''
308 crosscompile=''
309 d_access=''
310 d_accessx=''
311 d_alarm=''
312 d_attribut=''
313 d_bcmp=''
314 d_bcopy=''
315 d_bzero=''
316 d_casti32=''
317 castflags=''
318 d_castneg=''
319 d_chown=''
320 d_chroot=''
321 d_chsize=''
322 d_closedir=''
323 d_void_closedir=''
324 d_const=''
325 cryptlib=''
326 d_crypt=''
327 d_csh=''
328 full_csh=''
329 d_cuserid=''
330 d_dbl_dig=''
331 d_difftime=''
332 d_dlerror=''
333 d_dlopen=''
334 d_dlsymun=''
335 d_dosuid=''
336 d_suidsafe=''
337 d_drand48proto=''
338 d_dup2=''
339 d_eaccess=''
340 d_endgrent=''
341 d_endhent=''
342 d_endnent=''
343 d_endpent=''
344 d_endpwent=''
345 d_endsent=''
346 d_endspent=''
347 d_fchmod=''
348 d_fchown=''
349 d_fcntl=''
350 d_fd_macros=''
351 d_fd_set=''
352 d_fds_bits=''
353 d_fgetpos=''
354 d_flexfnam=''
355 d_flock=''
356 d_fork=''
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_getgrent=''
366 d_getgrps=''
367 d_gethbyaddr=''
368 d_gethbyname=''
369 d_gethent=''
370 aphostname=''
371 d_gethname=''
372 d_phostname=''
373 d_uname=''
374 d_gethostprotos=''
375 d_getlogin=''
376 d_getmnt=''
377 d_getmntent=''
378 d_getnbyaddr=''
379 d_getnbyname=''
380 d_getnent=''
381 d_getnetprotos=''
382 d_getpent=''
383 d_getpgid=''
384 d_getpgrp2=''
385 d_bsdgetpgrp=''
386 d_getpgrp=''
387 d_getppid=''
388 d_getprior=''
389 d_getpbyname=''
390 d_getpbynumber=''
391 d_getprotoprotos=''
392 d_getpwent=''
393 d_getsent=''
394 d_getservprotos=''
395 d_getspent=''
396 d_getspnam=''
397 d_getsbyname=''
398 d_getsbyport=''
399 d_gnulibc=''
400 d_hasmntopt=''
401 d_htonl=''
402 d_inetaton=''
403 d_isascii=''
404 d_killpg=''
405 d_lchown=''
406 d_ldbl_dig=''
407 d_link=''
408 d_locconv=''
409 d_lockf=''
410 d_longdbl=''
411 longdblsize=''
412 d_longlong=''
413 longlongsize=''
414 d_lstat=''
415 d_mblen=''
416 d_mbstowcs=''
417 d_mbtowc=''
418 d_memchr=''
419 d_memcmp=''
420 d_memcpy=''
421 d_memmove=''
422 d_memset=''
423 d_mkdir=''
424 d_mkfifo=''
425 d_mktime=''
426 d_msg=''
427 d_msgctl=''
428 d_msgget=''
429 d_msgrcv=''
430 d_msgsnd=''
431 d_nice=''
432 d_open3=''
433 d_fpathconf=''
434 d_pathconf=''
435 d_pause=''
436 d_pipe=''
437 d_poll=''
438 d_portable=''
439 d_old_pthread_create_joinable=''
440 old_pthread_create_joinable=''
441 d_pthread_yield=''
442 d_sched_yield=''
443 sched_yield=''
444 d_readdir=''
445 d_rewinddir=''
446 d_seekdir=''
447 d_telldir=''
448 d_readlink=''
449 d_rename=''
450 d_rmdir=''
451 d_safebcpy=''
452 d_safemcpy=''
453 d_sanemcmp=''
454 d_select=''
455 d_sem=''
456 d_semctl=''
457 d_semget=''
458 d_semop=''
459 d_setegid=''
460 d_seteuid=''
461 d_setgrent=''
462 d_setgrps=''
463 d_sethent=''
464 d_setlinebuf=''
465 d_setlocale=''
466 d_setnent=''
467 d_setpent=''
468 d_setpgid=''
469 d_setpgrp2=''
470 d_bsdsetpgrp=''
471 d_setpgrp=''
472 d_setprior=''
473 d_setpwent=''
474 d_setregid=''
475 d_setresgid=''
476 d_setresuid=''
477 d_setreuid=''
478 d_setrgid=''
479 d_setruid=''
480 d_setsent=''
481 d_setsid=''
482 d_setspent=''
483 d_setvbuf=''
484 d_sfio=''
485 usesfio=''
486 d_shm=''
487 d_shmat=''
488 d_shmatprototype=''
489 shmattype=''
490 d_shmctl=''
491 d_shmdt=''
492 d_shmget=''
493 d_sigaction=''
494 d_sigsetjmp=''
495 d_msg_ctrunc=''
496 d_msg_dontroute=''
497 d_msg_oob=''
498 d_msg_peek=''
499 d_msg_proxy=''
500 d_oldsock=''
501 d_scm_rights=''
502 d_socket=''
503 d_sockpair=''
504 sockethdr=''
505 socketlib=''
506 d_sqrtl=''
507 d_statblks=''
508 d_statfs_f_flags=''
509 d_statfs_s=''
510 d_fstatvfs=''
511 d_statvfs=''
512 d_stdio_cnt_lval=''
513 d_stdio_ptr_lval=''
514 d_stdiobase=''
515 d_stdstdio=''
516 stdio_base=''
517 stdio_bufsiz=''
518 stdio_cnt=''
519 stdio_filbuf=''
520 stdio_ptr=''
521 d_index=''
522 d_strchr=''
523 d_strcoll=''
524 d_strctcpy=''
525 d_strerrm=''
526 d_strerror=''
527 d_sysernlst=''
528 d_syserrlst=''
529 d_strtod=''
530 d_strtol=''
531 d_strtoul=''
532 d_strxfrm=''
533 d_symlink=''
534 d_syscall=''
535 d_sysconf=''
536 d_system=''
537 d_tcgetpgrp=''
538 d_tcsetpgrp=''
539 d_telldirproto=''
540 d_time=''
541 timetype=''
542 clocktype=''
543 d_times=''
544 d_truncate=''
545 d_tzname=''
546 d_umask=''
547 d_semctl_semid_ds=''
548 d_semctl_semun=''
549 d_union_semun=''
550 d_ustat=''
551 d_vfork=''
552 usevfork=''
553 d_voidsig=''
554 signal_t=''
555 d_volatile=''
556 d_charvspr=''
557 d_vprintf=''
558 d_wait4=''
559 d_waitpid=''
560 d_wcstombs=''
561 d_wctomb=''
562 dlext=''
563 cccdlflags=''
564 ccdlflags=''
565 dlsrc=''
566 ld=''
567 lddlflags=''
568 usedl=''
569 doublesize=''
570 ebcdic=''
571 fflushNULL=''
572 fflushall=''
573 fpossize=''
574 fpostype=''
575 gidformat=''
576 gidsign=''
577 gidsize=''
578 gidtype=''
579 groupstype=''
580 h_fcntl=''
581 h_sysfile=''
582 i_arpainet=''
583 db_hashtype=''
584 db_prefixtype=''
585 i_db=''
586 i_dbm=''
587 i_rpcsvcdbm=''
588 d_dirnamlen=''
589 direntrytype=''
590 i_dirent=''
591 i_dld=''
592 i_dlfcn=''
593 i_fcntl=''
594 i_float=''
595 i_gdbm=''
596 d_grpasswd=''
597 i_grp=''
598 d_int64t=''
599 i_inttypes=''
600 i_limits=''
601 i_locale=''
602 i_machcthr=''
603 i_malloc=''
604 i_math=''
605 i_memory=''
606 i_mntent=''
607 i_ndbm=''
608 i_netdb=''
609 i_neterrno=''
610 i_netinettcp=''
611 i_niin=''
612 i_sysin=''
613 i_poll=''
614 i_pthread=''
615 d_pwage=''
616 d_pwchange=''
617 d_pwclass=''
618 d_pwcomment=''
619 d_pwexpire=''
620 d_pwgecos=''
621 d_pwpasswd=''
622 d_pwquota=''
623 i_pwd=''
624 i_sfio=''
625 i_shadow=''
626 i_socks=''
627 i_stddef=''
628 i_stdlib=''
629 i_string=''
630 strings=''
631 i_sysaccess=''
632 i_sysdir=''
633 i_sysfile=''
634 d_voidtty=''
635 i_bsdioctl=''
636 i_sysfilio=''
637 i_sysioctl=''
638 i_syssockio=''
639 i_sysmount=''
640 i_sysndir=''
641 i_sysparam=''
642 i_sysresrc=''
643 i_syssecrt=''
644 i_sysselct=''
645 i_sysstat=''
646 i_sysstatfs=''
647 i_sysstatvfs=''
648 i_systimes=''
649 i_systypes=''
650 i_sysuio=''
651 i_sysun=''
652 i_sysvfs=''
653 i_syswait=''
654 i_sgtty=''
655 i_termio=''
656 i_termios=''
657 i_systime=''
658 i_systimek=''
659 i_time=''
660 timeincl=''
661 i_unistd=''
662 i_ustat=''
663 i_utime=''
664 i_values=''
665 i_stdarg=''
666 i_varargs=''
667 i_varhdr=''
668 i_vfork=''
669 installprefix=''
670 installprefixexp=''
671 installstyle=''
672 installusrbinperl=''
673 intsize=''
674 longsize=''
675 shortsize=''
676 d_fpos64_t=''
677 d_off64_t=''
678 libc=''
679 ldlibpthname=''
680 libperl=''
681 shrpenv=''
682 useshrplib=''
683 glibpth=''
684 libpth=''
685 loclibpth=''
686 plibpth=''
687 xlibpth=''
688 ignore_versioned_solibs=''
689 libs=''
690 lns=''
691 d_PRIEldbl=''
692 d_PRIFldbl=''
693 d_PRIGldbl=''
694 d_PRIeldbl=''
695 d_PRIfldbl=''
696 d_PRIgldbl=''
697 sPRIEldbl=''
698 sPRIFldbl=''
699 sPRIGldbl=''
700 sPRIeldbl=''
701 sPRIfldbl=''
702 sPRIgldbl=''
703 lseeksize=''
704 lseektype=''
705 make_set_make=''
706 d_mymalloc=''
707 freetype=''
708 mallocobj=''
709 mallocsrc=''
710 malloctype=''
711 usemymalloc=''
712 installman1dir=''
713 man1dir=''
714 man1direxp=''
715 man1ext=''
716 installman3dir=''
717 man3dir=''
718 man3direxp=''
719 man3ext=''
720 huge=''
721 large=''
722 medium=''
723 models=''
724 small=''
725 split=''
726 modetype=''
727 multiarch=''
728 mydomain=''
729 myhostname=''
730 phostname=''
731 c=''
732 n=''
733 d_eofnblk=''
734 eagain=''
735 o_nonblock=''
736 rd_nodata=''
737 netdb_hlen_type=''
738 netdb_host_type=''
739 netdb_name_type=''
740 netdb_net_type=''
741 groupcat=''
742 hostcat=''
743 passcat=''
744 orderlib=''
745 ranlib=''
746 package=''
747 spackage=''
748 pager=''
749 apiversion=''
750 patchlevel=''
751 subversion=''
752 version=''
753 perladmin=''
754 perlpath=''
755 i16size=''
756 i16type=''
757 i32size=''
758 i32type=''
759 i64size=''
760 i64type=''
761 i8size=''
762 i8type=''
763 ivsize=''
764 ivtype=''
765 nvsize=''
766 nvtype=''
767 u16size=''
768 u16type=''
769 u32size=''
770 u32type=''
771 u64size=''
772 u64type=''
773 u8size=''
774 u8type=''
775 uvsize=''
776 uvtype=''
777 ivdformat=''
778 uvoformat=''
779 uvuformat=''
780 uvxformat=''
781 pidtype=''
782 prefix=''
783 prefixexp=''
784 installprivlib=''
785 privlib=''
786 privlibexp=''
787 prototype=''
788 ptrsize=''
789 d_PRIX64=''
790 d_PRId64=''
791 d_PRIi64=''
792 d_PRIo64=''
793 d_PRIu64=''
794 d_PRIx64=''
795 sPRIX64=''
796 sPRId64=''
797 sPRIi64=''
798 sPRIo64=''
799 sPRIu64=''
800 sPRIx64=''
801 quadcase=''
802 quadtype=''
803 uquadtype=''
804 drand01=''
805 randbits=''
806 randfunc=''
807 randseedtype=''
808 seedfunc=''
809 installscript=''
810 scriptdir=''
811 scriptdirexp=''
812 selectminbits=''
813 selecttype=''
814 sh=''
815 sig_count=''
816 sig_name=''
817 sig_name_init=''
818 sig_num=''
819 sig_num_init=''
820 installsitearch=''
821 sitearch=''
822 sitearchexp=''
823 installsitebin=''
824 sitebin=''
825 sitebinexp=''
826 installsitelib=''
827 sitelib=''
828 sitelibexp=''
829 siteprefix=''
830 siteprefixexp=''
831 sizetype=''
832 so=''
833 sharpbang=''
834 shsharp=''
835 spitshell=''
836 src=''
837 ssizetype=''
838 startperl=''
839 startsh=''
840 stdchar=''
841 d_stdio_stream_array=''
842 stdio_stream_array=''
843 d_strtoull=''
844 sysman=''
845 trnl=''
846 uidformat=''
847 uidsign=''
848 uidsize=''
849 uidtype=''
850 archname64=''
851 use64bits=''
852 uselargefiles=''
853 uselongdouble=''
854 uselonglong=''
855 usemorebits=''
856 usemultiplicity=''
857 nm_opt=''
858 nm_so_opt=''
859 runnm=''
860 usenm=''
861 useperlio=''
862 usesocks=''
863 d_oldpthreads=''
864 usethreads=''
865 incpath=''
866 mips_type=''
867 usrinc=''
868 d_vendorbin=''
869 installvendorbin=''
870 vendorbin=''
871 vendorbinexp=''
872 d_vendorlib=''
873 installvendorlib=''
874 vendorlib=''
875 vendorlibexp=''
876 usevendorprefix=''
877 vendorprefix=''
878 vendorprefixexp=''
879 defvoidused=''
880 voidflags=''
881 pm_apiversion=''
882 xs_apiversion=''
883 CONFIG=''
884
885 define='define'
886 undef='undef'
887 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
888 rmlist=''
889
890 : We must find out about Eunice early
891 eunicefix=':'
892 if test -f /etc/unixtovms; then
893         eunicefix=/etc/unixtovms
894 fi
895 if test -f /etc/unixtovms.exe; then
896         eunicefix=/etc/unixtovms.exe
897 fi
898
899 i_whoami=''
900 : Possible local include directories to search.
901 : Set locincpth to "" in a hint file to defeat local include searches.
902 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
903 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
904 :
905 : no include file wanted by default
906 inclwanted=''
907
908 : list of known cpp symbols, sorted alphabetically
909 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
910 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
911 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
912 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
913 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
914 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
915 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4 SVR5"
916 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
917 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
918 al="$al VMS Xenix286"
919 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
920 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
921 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
922 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
923 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
924 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
925 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
926 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
927 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
928 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
929 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
930 al="$al __SVR4_2__ __UMAXV__"
931 al="$al ____386BSD____ __alpha __alpha__ __amiga"
932 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
933 al="$al __host_mips__"
934 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
935 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
936 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
937 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
938 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
939 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
940 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
941 al="$al __mc88100 __mc88100__ __mips __mips__"
942 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
943 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
944 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
945 al="$al _host_mips _mips _unix"
946 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
947 al="$al apollo ardent att386 att3b"
948 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
949 al="$al cadmus clipper concurrent convex cray ctix"
950 al="$al dmert encore gcos gcx gimpel gould"
951 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
952 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
953 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
954 al="$al i186 i286 i386 i486 i8086"
955 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
956 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
957 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
958 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
959 al="$al mc88000 mc88100 merlin mert mips mvs n16"
960 al="$al ncl_el ncl_mr"
961 al="$al news1500 news1700 news1800 news1900 news3700"
962 al="$al news700 news800 news900 ns16000 ns32000"
963 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
964 al="$al parisc pc532 pdp11 plexus posix pyr"
965 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
966 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
967 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
968 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
969 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
970 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
971 al="$al xenix z8000"
972
973 : Trailing extension.  Override this in a hint file, if needed.
974 _exe=''
975 : Extra object files, if any, needed on this platform.
976 archobjs=''
977 groupstype=''
978 : change the next line if compiling for Xenix/286 on Xenix/386
979 xlibpth='/usr/lib/386 /lib/386'
980
981 : Possible local library directories to search.
982 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
983 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
984
985 : general looking path for locating libraries
986 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
987 glibpth="$glibpth /lib /usr/lib $xlibpth"
988 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
989 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
990
991 : Private path used by Configure to find libraries.  Its value
992 : is prepended to libpth. This variable takes care of special
993 : machines, like the mips.  Usually, it should be empty.
994 plibpth=''
995
996 : default library list
997 libswanted=''
998 : some systems want to use only the non-versioned libso:s
999 ignore_versioned_solibs=''
1000 : full support for void wanted by default
1001 defvoidused=15
1002
1003 : set useposix=false in your hint file to disable the POSIX extension.
1004 useposix=true
1005 : set useopcode=false in your hint file to disable the Opcode extension.
1006 useopcode=true
1007 : set usemultiplicity on the Configure command line to enable multiplicity.
1008 : set usesocks on the Configure command line to enable socks.
1009 : set usethreads on the Configure command line to enable threads.
1010 : List of libraries we want.
1011 : If anyone needs -lnet, put it in a hint file.
1012 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
1013 libswanted="$libswanted dld ld sun m c cposix posix"
1014 libswanted="$libswanted ndir dir crypt sec"
1015 libswanted="$libswanted ucb bsd BSD PW x"
1016 : We probably want to search /usr/shlib before most other libraries.
1017 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1018 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1019 glibpth="/usr/shlib $glibpth"
1020 : Do not use vfork unless overridden by a hint file.
1021 usevfork=false
1022
1023 : Find the basic shell for Bourne shell scripts
1024 case "$sh" in
1025 '')
1026         case "$SYSTYPE" in
1027         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1028         *) xxx='/bin/sh';;
1029         esac
1030         if test -f "$xxx"; then
1031                 sh="$xxx"
1032         else
1033                 : Build up a list and do a single loop so we can 'break' out.
1034                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1035                 for xxx in sh bash ksh pdksh ash; do
1036                         for p in $pth; do
1037                                 try="$try ${p}/${xxx}"
1038                         done
1039                 done
1040                 for xxx in $try; do
1041                         if test -f "$xxx"; then
1042                                 sh="$xxx";
1043                                 break
1044                         elif test -f "$xxx.exe"; then
1045                                 sh="$xxx";
1046                                 break
1047                         fi
1048                 done
1049         fi
1050         ;;
1051 esac
1052
1053 case "$sh" in
1054 '')     cat <<EOM >&2
1055 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1056
1057 Usually it's in /bin/sh.  How did you even get this far?
1058 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1059 we'll try to straighten this all out.
1060 EOM
1061         exit 1
1062         ;;
1063 esac
1064
1065 : see if sh knows # comments
1066 if `$sh -c '#' >/dev/null 2>&1`; then
1067         shsharp=true
1068         spitshell=cat
1069         xcat=/bin/cat
1070         test -f $xcat || xcat=/usr/bin/cat
1071         echo "#!$xcat" >try
1072         $eunicefix try
1073         chmod +x try
1074         ./try > today
1075         if test -s today; then
1076                 sharpbang='#!'
1077         else
1078                 echo "#! $xcat" > try
1079                 $eunicefix try
1080                 chmod +x try
1081                 ./try > today
1082                 if test -s today; then
1083                         sharpbang='#! '
1084                 else
1085                         sharpbang=': use '
1086                 fi
1087         fi
1088 else
1089         echo " "
1090         echo "Your $sh doesn't grok # comments--I will strip them later on."
1091         shsharp=false
1092         cd ..
1093         echo "exec grep -v '^[  ]*#'" >spitshell
1094         chmod +x spitshell
1095         $eunicefix spitshell
1096         spitshell=`pwd`/spitshell
1097         cd UU
1098         echo "I presume that if # doesn't work, #! won't work either!"
1099         sharpbang=': use '
1100 fi
1101 rm -f try today
1102
1103 : figure out how to guarantee sh startup
1104 case "$startsh" in
1105 '') startsh=${sharpbang}${sh} ;;
1106 *)
1107 esac
1108 cat >try <<EOSS
1109 $startsh
1110 set abc
1111 test "$?abc" != 1
1112 EOSS
1113
1114 chmod +x try
1115 $eunicefix try
1116 if ./try; then
1117         : echo "Yup, it does."
1118 else
1119         echo "Hmm... '$startsh' does not guarantee sh startup..."
1120         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1121 fi
1122 rm -f try
1123
1124
1125 : Save command line options in file UU/cmdline.opt for later use in
1126 : generating config.sh.
1127 cat > cmdline.opt <<EOSH
1128 # Configure command line arguments.
1129 config_arg0='$0'
1130 config_args='$*'
1131 config_argc=$#
1132 EOSH
1133 argn=1
1134 for arg in "$@"; do
1135         cat >>cmdline.opt <<EOSH
1136 config_arg$argn='$arg'
1137 EOSH
1138         argn=`expr $argn + 1`
1139 done
1140
1141 : produce awk script to parse command line options
1142 cat >options.awk <<'EOF'
1143 BEGIN {
1144         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1145
1146         len = length(optstr);
1147         for (i = 1; i <= len; i++) {
1148                 c = substr(optstr, i, 1);
1149                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1150                 if (a == ":") {
1151                         arg[c] = 1;
1152                         i++;
1153                 }
1154                 opt[c] = 1;
1155         }
1156 }
1157 {
1158         expect = 0;
1159         str = $0;
1160         if (substr(str, 1, 1) != "-") {
1161                 printf("'%s'\n", str);
1162                 next;
1163         }
1164         len = length($0);
1165         for (i = 2; i <= len; i++) {
1166                 c = substr(str, i, 1);
1167                 if (!opt[c]) {
1168                         printf("-%s\n", substr(str, i));
1169                         next;
1170                 }
1171                 printf("-%s\n", c);
1172                 if (arg[c]) {
1173                         if (i < len)
1174                                 printf("'%s'\n", substr(str, i + 1));
1175                         else
1176                                 expect = 1;
1177                         next;
1178                 }
1179         }
1180 }
1181 END {
1182         if (expect)
1183                 print "?";
1184 }
1185 EOF
1186
1187 : process the command line options
1188 set X `for arg in "$@"; do echo "X$arg"; done |
1189         sed -e s/X// | awk -f options.awk`
1190 eval "set $*"
1191 shift
1192 rm -f options.awk
1193
1194 : set up default values
1195 fastread=''
1196 reuseval=false
1197 config_sh=''
1198 alldone=''
1199 error=''
1200 silent=''
1201 extractsh=''
1202 override=''
1203 knowitall=''
1204 rm -f optdef.sh posthint.sh
1205 cat >optdef.sh <<EOS
1206 $startsh
1207 EOS
1208
1209
1210 : option parsing
1211 while test $# -gt 0; do
1212         case "$1" in
1213         -d) shift; fastread=yes;;
1214         -e) shift; alldone=cont;;
1215         -f)
1216                 shift
1217                 cd ..
1218                 if test -r "$1"; then
1219                         config_sh="$1"
1220                 else
1221                         echo "$me: cannot read config file $1." >&2
1222                         error=true
1223                 fi
1224                 cd UU
1225                 shift;;
1226         -h) shift; error=true;;
1227         -r) shift; reuseval=true;;
1228         -s) shift; silent=true; realsilent=true;;
1229         -E) shift; alldone=exit;;
1230         -K) shift; knowitall=true;;
1231         -O) shift; override=true;;
1232         -S) shift; silent=true; extractsh=true;;
1233         -D)
1234                 shift
1235                 case "$1" in
1236                 *=)
1237                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1238                         echo "$me: ignoring -D $1" >&2
1239                         ;;
1240                 *=*) echo "$1" | \
1241                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1242                 *) echo "$1='define'" >> optdef.sh;;
1243                 esac
1244                 shift
1245                 ;;
1246         -U)
1247                 shift
1248                 case "$1" in
1249                 *=) echo "$1" >> optdef.sh;;
1250                 *=*)
1251                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1252                         echo "$me: ignoring -U $1" >&2
1253                         ;;
1254                 *) echo "$1='undef'" >> optdef.sh;;
1255                 esac
1256                 shift
1257                 ;;
1258         -A)
1259             shift
1260             xxx=''
1261             yyy="$1"
1262             zzz=''
1263             uuu=undef
1264             case "$yyy" in
1265             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1266                  case "$zzz" in
1267                  *:*) zzz='' ;;
1268                  *)   xxx=append
1269                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1270                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1271                  esac
1272                  ;;
1273             esac
1274             case "$xxx" in
1275             '')  case "$yyy" in
1276                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1277                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1278                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1279                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1280                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1281                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1282                  esac
1283                  ;;       
1284             esac
1285             case "$xxx" in
1286             append)
1287                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1288             clear)
1289                 echo "$yyy=''"                  >> posthint.sh ;;
1290             define)
1291                 case "$zzz" in
1292                 '') zzz=define ;;
1293                 esac
1294                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1295             eval)
1296                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1297             prepend)
1298                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1299             undef)
1300                 case "$zzz" in
1301                 '') zzz="$uuu" ;;
1302                 esac
1303                 echo "$yyy=$zzz"                >> posthint.sh ;;
1304             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1305             esac
1306             ;;
1307         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1308             exit 0;;
1309         --) break;;
1310         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1311         *) break;;
1312         esac
1313 done
1314
1315 case "$error" in
1316 true)
1317         cat >&2 <<EOM
1318 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1319                  [-U symbol] [-U symbol=] [-A command:symbol...]
1320   -d : use defaults for all answers.
1321   -e : go on without questioning past the production of config.sh.
1322   -f : specify an alternate default configuration file.
1323   -h : print this help message and exit (with an error status).
1324   -r : reuse C symbols value if possible (skips costly nm extraction).
1325   -s : silent mode, only echoes questions and essential information.
1326   -D : define symbol to have some value:
1327          -D symbol         symbol gets the value 'define'
1328          -D symbol=value   symbol gets the value 'value'
1329   -E : stop at the end of questions, after having produced config.sh.
1330   -K : do not use unless you know what you are doing.
1331   -O : let -D and -U override definitions from loaded configuration file.
1332   -S : perform variable substitutions on all .SH files (can mix with -f)
1333   -U : undefine symbol:
1334          -U symbol    symbol gets the value 'undef'
1335          -U symbol=   symbol gets completely empty
1336   -A : manipulate symbol after the platform specific hints have been applied:
1337          -A symbol=value                append " "value to symbol
1338          -A append:symbol=value         append value to symbol
1339          -A define:symbol=value         define symbol to have value
1340          -A clear:symbol                define symbol to be ''
1341          -A define:symbol               define symbol to be 'define'
1342          -A eval:symbol=value           define symbol to be eval of value
1343          -A prepend:symbol=value        prepend value to symbol
1344          -A undef:symbol                define symbol to be 'undef'
1345          -A undef:symbol=               define symbol to be ''
1346   -V : print version number and exit (with a zero status).
1347 EOM
1348         exit 1
1349         ;;
1350 esac
1351
1352 : Sanity checks
1353 case "$fastread$alldone" in
1354 yescont|yesexit) ;;
1355 *)
1356         if test ! -t 0; then
1357                 echo "Say 'sh Configure', not 'sh <Configure'"
1358                 exit 1
1359         fi
1360         ;;
1361 esac
1362
1363 exec 4>&1
1364 case "$silent" in
1365 true) exec 1>/dev/null;;
1366 esac
1367
1368 : run the defines and the undefines, if any, but leave the file out there...
1369 touch optdef.sh
1370 . ./optdef.sh
1371 : create the posthint manipulation script and leave the file out there...
1372 touch posthint.sh
1373
1374 : set package name
1375 package=perl5
1376 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1377 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1378 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1379 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1380 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1381 esac
1382
1383 : Some greps do not return status, grrr.
1384 echo "grimblepritz" >grimble
1385 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1386         contains=contains
1387 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1388         contains=grep
1389 else
1390         contains=contains
1391 fi
1392 rm -f grimble
1393 : the following should work in any shell
1394 case "$contains" in
1395 contains*)
1396         echo " "
1397         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1398         cat >contains <<'EOSS'
1399 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1400 EOSS
1401 chmod +x contains
1402 esac
1403
1404 : Find the path to the source tree
1405 case "$src" in
1406 '') case "$0" in
1407     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1408          case "$src" in
1409          /*)    ;;
1410          *)     src=`cd ../$src && pwd` ;;
1411          esac
1412          ;;
1413     *)   src='.';;
1414     esac;;
1415 esac
1416 case "$src" in
1417 '')     src=/
1418         rsrc=/
1419         ;;
1420 /*) rsrc="$src";;
1421 *) rsrc="../$src";;
1422 esac
1423 if test -f $rsrc/Configure && \
1424         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1425 then
1426    : found it, so we are ok.
1427 else
1428         rsrc=''
1429         for src in . .. ../.. ../../.. ../../../..; do
1430                 if test -f ../$src/Configure && \
1431                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1432                 then
1433                         rsrc=../$src
1434                         break
1435                 fi
1436         done
1437 fi
1438 case "$rsrc" in
1439 '')
1440         cat <<EOM >&4
1441
1442 Sorry, I can't seem to locate the source dir for $package.  Please start
1443 Configure with an explicit path -- i.e. /some/path/Configure.
1444
1445 EOM
1446         exit 1
1447         ;;
1448 ../.)   rsrc='..';;
1449 *)
1450         echo " "
1451         echo "Sources for $package found in \"$src\"." >&4
1452         ;;
1453 esac
1454
1455 : script used to extract .SH files with variable substitutions
1456 cat >extract <<'EOS'
1457 CONFIGDOTSH=true
1458 echo "Doing variable substitutions on .SH files..."
1459 if test -f $src/MANIFEST; then
1460         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1461 else
1462         echo "(Looking for .SH files under the source directory.)"
1463         set x `(cd $src; find . -name "*.SH" -print)`
1464 fi
1465 shift
1466 case $# in
1467 0) set x `(cd $src; echo *.SH)`; shift;;
1468 esac
1469 if test ! -f $src/$1; then
1470         shift
1471 fi
1472 mkdir_p='
1473 name=$1;
1474 create="";
1475 while test $name; do
1476         if test ! -d "$name"; then
1477                 create="$name $create";
1478                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1479                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1480         else
1481                 name="";
1482         fi;
1483 done;
1484 for file in $create; do
1485         mkdir $file;
1486 done
1487 '
1488 for file in $*; do
1489         case "$src" in
1490         ".")
1491                 case "$file" in
1492                 */*)
1493                         dir=`expr X$file : 'X\(.*\)/'`
1494                         file=`expr X$file : 'X.*/\(.*\)'`
1495                         (cd $dir && . ./$file)
1496                         ;;
1497                 *)
1498                         . ./$file
1499                         ;;
1500                 esac
1501                 ;;
1502         *)
1503                 case "$file" in
1504                 */*)
1505                         dir=`expr X$file : 'X\(.*\)/'`
1506                         file=`expr X$file : 'X.*/\(.*\)'`
1507                         (set x $dir; shift; eval $mkdir_p)
1508                         sh <$src/$dir/$file
1509                         ;;
1510                 *)
1511                         sh <$src/$file
1512                         ;;
1513                 esac
1514                 ;;
1515         esac
1516 done
1517 if test -f $src/config_h.SH; then
1518         if test ! -f config.h; then
1519         : oops, they left it out of MANIFEST, probably, so do it anyway.
1520         . $src/config_h.SH
1521         fi
1522 fi
1523 EOS
1524
1525 : extract files and exit if asked to do so
1526 case "$extractsh" in
1527 true)
1528         case "$realsilent" in
1529         true) ;;
1530         *) exec 1>&4;;
1531         esac
1532         case "$config_sh" in
1533         '') config_sh='config.sh';;
1534         esac
1535         echo " "
1536         echo "Fetching answers from $config_sh..."
1537         cd ..
1538         . $config_sh
1539         test "$override" && . ./optdef.sh
1540         echo " "
1541         . UU/extract
1542         rm -rf UU
1543         echo "Done."
1544         exit 0
1545         ;;
1546 esac
1547
1548 : Eunice requires " " instead of "", can you believe it
1549 echo " "
1550 : Here we go...
1551 echo "Beginning of configuration questions for $package."
1552
1553 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1554
1555 : first determine how to suppress newline on echo command
1556 echo " "
1557 echo "Checking echo to see how to suppress newlines..."
1558 (echo "hi there\c" ; echo " ") >.echotmp
1559 if $contains c .echotmp >/dev/null 2>&1 ; then
1560         echo "...using -n."
1561         n='-n'
1562         c=''
1563 else
1564         cat <<'EOM'
1565 ...using \c
1566 EOM
1567         n=''
1568         c='\c'
1569 fi
1570 echo $n "The star should be here-->$c"
1571 echo '*'
1572 rm -f .echotmp
1573
1574 : Now test for existence of everything in MANIFEST
1575 echo " "
1576 if test -f $rsrc/MANIFEST; then
1577         echo "First let's make sure your kit is complete.  Checking..." >&4
1578         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1579         rm -f missing
1580         tmppwd=`pwd`
1581         for filelist in x??; do
1582                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1583         done
1584         if test -s missing; then
1585                 cat missing >&4
1586                 cat >&4 <<'EOM'
1587
1588 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1589
1590 You have the option of continuing the configuration process, despite the
1591 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1592 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1593 and contact the author (perlbug@perl.com).
1594
1595 EOM
1596                 echo $n "Continue? [n] $c" >&4
1597                 read ans
1598                 case "$ans" in
1599                 y*)
1600                         echo "Continuing..." >&4
1601                         rm -f missing
1602                         ;;
1603                 *)
1604                         echo "ABORTING..." >&4
1605                         kill $$
1606                         ;;
1607                 esac
1608         else
1609                 echo "Looks good..."
1610         fi
1611 else
1612         echo "There is no MANIFEST file.  I hope your kit is complete !"
1613 fi
1614 rm -f missing x??
1615
1616 echo " "
1617 : Find the appropriate value for a newline for tr
1618 if test -n "$DJGPP"; then
1619        trnl='\012'
1620 fi
1621 if test X"$trnl" = X; then
1622         case "`echo foo|tr '\n' x 2>/dev/null`" in
1623         foox) trnl='\n' ;;
1624         esac
1625 fi
1626 if test X"$trnl" = X; then
1627         case "`echo foo|tr '\012' x 2>/dev/null`" in
1628         foox) trnl='\012' ;;
1629         esac
1630 fi
1631 if test X"$trnl" = X; then
1632         cat <<EOM >&2
1633
1634 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1635
1636 EOM
1637         exit 1
1638 fi
1639
1640 : compute the number of columns on the terminal for proper question formatting
1641 case "$COLUMNS" in
1642 '') COLUMNS='80';;
1643 esac
1644
1645 : set up the echo used in my read
1646 myecho="case \"\$xxxm\" in
1647 '') echo $n \"\$rp $c\" >&4;;
1648 *) case \"\$rp\" in
1649         '') echo $n \"[\$xxxm] $c\";;
1650         *)
1651                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1652                         echo \"\$rp\" >&4
1653                         echo $n \"[\$xxxm] $c\" >&4
1654                 else
1655                         echo $n \"\$rp [\$xxxm] $c\" >&4
1656                 fi
1657                 ;;
1658         esac;;
1659 esac"
1660
1661 : now set up to do reads with possible shell escape and default assignment
1662 cat <<EOSC >myread
1663 $startsh
1664 xxxm=\$dflt
1665 $myecho
1666 ans='!'
1667 case "\$fastread" in
1668 yes) case "\$dflt" in
1669         '') ;;
1670         *) ans='';
1671                 case "\$silent-\$rp" in
1672                 true-) ;;
1673                 *) echo " " >&4;;
1674                 esac;;
1675         esac;;
1676 *) case "\$silent" in
1677         true) case "\$rp" in
1678                 '') ans='';;
1679                 esac;;
1680         esac;;
1681 esac
1682 while expr "X\$ans" : "X!" >/dev/null; do
1683         read answ
1684         set x \$xxxm
1685         shift
1686         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1687         case  "\$answ" in
1688         "!")
1689                 sh 1>&4
1690                 echo " "
1691                 $myecho
1692                 ;;
1693         !*)
1694                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1695                 shift
1696                 sh 1>&4 -c "\$*"
1697                 echo " "
1698                 $myecho
1699                 ;;
1700         "\$ans")
1701                 case "\$ans" in
1702                 \\&*)
1703                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1704                         shift
1705                         case "\$1" in
1706                         -d)
1707                                 fastread=yes
1708                                 echo "(OK, I'll run with -d after this question.)" >&4
1709                                 ;;
1710                         -*)
1711                                 echo "*** Sorry, \$1 not supported yet." >&4
1712                                 ;;
1713                         esac
1714                         $myecho
1715                         ans=!
1716                         ;;
1717                 esac;;
1718         *)
1719                 case "\$aok" in
1720                 y)
1721                         echo "*** Substitution done -- please confirm."
1722                         xxxm="\$ans"
1723                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1724                         xxxm="\$ans"
1725                         ans=!
1726                         ;;
1727                 *)
1728                         echo "*** Error -- try again."
1729                         ans=!
1730                         ;;
1731                 esac
1732                 $myecho
1733                 ;;
1734         esac
1735         case "\$ans\$xxxm\$nostick" in
1736         '')
1737                 ans=!
1738                 $myecho
1739                 ;;
1740         esac
1741 done
1742 case "\$ans" in
1743 '') ans="\$xxxm";;
1744 esac
1745 EOSC
1746
1747 : create .config dir to save info across Configure sessions
1748 test -d ../.config || mkdir ../.config
1749 cat >../.config/README <<EOF
1750 This directory created by Configure to save information that should
1751 persist across sessions for $package.
1752
1753 You may safely delete it if you wish.
1754 EOF
1755
1756 : general instructions
1757 needman=true
1758 firsttime=true
1759 user=`(logname) 2>/dev/null`
1760 case "$user" in
1761 '') user=`whoami 2>&1`;;
1762 esac
1763 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1764         firsttime=false
1765         echo " "
1766         rp='Would you like to see the instructions?'
1767         dflt=n
1768         . ./myread
1769         case "$ans" in
1770         [yY]*) ;;
1771         *) needman=false;;
1772         esac
1773 fi
1774 if $needman; then
1775         cat <<EOH
1776
1777 This installation shell script will examine your system and ask you questions
1778 to determine how the perl5 package should be installed. If you get
1779 stuck on a question, you may use a ! shell escape to start a subshell or
1780 execute a command.  Many of the questions will have default answers in square
1781 brackets; typing carriage return will give you the default.
1782
1783 On some of the questions which ask for file or directory names you are allowed
1784 to use the ~name construct to specify the login directory belonging to "name",
1785 even if you don't have a shell which knows about that.  Questions where this is
1786 allowed will be marked "(~name ok)".
1787
1788 EOH
1789         rp=''
1790         dflt='Type carriage return to continue'
1791         . ./myread
1792         cat <<'EOH'
1793
1794 The prompter used in this script allows you to use shell variables and
1795 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1796 in the default answer, as if the default line was a set of arguments given to a
1797 script shell.  This means you may also use $* to repeat the whole default line,
1798 so you do not have to re-type everything to add something to the default.
1799
1800 Everytime there is a substitution, you will have to confirm.  If there is an
1801 error (e.g. an unmatched backtick), the default answer will remain unchanged
1802 and you will be prompted again.
1803
1804 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1805 the questions and use the computed defaults (or the previous answers if there
1806 was already a config.sh file). Type 'Configure -h' for a list of options.
1807 You may also start interactively and then answer '& -d' at any prompt to turn
1808 on the non-interactive behaviour for the remainder of the execution.
1809
1810 EOH
1811         . ./myread
1812         cat <<EOH
1813
1814 Much effort has been expended to ensure that this shell script will run on any
1815 Unix system.  If despite that it blows up on yours, your best bet is to edit
1816 Configure and run it again.  If you can't run Configure for some reason,
1817 you'll have to generate a config.sh file by hand.  Whatever problems you
1818 have, let me (perlbug@perl.com) know how I blew it.
1819
1820 This installation script affects things in two ways:
1821
1822 1) it may do direct variable substitutions on some of the files included
1823    in this kit.
1824 2) it builds a config.h file for inclusion in C programs.  You may edit
1825    any of these files as the need arises after running this script.
1826
1827 If you make a mistake on a question, there is no easy way to back up to it
1828 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1829 files.  Configure will offer to let you do this before it runs the SH files.
1830
1831 EOH
1832         dflt='Type carriage return to continue'
1833         . ./myread
1834         case "$firsttime" in
1835         true) echo $user >>../.config/instruct;;
1836         esac
1837 fi
1838
1839 : find out where common programs are
1840 echo " "
1841 echo "Locating common programs..." >&4
1842 cat <<EOSC >loc
1843 $startsh
1844 case \$# in
1845 0) exit 1;;
1846 esac
1847 thing=\$1
1848 shift
1849 dflt=\$1
1850 shift
1851 for dir in \$*; do
1852         case "\$thing" in
1853         .)
1854         if test -d \$dir/\$thing; then
1855                 echo \$dir
1856                 exit 0
1857         fi
1858         ;;
1859         *)
1860         for thisthing in \$dir/\$thing; do
1861                 : just loop through to pick last item
1862         done
1863         if test -f \$thisthing; then
1864                 echo \$thisthing
1865                 exit 0
1866         elif test -f \$dir/\$thing.exe; then
1867                 if test -n "$DJGPP"; then
1868                         echo \$dir/\$thing.exe
1869                 else
1870                         : on Eunice apparently
1871                         echo \$dir/\$thing
1872                 fi
1873                 exit 0
1874         fi
1875         ;;
1876         esac
1877 done
1878 echo \$dflt
1879 exit 1
1880 EOSC
1881 chmod +x loc
1882 $eunicefix loc
1883 loclist="
1884 awk
1885 cat
1886 comm
1887 cp
1888 echo
1889 expr
1890 grep
1891 ls
1892 make
1893 mkdir
1894 rm
1895 sed
1896 sort
1897 touch
1898 tr
1899 uniq
1900 "
1901 trylist="
1902 Mcc
1903 ar
1904 byacc
1905 cpp
1906 csh
1907 date
1908 egrep
1909 gzip
1910 less
1911 ln
1912 more
1913 nm
1914 nroff
1915 pg
1916 test
1917 uname
1918 zip
1919 "
1920 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1921 pth="$pth /lib /usr/lib"
1922 for file in $loclist; do
1923         eval xxx=\$$file
1924         case "$xxx" in
1925         /*|?:[\\/]*)
1926                 if test -f "$xxx"; then
1927                         : ok
1928                 else
1929                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1930                         xxx=`./loc $file $file $pth`
1931                 fi
1932                 ;;
1933         '') xxx=`./loc $file $file $pth`;;
1934         *) xxx=`./loc $xxx $xxx $pth`;;
1935         esac
1936         eval $file=$xxx
1937         eval _$file=$xxx
1938         case "$xxx" in
1939         /*)
1940                 echo $file is in $xxx.
1941                 ;;
1942         ?:[\\/]*)
1943                 echo $file is in $xxx.
1944                 ;;
1945         *)
1946                 echo "I don't know where '$file' is, and my life depends on it." >&4
1947                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1948                 exit 1
1949                 ;;
1950         esac
1951 done
1952 echo " "
1953 echo "Don't worry if any of the following aren't found..."
1954 say=offhand
1955 for file in $trylist; do
1956         eval xxx=\$$file
1957         case "$xxx" in
1958         /*|?:[\\/]*)
1959                 if test -f "$xxx"; then
1960                         : ok
1961                 else
1962                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1963                         xxx=`./loc $file $file $pth`
1964                 fi
1965                 ;;
1966         '') xxx=`./loc $file $file $pth`;;
1967         *) xxx=`./loc $xxx $xxx $pth`;;
1968         esac
1969         eval $file=$xxx
1970         eval _$file=$xxx
1971         case "$xxx" in
1972         /*)
1973                 echo $file is in $xxx.
1974                 ;;
1975         ?:[\\/]*)
1976                 echo $file is in $xxx.
1977                 ;;
1978         *)
1979                 echo "I don't see $file out there, $say."
1980                 say=either
1981                 ;;
1982         esac
1983 done
1984 case "$egrep" in
1985 egrep)
1986         echo "Substituting grep for egrep."
1987         egrep=$grep
1988         ;;
1989 esac
1990 case "$ln" in
1991 ln)
1992         echo "Substituting cp for ln."
1993         ln=$cp
1994         ;;
1995 esac
1996 case "$test" in
1997 test)
1998         echo "Hopefully test is built into your sh."
1999         ;;
2000 *)
2001         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2002                 echo "Using the test built into your sh."
2003                 test=test
2004                 _test=test
2005         fi
2006         ;;
2007 esac
2008 case "$echo" in
2009 echo)
2010         echo "Hopefully echo is built into your sh."
2011         ;;
2012 '') ;;
2013 *)
2014         echo " "
2015 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2016         $echo $n "hi there$c" >foo1
2017         echo $n "hi there$c" >foo2
2018         if cmp foo1 foo2 >/dev/null 2>&1; then
2019                 echo "They are compatible.  In fact, they may be identical."
2020         else
2021                 case "$n" in
2022                 '-n') n='' c='\c';;
2023                 *) n='-n' c='';;
2024                 esac
2025                 cat <<FOO
2026 They are not compatible!  You are probably running ksh on a non-USG system.
2027 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2028 have echo built in and we may have to run some Bourne shell scripts.  That
2029 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2030
2031 FOO
2032                 $echo $n "The star should be here-->$c"
2033                 $echo "*"
2034         fi
2035         $rm -f foo1 foo2
2036         ;;
2037 esac
2038
2039 : determine whether symbolic links are supported
2040 echo " "
2041 $touch blurfl
2042 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2043         echo "Symbolic links are supported." >&4
2044         lns="$ln -s"
2045 else
2046         echo "Symbolic links are NOT supported." >&4
2047         lns="$ln"
2048 fi
2049 $rm -f blurfl sym
2050
2051 : see whether [:lower:] and [:upper:] are supported character classes
2052 echo " "
2053 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2054 ABYZ)
2055         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2056         up='[:upper:]'
2057         low='[:lower:]'
2058         ;;
2059 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2060         # (0xc9 and 0xd1), therefore that is a nice testing point.
2061         if test "X$up" = X -o "X$low" = X; then
2062             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2063             ij) up='[A-Z]'
2064                 low='[a-z]'
2065                 ;;
2066             esac
2067         fi
2068         if test "X$up" = X -o "X$low" = X; then
2069             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2070             ij) up='A-Z'
2071                 low='a-z'
2072                 ;;
2073             esac
2074         fi
2075         if test "X$up" = X -o "X$low" = X; then
2076             case "`echo IJ | od -x 2>/dev/null`" in
2077             *C9D1*|*c9d1*)
2078                 echo "Hey, this might be EBCDIC." >&4
2079                 if test "X$up" = X -o "X$low" = X; then
2080                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2081                     ij) up='[A-IJ-RS-Z]'
2082                         low='[a-ij-rs-z]'
2083                         ;;
2084                     esac
2085                 fi
2086                 if test "X$up" = X -o "X$low" = X; then
2087                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2088                     ij) up='A-IJ-RS-Z'
2089                         low='a-ij-rs-z'
2090                         ;;
2091                     esac
2092                 fi
2093                 ;;
2094             esac
2095         fi
2096 esac
2097 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2098 ij)
2099     echo "Using $up and $low to convert case." >&4
2100     ;;
2101 *)
2102     echo "I don't know how to translate letters from upper to lower case." >&4
2103     echo "Your tr is not acting any way I know of." >&4
2104     exit 1
2105     ;;
2106 esac
2107 : set up the translation script tr, must be called with ./tr of course
2108 cat >tr <<EOSC
2109 $startsh
2110 case "\$1\$2" in
2111 '[A-Z][a-z]') exec $tr '$up' '$low';;
2112 '[a-z][A-Z]') exec $tr '$low' '$up';;
2113 esac
2114 exec $tr "\$@"
2115 EOSC
2116 chmod +x tr
2117 $eunicefix tr
2118
2119 : Try to determine whether config.sh was made on this system
2120 case "$config_sh" in
2121 '')
2122 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2123 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2124 # because the A-Z/a-z are not consecutive.
2125 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2126         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2127 newmyuname="$myuname"
2128 dflt=n
2129 case "$knowitall" in
2130 '')
2131         if test -f ../config.sh; then
2132                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2133                         eval "`grep myuname= ../config.sh`"
2134                 fi
2135                 if test "X$myuname" = "X$newmyuname"; then
2136                         dflt=y
2137                 fi
2138         fi
2139         ;;
2140 *) dflt=y;;
2141 esac
2142
2143 : Get old answers from old config file if Configure was run on the
2144 : same system, otherwise use the hints.
2145 hint=default
2146 cd ..
2147 if test -f config.sh; then
2148         echo " "
2149         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2150         . UU/myread
2151         case "$ans" in
2152         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2153         *)  echo "Fetching default answers from your old config.sh file..." >&4
2154                 tmp_n="$n"
2155                 tmp_c="$c"
2156                 tmp_sh="$sh"
2157                 . ./config.sh
2158                 cp config.sh UU
2159                 n="$tmp_n"
2160                 c="$tmp_c"
2161                 : Older versions did not always set $sh.  Catch re-use of such
2162                 : an old config.sh.
2163                 case "$sh" in
2164                 '') sh="$tmp_sh" ;;
2165                 esac
2166                 hint=previous
2167                 ;;
2168         esac
2169 fi
2170 if test ! -f config.sh; then
2171         $cat <<EOM
2172
2173 First time through, eh?  I have some defaults handy for some systems
2174 that need some extra help getting the Configure answers right:
2175
2176 EOM
2177         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2178         dflt=''
2179         : Half the following guesses are probably wrong... If you have better
2180         : tests or hints, please send them to perlbug@perl.com
2181         : The metaconfig authors would also appreciate a copy...
2182         $test -f /irix && osname=irix
2183         $test -f /xenix && osname=sco_xenix
2184         $test -f /dynix && osname=dynix
2185         $test -f /dnix && osname=dnix
2186         $test -f /lynx.os && osname=lynxos
2187         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2188         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2189         $test -f /bin/mips && /bin/mips && osname=mips
2190         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2191                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2192         $test -d /usr/apollo/bin && osname=apollo
2193         $test -f /etc/saf/_sactab && osname=svr4
2194         $test -d /usr/include/minix && osname=minix
2195         if $test -d /MachTen -o -d /MachTen_Folder; then
2196                 osname=machten
2197                 if $test -x /sbin/version; then
2198                         osvers=`/sbin/version | $awk '{print $2}' |
2199                         $sed -e 's/[A-Za-z]$//'`
2200                 elif $test -x /usr/etc/version; then
2201                         osvers=`/usr/etc/version | $awk '{print $2}' |
2202                         $sed -e 's/[A-Za-z]$//'`
2203                 else
2204                         osvers="$2.$3"
2205                 fi
2206         fi
2207        $test -f /sys/posix.dll &&
2208                $test -f /usr/bin/what &&
2209                set X `/usr/bin/what /sys/posix.dll` &&
2210                $test "$3" = UWIN &&
2211                osname=uwin &&
2212                osvers="$5"
2213         if $test -f $uname; then
2214                 set X $myuname
2215                 shift
2216
2217                 case "$5" in
2218                 fps*) osname=fps ;;
2219                 mips*)
2220                         case "$4" in
2221                         umips) osname=umips ;;
2222                         *) osname=mips ;;
2223                         esac;;
2224                 [23]100) osname=mips ;;
2225                 next*) osname=next ;;
2226                 i386*)
2227                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2228                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2229                                 osname='sco'
2230                                 osvers=$tmp
2231                         elif $test -f /etc/kconfig; then
2232                                 osname=isc
2233                                 if test "$lns" = "$ln -s"; then
2234                                         osvers=4
2235                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2236                                         osvers=3
2237                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2238                                         osvers=2
2239                                 fi
2240                         fi
2241                         tmp=''
2242                         ;;
2243                 pc*)
2244                         if test -n "$DJGPP"; then
2245                                 osname=dos
2246                                 osvers=djgpp
2247                         fi
2248                         ;;
2249                 esac
2250
2251                 case "$1" in
2252                 aix) osname=aix
2253                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2254                         case "$tmp" in
2255                         'not found') osvers="$4"."$3" ;;
2256                         '<3240'|'<>3240') osvers=3.2.0 ;;
2257                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2258                         '=3250'|'>3250') osvers=3.2.5 ;;
2259                         *) osvers=$tmp;;
2260                         esac
2261                         ;;
2262                 *dc.osx) osname=dcosx
2263                         osvers="$3"
2264                         ;;
2265                 dnix) osname=dnix
2266                         osvers="$3"
2267                         ;;
2268                 domainos) osname=apollo
2269                         osvers="$3"
2270                         ;;
2271                 dgux) osname=dgux 
2272                         osvers="$3"
2273                         ;;
2274                 dynixptx*) osname=dynixptx
2275                         osvers=`echo "$4"|sed 's/^v//'`
2276                         ;;
2277                 freebsd) osname=freebsd 
2278                         osvers="$3" ;;
2279                 genix) osname=genix ;;
2280                 hp*) osname=hpux 
2281                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2282                         ;;
2283                 irix*) osname=irix
2284                         case "$3" in
2285                         4*) osvers=4 ;;
2286                         5*) osvers=5 ;;
2287                         *)      osvers="$3" ;;
2288                         esac
2289                         ;;
2290                 linux) osname=linux
2291                         case "$3" in
2292                         *)      osvers="$3" ;;
2293                         esac
2294                         ;;
2295                 MiNT) osname=mint
2296                         ;;
2297                 netbsd*) osname=netbsd
2298                         osvers="$3"
2299                         ;;
2300                 news-os) osvers="$3"
2301                         case "$3" in
2302                         4*) osname=newsos4 ;;
2303                         *) osname=newsos ;;
2304                         esac
2305                         ;;
2306                 bsd386) osname=bsd386
2307                         osvers=`$uname -r`
2308                         ;;
2309                 POSIX-BC | posix-bc ) osname=posix-bc
2310                         osvers="$3"
2311                         ;;
2312                 powerux | power_ux | powermax_os | powermaxos | \
2313                 powerunix | power_unix) osname=powerux
2314                         osvers="$3"
2315                         ;;
2316                 next*) osname=next ;;
2317                 solaris) osname=solaris
2318                         case "$3" in
2319                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2320                         *)      osvers="$3" ;;
2321                         esac
2322                         ;;
2323                 sunos) osname=sunos
2324                         case "$3" in
2325                         5*) osname=solaris
2326                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2327                         *)      osvers="$3" ;;
2328                         esac
2329                         ;;
2330                 titanos) osname=titanos
2331                         case "$3" in
2332                         1*) osvers=1 ;;
2333                         2*) osvers=2 ;;
2334                         3*) osvers=3 ;;
2335                         4*) osvers=4 ;;
2336                         *)      osvers="$3" ;;
2337                         esac
2338                         ;;
2339                 ultrix) osname=ultrix
2340                         osvers="$3"
2341                         ;;
2342                 osf1|mls+)      case "$5" in
2343                                 alpha)
2344                                         osname=dec_osf
2345                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2346                                         ;;
2347                         hp*)    osname=hp_osf1  ;;
2348                         mips)   osname=mips_osf1 ;;
2349                         esac
2350                         ;;
2351                 unixware) osname=svr5
2352                         osvers="$4"
2353                         ;;
2354                 uts) osname=uts
2355                         osvers="$3"
2356                         ;;
2357                 qnx) osname=qnx
2358                         osvers="$4"
2359                         ;;
2360                 $2) case "$osname" in
2361                         *isc*) ;;
2362                         *freebsd*) ;;
2363                         svr*)
2364                                 : svr4.x or possibly later
2365                                 case "svr$3" in 
2366                                 ${osname}*)
2367                                         osname=svr$3
2368                                         osvers=$4
2369                                         ;;
2370                                 esac
2371                                 case "$osname" in
2372                                 svr4.0)
2373                                         : Check for ESIX
2374                                         if test -f /stand/boot ; then
2375                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2376                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2377                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2378                                                         if test -n "$isesix"; then
2379                                                                 osname=esix4
2380                                                         fi
2381                                                 fi
2382                                         fi
2383                                         ;;
2384                                 esac
2385                                 ;;
2386                         *)      if test -f /etc/systemid; then
2387                                         osname=sco
2388                                         set `echo $3 | $sed 's/\./ /g'` $4
2389                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2390                                                 osvers=$1.$2.$3
2391                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2392                                                 osvers=$1.$2
2393                                         elif $test -f $src/hints/sco_$1.sh; then
2394                                                 osvers=$1
2395                                         fi
2396                                 else
2397                                         case "$osname" in
2398                                         '') : Still unknown.  Probably a generic Sys V.
2399                                                 osname="sysv"
2400                                                 osvers="$3"
2401                                                 ;;
2402                                         esac
2403                                 fi
2404                                 ;;
2405                         esac
2406                         ;;
2407                 *)      case "$osname" in
2408                         '') : Still unknown.  Probably a generic BSD.
2409                                 osname="$1"
2410                                 osvers="$3"
2411                                 ;;
2412                         esac
2413                         ;;
2414                 esac
2415         else
2416                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2417                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2418                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2419                                 osname=news_os
2420                         fi
2421                         $rm -f UU/kernel.what
2422                 elif test -d c:/.; then
2423                         set X $myuname
2424                         osname=os2
2425                         osvers="$5"
2426                 fi
2427         fi
2428         
2429         : Now look for a hint file osname_osvers, unless one has been
2430         : specified already.
2431         case "$hintfile" in
2432         ''|' ')
2433                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2434                 : Also try without trailing minor version numbers.
2435                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2436                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2437                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2438                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2439                 case "$file" in
2440                 '') dflt=none ;;
2441                 *)  case "$osvers" in
2442                         '') dflt=$file
2443                                 ;;
2444                         *)  if $test -f $src/hints/$file.sh ; then
2445                                         dflt=$file
2446                                 elif $test -f $src/hints/$xfile.sh ; then
2447                                         dflt=$xfile
2448                                 elif $test -f $src/hints/$xxfile.sh ; then
2449                                         dflt=$xxfile
2450                                 elif $test -f $src/hints/$xxxfile.sh ; then
2451                                         dflt=$xxxfile
2452                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2453                                         dflt=$xxxxfile
2454                                 elif $test -f "$src/hints/${osname}.sh" ; then
2455                                         dflt="${osname}"
2456                                 else
2457                                         dflt=none
2458                                 fi
2459                                 ;;
2460                         esac
2461                         ;;
2462                 esac
2463                 if $test -f Policy.sh ; then
2464                         case "$dflt" in
2465                         *Policy*) ;;
2466                         none) dflt="Policy" ;;
2467                         *) dflt="Policy $dflt" ;;
2468                         esac
2469                 fi
2470                 ;;
2471         *)
2472                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2473                 ;;
2474         esac
2475
2476         if $test -f Policy.sh ; then
2477                 $cat <<EOM
2478
2479 There's also a Policy hint file available, which should make the
2480 site-specific (policy) questions easier to answer.
2481 EOM
2482
2483         fi
2484
2485         $cat <<EOM
2486
2487 You may give one or more space-separated answers, or "none" if appropriate.
2488 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2489 is a good thing.  DO NOT give a wrong version or a wrong OS.
2490
2491 EOM
2492
2493         rp="Which of these apply, if any?"
2494         . UU/myread
2495         tans=$ans
2496         for file in $tans; do
2497                 if $test X$file = XPolicy -a -f Policy.sh; then
2498                         . Policy.sh
2499                         $cat Policy.sh >> UU/config.sh
2500                 elif $test -f $src/hints/$file.sh; then
2501                         . $src/hints/$file.sh
2502                         $cat $src/hints/$file.sh >> UU/config.sh
2503                 elif $test X$tans = X -o X$tans = Xnone ; then
2504                         : nothing
2505                 else
2506                         : Give one chance to correct a possible typo.
2507                         echo "$file.sh does not exist"
2508                         dflt=$file
2509                         rp="hint to use instead?"
2510                         . UU/myread
2511                         for file in $ans; do
2512                                 if $test -f "$src/hints/$file.sh"; then
2513                                         . $src/hints/$file.sh
2514                                         $cat $src/hints/$file.sh >> UU/config.sh
2515                                 elif $test X$ans = X -o X$ans = Xnone ; then
2516                                         : nothing
2517                                 else
2518                                         echo "$file.sh does not exist -- ignored."
2519                                 fi
2520                         done
2521                 fi
2522         done
2523
2524         hint=recommended
2525         : Remember our hint file for later.
2526         if $test -f "$src/hints/$file.sh" ; then
2527                 hintfile="$file"
2528         else
2529                 hintfile=''
2530         fi
2531 fi
2532 cd UU
2533 ;;
2534 *)
2535         echo " "
2536         echo "Fetching default answers from $config_sh..." >&4
2537         tmp_n="$n"
2538         tmp_c="$c"
2539         cd ..
2540         cp $config_sh config.sh 2>/dev/null
2541         chmod +w config.sh
2542         . ./config.sh
2543         cd UU
2544         cp ../config.sh .
2545         n="$tmp_n"
2546         c="$tmp_c"
2547         hint=previous
2548         ;;
2549 esac
2550 test "$override" && . ./optdef.sh
2551 myuname="$newmyuname"
2552
2553 : Restore computed paths
2554 for file in $loclist $trylist; do
2555         eval $file="\$_$file"
2556 done
2557
2558 cat << EOM
2559
2560 Configure uses the operating system name and version to set some defaults.
2561 The default value is probably right if the name rings a bell. Otherwise,
2562 since spelling matters for me, either accept the default or answer "none"
2563 to leave it blank.
2564
2565 EOM
2566 case "$osname" in
2567         ''|' ')
2568                 case "$hintfile" in
2569                 ''|' '|none) dflt=none ;;
2570                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2571                 esac
2572                 ;;
2573         *) dflt="$osname" ;;
2574 esac
2575 rp="Operating system name?"
2576 . ./myread
2577 case "$ans" in
2578 none)  osname='' ;;
2579 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2580 esac
2581 echo " "
2582 case "$osvers" in
2583         ''|' ')
2584                 case "$hintfile" in
2585                 ''|' '|none) dflt=none ;;
2586                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2587                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2588                         case "$dflt" in
2589                         ''|' ') dflt=none ;;
2590                         esac
2591                         ;;
2592                 esac
2593                 ;;
2594         *) dflt="$osvers" ;;
2595 esac
2596 rp="Operating system version?"
2597 . ./myread
2598 case "$ans" in
2599 none)  osvers='' ;;
2600 *) osvers="$ans" ;;
2601 esac
2602
2603
2604 . ./posthint.sh
2605
2606 : who configured the system
2607 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2608 cf_by=`(logname) 2>/dev/null`
2609 case "$cf_by" in
2610 "")
2611         cf_by=`(whoami) 2>/dev/null`
2612         case "$cf_by" in
2613         "") cf_by=unknown ;;
2614         esac ;;
2615 esac
2616
2617 : set up the script used to warn in case of inconsistency
2618 cat <<EOS >whoa
2619 $startsh
2620 EOS
2621 cat <<'EOSC' >>whoa
2622 dflt=y
2623 echo " "
2624 echo "*** WHOA THERE!!! ***" >&4
2625 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2626 rp="    Keep the $hint value?"
2627 . ./myread
2628 case "$ans" in
2629 y) td=$was; tu=$was;;
2630 esac
2631 EOSC
2632
2633 : function used to set $1 to $val
2634 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2635 case "$val$was" in
2636 $define$undef) . ./whoa; eval "$var=\$td";;
2637 $undef$define) . ./whoa; eval "$var=\$tu";;
2638 *) eval "$var=$val";;
2639 esac'
2640
2641 cat <<EOM
2642
2643 Perl can be built to take advantage of threads, on some systems.
2644 To do so, Configure must be run with -Dusethreads.
2645
2646 Note that threading is a highly experimental feature, and
2647 some known race conditions still remain.  If you choose to try
2648 it, be very sure to not actually deploy it for production
2649 purposes.  README.threads has more details, and is required
2650 reading if you enable threads.
2651 EOM
2652 case "$usethreads" in
2653 $define|true|[yY]*)     dflt='y';;
2654 *) dflt='n';;
2655 esac
2656 rp='Build a threading Perl?'
2657 . ./myread
2658 case "$ans" in
2659 y|Y)    val="$define" ;;     
2660 *)      val="$undef" ;;
2661 esac
2662 set usethreads
2663 eval $setvar 
2664
2665 case "$d_oldpthreads" in
2666 '')     : Configure tests would be welcome here.  For now, assume undef.
2667         val="$undef" ;;
2668 *)      val="$d_oldpthreads" ;;
2669 esac
2670 set d_oldpthreads
2671 eval $setvar
2672
2673
2674 case "$usethreads" in
2675 "$define"|true|[yY]*)
2676 : Look for a hint-file generated 'call-back-unit'.  If the
2677 : user has specified that a threading perl is to be built,
2678 : we may need to set or change some other defaults.
2679         if $test -f usethreads.cbu; then
2680                 echo "Your platform has some specific hints for threaded builds, using them..."
2681                 . ./usethreads.cbu
2682         else
2683                 $cat <<EOM
2684 (Your platform doesn't have any specific hints for threaded builds.
2685  Assuming POSIX threads, then.)
2686 EOM
2687         fi
2688     ;;
2689 esac
2690
2691 cat <<EOM
2692
2693 Perl can be built so that multiple Perl interpreters can coexist
2694 within the same Perl executable.  To do so, Configure must be run with
2695 -Dusemultiplicity.
2696
2697 Normally you do not need this and you should answer no.
2698
2699 EOM
2700 case "$usemultiplicity" in
2701 $define|true|[yY]*)     dflt='y';;
2702 *) dflt='n';;
2703 esac
2704 rp='Build Perl for multiplicity?'
2705 . ./myread
2706 case "$ans" in
2707 y|Y)    val="$define" ;;     
2708 *)      val="$undef" ;;
2709 esac
2710 set usemultiplicity
2711 eval $setvar 
2712
2713 : determine where manual pages are on this system
2714 echo " "
2715 case "$sysman" in
2716 '') 
2717         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2718         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2719         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2720         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2721         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2722         sysman=`./loc . /usr/man/man1 $syspath`
2723         ;;
2724 esac
2725 if $test -d "$sysman"; then
2726         echo "System manual is in $sysman." >&4
2727 else
2728         echo "Could not find manual pages in source form." >&4
2729 fi
2730
2731 : see what memory models we can support
2732 case "$models" in
2733 '')
2734         $cat >pdp11.c <<'EOP'
2735 int main() {
2736 #ifdef pdp11
2737         exit(0);
2738 #else
2739         exit(1);
2740 #endif
2741 }
2742 EOP
2743         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2744         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2745                 dflt='unsplit split'
2746         else
2747                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2748                 case "$tans" in
2749                 X) dflt='none';;
2750                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2751                                 dflt='small'
2752                         else
2753                                 dflt=''
2754                         fi
2755                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2756                                 dflt="$dflt medium"
2757                         fi
2758                         if $test -d /lib/large || $test -d /usr/lib/large; then
2759                                 dflt="$dflt large"
2760                         fi
2761                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2762                                 dflt="$dflt huge"
2763                         fi
2764                 esac
2765         fi;;
2766 *) dflt="$models";;
2767 esac
2768 $cat <<EOM
2769  
2770 Some systems have different model sizes.  On most systems they are called
2771 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2772 split.  If your system doesn't support different memory models, say "none".
2773 If you wish to force everything to one memory model, say "none" here and
2774 put the appropriate flags later when it asks you for other cc and ld flags.
2775 Venix systems may wish to put "none" and let the compiler figure things out.
2776 (In the following question multiple model names should be space separated.)
2777
2778 The default for most systems is "none".
2779
2780 EOM
2781 rp="Which memory models are supported?"
2782 . ./myread
2783 models="$ans"
2784
2785 case "$models" in
2786 none)
2787         small=''
2788         medium=''
2789         large=''
2790         huge=''
2791         unsplit=''
2792         split=''
2793         ;;
2794 *split)
2795         case "$split" in
2796         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2797                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2798                         dflt='-i'
2799                 else
2800                         dflt='none'
2801                 fi;;
2802         *) dflt="$split";;
2803         esac
2804         rp="What flag indicates separate I and D space?"
2805         . ./myread
2806         tans="$ans"
2807         case "$tans" in
2808         none) tans='';;
2809         esac
2810         split="$tans"
2811         unsplit='';;
2812 *large*|*small*|*medium*|*huge*)
2813         case "$models" in
2814         *large*)
2815                 case "$large" in
2816                 '') dflt='-Ml';;
2817                 *) dflt="$large";;
2818                 esac
2819         rp="What flag indicates large model?"
2820         . ./myread
2821         tans="$ans"
2822         case "$tans" in
2823         none) tans='';
2824         esac
2825         large="$tans";;
2826         *) large='';;
2827         esac
2828         case "$models" in
2829         *huge*) case "$huge" in
2830                 '') dflt='-Mh';;
2831                 *) dflt="$huge";;
2832                 esac
2833                 rp="What flag indicates huge model?"
2834                 . ./myread
2835                 tans="$ans"
2836                 case "$tans" in
2837                 none) tans='';
2838                 esac
2839                 huge="$tans";;
2840         *) huge="$large";;
2841         esac
2842         case "$models" in
2843         *medium*) case "$medium" in
2844                 '') dflt='-Mm';;
2845                 *) dflt="$medium";;
2846                 esac
2847                 rp="What flag indicates medium model?"
2848                 . ./myread
2849                 tans="$ans"
2850                 case "$tans" in
2851                 none) tans='';
2852                 esac
2853                 medium="$tans";;
2854         *) medium="$large";;
2855         esac
2856         case "$models" in
2857         *small*) case "$small" in
2858                 '') dflt='none';;
2859                 *) dflt="$small";;
2860                 esac
2861                 rp="What flag indicates small model?"
2862                 . ./myread
2863                 tans="$ans"
2864                 case "$tans" in
2865                 none) tans='';
2866                 esac
2867                 small="$tans";;
2868         *) small='';;
2869         esac
2870         ;;
2871 *)
2872         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2873         ;;
2874 esac
2875 $rm -f pdp11.* pdp11
2876
2877 : make some quick guesses about what we are up against
2878 echo " "
2879 $echo $n "Hmm...  $c"
2880 echo exit 1 >bsd
2881 echo exit 1 >usg
2882 echo exit 1 >v7
2883 echo exit 1 >osf1
2884 echo exit 1 >eunice
2885 echo exit 1 >xenix
2886 echo exit 1 >venix
2887 echo exit 1 >os2
2888 d_bsd="$undef"
2889 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2890 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2891 then
2892         echo "Looks kind of like an OSF/1 system, but we'll see..."
2893         echo exit 0 >osf1
2894 elif test `echo abc | tr a-z A-Z` = Abc ; then
2895         xxx=`./loc addbib blurfl $pth`
2896         if $test -f $xxx; then
2897         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2898                 echo exit 0 >bsd
2899                 echo exit 0 >usg
2900         else
2901                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2902                         echo "Looks kind of like an extended USG system, but we'll see..."
2903                 else
2904                         echo "Looks kind of like a USG system, but we'll see..."
2905                 fi
2906                 echo exit 0 >usg
2907         fi
2908 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2909         echo "Looks kind of like a BSD system, but we'll see..."
2910         d_bsd="$define"
2911         echo exit 0 >bsd
2912 else
2913         echo "Looks kind of like a Version 7 system, but we'll see..."
2914         echo exit 0 >v7
2915 fi
2916 case "$eunicefix" in
2917 *unixtovms*)
2918         $cat <<'EOI'
2919 There is, however, a strange, musty smell in the air that reminds me of
2920 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2921 EOI
2922         echo exit 0 >eunice
2923         d_eunice="$define"
2924 : it so happens the Eunice I know will not run shell scripts in Unix format
2925         ;;
2926 *)
2927         echo " "
2928         echo "Congratulations.  You aren't running Eunice."
2929         d_eunice="$undef"
2930         ;;
2931 esac
2932 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2933 case "$p_" in
2934 :) ;;
2935 *)
2936         $cat <<'EOI'
2937 I have the feeling something is not exactly right, however...don't tell me...
2938 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2939 EOI
2940         echo exit 0 >os2
2941         ;;
2942 esac
2943 if test -f /xenix; then
2944         echo "Actually, this looks more like a XENIX system..."
2945         echo exit 0 >xenix
2946         d_xenix="$define"
2947 else
2948         echo " "
2949         echo "It's not Xenix..."
2950         d_xenix="$undef"
2951 fi
2952 chmod +x xenix
2953 $eunicefix xenix
2954 if test -f /venix; then
2955         echo "Actually, this looks more like a VENIX system..."
2956         echo exit 0 >venix
2957 else
2958         echo " "
2959         if ./xenix; then
2960                 : null
2961         else
2962                 echo "Nor is it Venix..."
2963         fi
2964 fi
2965 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2966 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2967 $rm -f foo
2968
2969 : see if we need a special compiler
2970 echo " "
2971 if ./usg; then
2972         case "$cc" in
2973         '') case "$Mcc" in
2974                 /*) dflt='Mcc';;
2975                 *) case "$large" in
2976                         -M*) dflt='cc';;
2977                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2978                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2979                                                 dflt='cc'
2980                                         else
2981                                                 dflt='cc -M'
2982                                         fi
2983                                 else
2984                                         dflt='cc'
2985                                 fi;;
2986                         esac;;
2987                 esac;;
2988         *)  dflt="$cc";;
2989         esac
2990         case "$dflt" in
2991         *M*)    $cat <<'EOM'
2992 On some older systems the default C compiler will not resolve multiple global
2993 references that happen to have the same name.  On some such systems the "Mcc"
2994 command may be used to force these to be resolved.  On other systems a "cc -M"
2995 command is required.  (Note that the -M flag on other systems indicates a
2996 memory model to use!) If you have the Gnu C compiler, you might wish to use
2997 that instead.
2998
2999 EOM
3000         ;;
3001         esac
3002         rp="Use which C compiler?"
3003         . ./myread
3004         cc="$ans"
3005 else
3006         case "$cc" in
3007         '') dflt=cc;;
3008         *) dflt="$cc";;
3009         esac
3010         rp="Use which C compiler?"
3011         . ./myread
3012         cc="$ans"
3013 fi
3014 : Look for a hint-file generated 'call-back-unit'.  Now that the
3015 : user has specified the compiler, we may need to set or change some
3016 : other defaults.
3017 if $test -f cc.cbu; then
3018     . ./cc.cbu
3019 fi
3020 echo " "
3021 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3022 $cat >gccvers.c <<EOM
3023 #include <stdio.h>
3024 int main() {
3025 #ifdef __GNUC__
3026 #ifdef __VERSION__
3027         printf("%s\n", __VERSION__);
3028 #else
3029         printf("%s\n", "1");
3030 #endif
3031 #endif
3032         exit(0);
3033 }
3034 EOM
3035 if $cc -o gccvers gccvers.c; then
3036         gccversion=`./gccvers`
3037         case "$gccversion" in
3038         '') echo "You are not using GNU cc." ;;
3039         *)  echo "You are using GNU cc $gccversion." ;;
3040         esac
3041 else
3042         echo " "
3043         echo "*** WHOA THERE!!! ***" >&4
3044         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3045         case "$knowitall" in
3046         '')
3047         echo "    You'd better start hunting for one and let me know about it." >&4
3048                 exit 1
3049                 ;;
3050         esac
3051 fi
3052 $rm -f gccvers*
3053 case "$gccversion" in
3054 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3055 esac
3056
3057
3058 case "$usemorebits" in
3059 "$define"|true|[yY]*)
3060         use64bits="$define"
3061         uselongdouble="$define"
3062         usemorebits="$define"
3063         ;;
3064 *)      usemorebits="$undef"
3065         ;;
3066 esac
3067
3068
3069 cat <<EOM
3070
3071 Perl can be built to understand large files (files larger than 2 gigabytes)
3072 on some systems.  To do so, Configure must be run with -Duselargefiles.
3073
3074 If this doesn't make any sense to you, just accept the default.
3075 EOM
3076 case "$uselargefiles" in
3077 "$define"|true|[yY]*) dflt='y' ;;
3078 *)      dflt='n' ;;
3079 esac
3080 rp='Try to understand large files?'
3081 . ./myread
3082 case "$ans" in
3083 y|Y)    val="$define" ;;
3084 *)      val="$undef"  ;;
3085 esac
3086 set uselargefiles
3087 eval $setvar
3088 case "$uselargefiles" in
3089 "$define") use64bits="$define" ;;
3090 esac
3091
3092 cat <<EOM
3093
3094 Perl can be built to take advantage of explicit 64-bit interfaces,
3095 on some systems.  To do so, Configure must be run with -Duse64bits.
3096
3097 If this doesn't make any sense to you, just accept the default.
3098 EOM
3099 case "$use64bits" in
3100 $define|true|[yY]*)     dflt='y';;
3101 *) dflt='n';;
3102 esac
3103 rp='Try to use explicit 64-bit interfaces, if available?'
3104 . ./myread
3105 case "$ans" in
3106 y|Y) 
3107         val="$define"
3108         ;;     
3109 *)      
3110         val="$undef"
3111         ;;
3112 esac
3113 set use64bits
3114 eval $setvar
3115
3116 case "$archname64" in
3117 '') archname64='' ;;    # not a typo
3118 esac
3119
3120 case "$use64bits" in
3121 "$define"|true|[yY]*)
3122 : Look for a hint-file generated 'call-back-unit'.  If the
3123 : user has specified that a 64 bit perl is to be built,
3124 : we may need to set or change some other defaults.
3125         if $test -f use64bits.cbu; then
3126                 echo "Your platform has some specific hints for 64-bit builds, using them..."
3127                 . ./use64bits.cbu
3128         else
3129                 $cat <<EOM
3130 (Your platform doesn't have any specific hints for 64-bit builds.
3131  This is probably okay, especially if your system is a true 64-bit system.)
3132 EOM
3133                 case "$gccversion" in
3134                 '')     ;;
3135                 *)      $cat <<EOM
3136 But since you seem to be using gcc,
3137 I will now add -DUSE_LONG_LONG to the compilation flags.
3138 EOM
3139                         ccflags="$ccflags -DUSE_LONG_LONG"
3140                         ;;
3141                 esac
3142         fi
3143         ;;
3144 esac
3145
3146 : determine the architecture name
3147 echo " "
3148 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3149         tarch=`arch`"-$osname"
3150 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3151         if uname -m > tmparch 2>&1 ; then
3152                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3153                         -e 's/$/'"-$osname/" tmparch`
3154         else
3155                 tarch="$osname"
3156         fi
3157         $rm -f tmparch
3158 else
3159         tarch="$osname"
3160 fi
3161 case "$myarchname" in
3162 ''|"$tarch") ;;
3163 *)
3164         echo "(Your architecture name used to be $myarchname.)"
3165         archname=''
3166         ;;
3167 esac
3168 myarchname="$tarch"
3169 case "$archname" in
3170 '') dflt="$tarch";;
3171 *) dflt="$archname";;
3172 esac
3173 rp='What is your architecture name'
3174 . ./myread
3175 archname="$ans"
3176 case "$usethreads" in
3177 $define)
3178         echo "Threads selected." >&4
3179         case "$archname" in
3180         *-thread*) echo "...and architecture name already has -thread." >&4
3181                 ;;
3182         *)      archname="$archname-thread"
3183                 echo "...setting architecture name to $archname." >&4
3184                 ;;
3185         esac
3186         ;;
3187 esac
3188 case "$usemultiplicity" in
3189 $define)
3190         echo "Multiplicity selected." >&4
3191         case "$archname" in
3192         *-multi*) echo "...and architecture name already has -multi." >&4
3193                 ;;
3194         *)      archname="$archname-multi"
3195                 echo "...setting architecture name to $archname." >&4
3196                 ;;
3197         esac
3198         ;;
3199 esac
3200 case "$use64bits" in
3201 $define)
3202         echo "Explicit 64-bitness selected." >&4
3203         case "$archname64" in
3204         '')
3205                 ;;
3206         *)
3207                 case "$archname" in
3208                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3209                         ;;
3210                 *)      archname="$archname-$archname64"
3211                         echo "...setting architecture name to $archname." >&4
3212                         ;;
3213                 esac
3214                 ;;
3215         esac
3216 esac
3217
3218 : decide how portable to be.  Allow command line overrides.
3219 case "$d_portable" in
3220 "$undef") ;;
3221 *)      d_portable="$define" ;;
3222 esac
3223
3224 : set up shell script to do ~ expansion
3225 cat >filexp <<EOSS
3226 $startsh
3227 : expand filename
3228 case "\$1" in
3229  ~/*|~)
3230         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3231         ;;
3232  ~*)
3233         if $test -f /bin/csh; then
3234                 /bin/csh -f -c "glob \$1"
3235                 failed=\$?
3236                 echo ""
3237                 exit \$failed
3238         else
3239                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3240                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3241                 if $test ! -d "\$dir"; then
3242                         me=\`basename \$0\`
3243                         echo "\$me: can't locate home directory for: \$name" >&2
3244                         exit 1
3245                 fi
3246                 case "\$1" in
3247                 */*)
3248                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3249                         ;;
3250                 *)
3251                         echo \$dir
3252                         ;;
3253                 esac
3254         fi
3255         ;;
3256 *)
3257         echo \$1
3258         ;;
3259 esac
3260 EOSS
3261 chmod +x filexp
3262 $eunicefix filexp
3263
3264 : now set up to get a file name
3265 cat <<EOS >getfile
3266 $startsh
3267 EOS
3268 cat <<'EOSC' >>getfile
3269 tilde=''
3270 fullpath=''
3271 already=''
3272 skip=''
3273 none_ok=''
3274 exp_file=''
3275 nopath_ok=''
3276 orig_rp="$rp"
3277 orig_dflt="$dflt"
3278 case "$gfpth" in
3279 '') gfpth='.' ;;
3280 esac
3281
3282 case "$fn" in
3283 *\(*)
3284         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3285         fn=`echo $fn | sed 's/(.*)//'`
3286         ;;
3287 esac
3288
3289 case "$fn" in
3290 *:*)
3291         loc_file=`expr $fn : '.*:\(.*\)'`
3292         fn=`expr $fn : '\(.*\):.*'`
3293         ;;
3294 esac
3295
3296 case "$fn" in
3297 *~*) tilde=true;;
3298 esac
3299 case "$fn" in
3300 */*) fullpath=true;;
3301 esac
3302 case "$fn" in
3303 *+*) skip=true;;
3304 esac
3305 case "$fn" in
3306 *n*) none_ok=true;;
3307 esac
3308 case "$fn" in
3309 *e*) exp_file=true;;
3310 esac
3311 case "$fn" in
3312 *p*) nopath_ok=true;;
3313 esac
3314
3315 case "$fn" in
3316 *f*) type='File';;
3317 *d*) type='Directory';;
3318 *l*) type='Locate';;
3319 esac
3320
3321 what="$type"
3322 case "$what" in
3323 Locate) what='File';;
3324 esac
3325
3326 case "$exp_file" in
3327 '')
3328         case "$d_portable" in
3329         "$define") ;;
3330         *) exp_file=true;;
3331         esac
3332         ;;
3333 esac
3334
3335 cd ..
3336 while test "$type"; do
3337         redo=''
3338         rp="$orig_rp"
3339         dflt="$orig_dflt"
3340         case "$tilde" in
3341         true) rp="$rp (~name ok)";;
3342         esac
3343         . UU/myread
3344         if test -f UU/getfile.ok && \
3345                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3346         then
3347                 value="$ans"
3348                 ansexp="$ans"
3349                 break
3350         fi
3351         case "$ans" in
3352         none)
3353                 value=''
3354                 ansexp=''
3355                 case "$none_ok" in
3356                 true) type='';;
3357                 esac
3358                 ;;
3359         *)
3360                 case "$tilde" in
3361                 '') value="$ans"
3362                         ansexp="$ans";;
3363                 *)
3364                         value=`UU/filexp $ans`
3365                         case $? in
3366                         0)
3367                                 if test "$ans" != "$value"; then
3368                                         echo "(That expands to $value on this system.)"
3369                                 fi
3370                                 ;;
3371                         *) value="$ans";;
3372                         esac
3373                         ansexp="$value"
3374                         case "$exp_file" in
3375                         '') value="$ans";;
3376                         esac
3377                         ;;
3378                 esac
3379                 case "$fullpath" in
3380                 true)
3381                         case "$ansexp" in
3382                         /*) value="$ansexp" ;;
3383                         *)
3384                                 redo=true
3385                                 case "$already" in
3386                                 true)
3387                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3388                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3389                                         ;;
3390                                 *)
3391                                 echo "Please give a full path name, starting with slash." >&4
3392                                         case "$tilde" in
3393                                         true)
3394                                 echo "Note that using ~name is ok provided it expands well." >&4
3395                                                 already=true
3396                                                 ;;
3397                                         esac
3398                                 esac
3399                                 ;;
3400                         esac
3401                         ;;
3402                 esac
3403                 case "$redo" in
3404                 '')
3405                         case "$type" in
3406                         File)
3407                                 for fp in $gfpth; do
3408                                         if test "X$fp" = X.; then
3409                                             pf="$ansexp"
3410                                         else    
3411                                             pf="$fp/$ansexp"
3412                                         fi
3413                                         if test -f "$pf"; then
3414                                                 type=''
3415                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3416                                         then
3417                                                 echo "($value is not a plain file, but that's ok.)"
3418                                                 type=''
3419                                         fi
3420                                         if test X"$type" = X; then
3421                                             value="$pf"
3422                                             break
3423                                         fi
3424                                 done
3425                                 ;;
3426                         Directory)
3427                                 for fp in $gfpth; do
3428                                         if test "X$fp" = X.; then
3429                                             pf="$ansexp"
3430                                         else    
3431                                             pf="$fp/$ansexp"
3432                                         fi
3433                                         if test -d "$pf"; then
3434                                                 type=''
3435                                                 value="$pf"
3436                                                 break
3437                                         fi
3438                                 done
3439                                 ;;
3440                         Locate)
3441                                 if test -d "$ansexp"; then
3442                                         echo "(Looking for $loc_file in directory $value.)"
3443                                         value="$value/$loc_file"
3444                                         ansexp="$ansexp/$loc_file"
3445                                 fi
3446                                 if test -f "$ansexp"; then
3447                                         type=''
3448                                 fi
3449                                 case "$nopath_ok" in
3450                                 true)   case "$value" in
3451                                         */*) ;;
3452                                         *)      echo "Assuming $value will be in people's path."
3453                                                 type=''
3454                                                 ;;
3455                                         esac
3456                                         ;;
3457                                 esac
3458                                 ;;
3459                         esac
3460
3461                         case "$skip" in
3462                         true) type='';
3463                         esac
3464
3465                         case "$type" in
3466                         '') ;;
3467                         *)
3468                                 if test "$fastread" = yes; then
3469                                         dflt=y
3470                                 else
3471                                         dflt=n
3472                                 fi
3473                                 rp="$what $value doesn't exist.  Use that name anyway?"
3474                                 . UU/myread
3475                                 dflt=''
3476                                 case "$ans" in
3477                                 y*) type='';;
3478                                 *) echo " ";;
3479                                 esac
3480                                 ;;
3481                         esac
3482                         ;;
3483                 esac
3484                 ;;
3485         esac
3486 done
3487 cd UU
3488 ans="$value"
3489 rp="$orig_rp"
3490 dflt="$orig_dflt"
3491 rm -f getfile.ok
3492 test "X$gfpthkeep" != Xy && gfpth=""
3493 EOSC
3494
3495 : determine root of directory hierarchy where package will be installed.
3496 case "$prefix" in
3497 '')
3498         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3499         ;;
3500 *)
3501         dflt="$prefix"
3502         ;;
3503 esac
3504 $cat <<EOM
3505
3506 By default, $package will be installed in $dflt/bin, manual pages
3507 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3508 installation directories. Typically this is something like /usr/local.
3509 If you wish to have binaries under /usr/bin but other parts of the
3510 installation under /usr/local, that's ok: you will be prompted
3511 separately for each of the installation directories, the prefix being
3512 only used to set the defaults.
3513
3514 EOM
3515 fn=d~
3516 rp='Installation prefix to use?'
3517 . ./getfile
3518 oldprefix=''
3519 case "$prefix" in
3520 '') ;;
3521 *)
3522         case "$ans" in
3523         "$prefix") ;;
3524         *) oldprefix="$prefix";;
3525         esac
3526         ;;
3527 esac
3528 prefix="$ans"
3529 prefixexp="$ansexp"
3530
3531 : is AFS running?
3532 echo " "
3533 case "$afs" in
3534 $define|true)   afs=true ;;
3535 $undef|false)   afs=false ;;
3536 *)      if test -d /afs; then
3537                 afs=true
3538         else
3539                 afs=false
3540         fi
3541         ;;
3542 esac
3543 if $afs; then
3544         echo "AFS may be running... I'll be extra cautious then..." >&4
3545 else
3546         echo "AFS does not seem to be running..." >&4
3547 fi
3548
3549 : determine installation prefix for where package is to be installed.
3550 if $afs; then 
3551 $cat <<EOM
3552
3553 Since you are running AFS, I need to distinguish the directory in which
3554 files will reside from the directory in which they are installed (and from
3555 which they are presumably copied to the former directory by occult means).
3556
3557 EOM
3558         case "$installprefix" in
3559         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3560         *) dflt="$installprefix";;
3561         esac
3562 else
3563 $cat <<EOM
3564
3565 In some special cases, particularly when building $package for distribution,
3566 it is convenient to distinguish between the directory in which files should 
3567 be installed from the directory ($prefix) in which they 
3568 will eventually reside.  For most users, these two directories are the same.
3569
3570 EOM
3571         case "$installprefix" in
3572         '') dflt=$prefix ;;
3573         *) dflt=$installprefix;;
3574         esac
3575 fi
3576 fn=d~
3577 rp='What installation prefix should I use for installing files?'
3578 . ./getfile
3579 installprefix="$ans"
3580 installprefixexp="$ansexp"
3581
3582 : set the prefixit variable, to compute a suitable default value
3583 prefixit='case "$3" in
3584 ""|none)
3585         case "$oldprefix" in
3586         "") eval "$1=\"\$$2\"";;
3587         *)
3588                 case "$3" in
3589                 "") eval "$1=";;
3590                 none)
3591                         eval "tp=\"\$$2\"";
3592                         case "$tp" in
3593                         ""|" ") eval "$1=\"\$$2\"";;
3594                         *) eval "$1=";;
3595                         esac;;
3596                 esac;;
3597         esac;;
3598 *)
3599         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3600         case "$tp" in
3601         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3602         /*-$oldprefix/*|\~*-$oldprefix/*)
3603                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3604         *) eval "$1=\"\$$2\"";;
3605         esac;;
3606 esac'
3607
3608 : set the base revision
3609 baserev=5.0
3610
3611 : get the patchlevel
3612 echo " "
3613 echo "Getting the current patchlevel..." >&4
3614 if $test -r $rsrc/patchlevel.h;then
3615         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3616         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3617         apiversion=`awk '/define[       ]+PERL_APIVERSION/ {print $3}' $rsrc/patchlevel.h`
3618 else
3619         patchlevel=0
3620         subversion=0
3621         apiversion=0
3622 fi
3623 $echo $n "(You have $package" $c
3624 case "$package" in
3625 "*$baserev")    ;;
3626 *)              $echo $n " $baserev" $c ;;
3627 esac
3628 $echo $n " patchlevel $patchlevel" $c
3629 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3630 echo ".)"
3631
3632 if test 0 -eq "$subversion"; then
3633         version=`LC_ALL=C; export LC_ALL; \
3634                  echo $baserev $patchlevel | \
3635                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3636 else
3637         version=`LC_ALL=C; export LC_ALL; \
3638                  echo $baserev $patchlevel $subversion | \
3639                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3640 fi
3641
3642 : determine installation style
3643 : For now, try to deduce it from prefix unless it is already set.
3644 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3645 case "$installstyle" in
3646 '')     case "$prefix" in
3647                 *perl*) dflt='lib';;
3648                 *) dflt='lib/perl5' ;;
3649         esac
3650         ;;
3651 *)      dflt='lib/perl5' ;;
3652 esac
3653 : Probably not worth prompting for this since we prompt for all
3654 : the directories individually, and the prompt would be too long and
3655 : confusing anyway.
3656 installstyle=$dflt
3657
3658 : determine where private library files go
3659 : Usual default is /usr/local/lib/perl5/$version.
3660 : Also allow things like /opt/perl/lib/$version, since 
3661 : /opt/perl/lib/perl5... would be redundant.
3662 : The default "style" setting is made in installstyle.U
3663 case "$installstyle" in
3664 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3665 *)       set dflt privlib lib/$version ;;
3666 esac
3667 eval $prefixit
3668 $cat <<EOM
3669
3670 There are some auxiliary files for $package that need to be put into a
3671 private library directory that is accessible by everyone.
3672
3673 EOM
3674 fn=d~+
3675 rp='Pathname where the private library files will reside?'
3676 . ./getfile
3677 privlib="$ans"
3678 privlibexp="$ansexp"
3679 : Change installation prefix, if necessary.
3680 if $test X"$prefix" != X"$installprefix"; then
3681         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
3682 else
3683         installprivlib="$privlibexp"
3684 fi
3685
3686 : set the prefixup variable, to restore leading tilda escape
3687 prefixup='case "$prefixexp" in
3688 "$prefix") ;;
3689 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3690 esac'
3691
3692 : determine where public architecture dependent libraries go
3693 set archlib archlib
3694 eval $prefixit
3695 : privlib default is /usr/local/lib/$package/$version
3696 : archlib default is /usr/local/lib/$package/$version/$archname
3697 : privlib may have an optional trailing /share.
3698 tdflt=`echo $privlib | $sed 's,/share$,,'`
3699 tdflt=$tdflt/$archname
3700 case "$archlib" in
3701 '')     dflt=$tdflt
3702         ;;
3703 *)      dflt="$archlib"
3704     ;;
3705 esac
3706 $cat <<EOM
3707
3708 $spackage contains architecture-dependent library files.  If you are
3709 sharing libraries in a heterogeneous environment, you might store
3710 these files in a separate location.  Otherwise, you can just include
3711 them with the rest of the public library files.
3712
3713 EOM
3714 fn=d+~
3715 rp='Where do you want to put the public architecture-dependent libraries?'
3716 . ./getfile
3717 archlib="$ans"
3718 archlibexp="$ansexp"
3719 if $test X"$archlib" = X"$privlib"; then
3720         d_archlib="$undef"
3721 else
3722         d_archlib="$define"
3723 fi
3724 : Change installation prefix, if necessary.
3725 if $test X"$prefix" != X"$installprefix"; then
3726         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
3727 else
3728         installarchlib="$archlibexp"
3729 fi
3730
3731
3732 : Binary compatibility with 5.005 is not possible for builds
3733 : with advanced features
3734 case "$usethreads$usemultiplicity" in
3735 *define*)
3736         bincompat5005="$undef"
3737         d_bincompat5005="$undef"
3738         ;;
3739 *)      $cat <<EOM
3740
3741 Perl 5.006 can be compiled for binary compatibility with 5.005.
3742 If you decide to do so, you will be able to continue using most
3743 of the extensions that were compiled for Perl 5.005.
3744
3745 EOM
3746         case "$bincompat5005$d_bincompat5005" in
3747         *"$undef"*) dflt=n ;;
3748         *) dflt=y ;;
3749         esac
3750         rp='Binary compatibility with Perl 5.005?'
3751         . ./myread
3752         case "$ans" in
3753         y*) val="$define" ;;
3754         *)  val="$undef" ;;
3755         esac
3756         set d_bincompat5005
3757         eval $setvar
3758         case "$d_bincompat5005" in
3759         "$define")
3760                 bincompat5005="$define"
3761                 ;;
3762         *)      bincompat5005="$undef"
3763                 d_bincompat5005="$undef"
3764                 ;;
3765         esac
3766         ;;
3767 esac
3768
3769
3770 : see if setuid scripts can be secure
3771 $cat <<EOM
3772
3773 Some kernels have a bug that prevents setuid #! scripts from being
3774 secure.  Some sites have disabled setuid #! scripts because of this.
3775
3776 First let's decide if your kernel supports secure setuid #! scripts.
3777 (If setuid #! scripts would be secure but have been disabled anyway,
3778 don't say that they are secure if asked.)
3779
3780 EOM
3781
3782 val="$undef"
3783 if $test -d /dev/fd; then
3784         echo "#!$ls" >reflect
3785         chmod +x,u+s reflect
3786         ./reflect >flect 2>&1
3787         if $contains "/dev/fd" flect >/dev/null; then
3788                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3789                 val="$define"
3790         else
3791                 $cat <<EOM
3792 If you are not sure if they are secure, I can check but I'll need a
3793 username and password different from the one you are using right now.
3794 If you don't have such a username or don't want me to test, simply
3795 enter 'none'.
3796
3797 EOM
3798                 rp='Other username to test security of setuid scripts with?'
3799                 dflt='none'
3800                 . ./myread
3801                 case "$ans" in
3802                 n|none)
3803                         case "$d_suidsafe" in
3804                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3805                                 dflt=n;;
3806                         "$undef")
3807                                 echo "Well, the $hint value is *not* secure." >&4
3808                                 dflt=n;;
3809                         *)      echo "Well, the $hint value *is* secure." >&4
3810                                 dflt=y;;
3811                         esac
3812                         ;;
3813                 *)
3814                         $rm -f reflect flect
3815                         echo "#!$ls" >reflect
3816                         chmod +x,u+s reflect
3817                         echo >flect
3818                         chmod a+w flect
3819                         echo '"su" will (probably) prompt you for '"$ans's password."
3820                         su $ans -c './reflect >flect'
3821                         if $contains "/dev/fd" flect >/dev/null; then
3822                                 echo "Okay, it looks like setuid scripts are secure." >&4
3823                                 dflt=y
3824                         else
3825                                 echo "I don't think setuid scripts are secure." >&4
3826                                 dflt=n
3827                         fi
3828                         ;;
3829                 esac
3830                 rp='Does your kernel have *secure* setuid scripts?'
3831                 . ./myread
3832                 case "$ans" in
3833                 [yY]*)  val="$define";;
3834                 *)      val="$undef";;
3835                 esac
3836         fi
3837 else
3838         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3839         echo "(That's for file descriptors, not floppy disks.)"
3840         val="$undef"
3841 fi
3842 set d_suidsafe
3843 eval $setvar
3844
3845 $rm -f reflect flect
3846
3847 : now see if they want to do setuid emulation
3848 echo " "
3849 val="$undef"
3850 case "$d_suidsafe" in
3851 "$define")
3852         val="$undef"
3853         echo "No need to emulate SUID scripts since they are secure here." >& 4
3854         ;;
3855 *)
3856         $cat <<EOM
3857 Some systems have disabled setuid scripts, especially systems where
3858 setuid scripts cannot be secure.  On systems where setuid scripts have
3859 been disabled, the setuid/setgid bits on scripts are currently
3860 useless.  It is possible for $package to detect those bits and emulate
3861 setuid/setgid in a secure fashion.  This emulation will only work if
3862 setuid scripts have been disabled in your kernel.
3863
3864 EOM
3865         case "$d_dosuid" in
3866         "$define") dflt=y ;;
3867         *) dflt=n ;;
3868         esac
3869         rp="Do you want to do setuid/setgid emulation?"
3870         . ./myread
3871         case "$ans" in
3872         [yY]*)  val="$define";;
3873         *)      val="$undef";;
3874         esac
3875         ;;
3876 esac
3877 set d_dosuid
3878 eval $setvar
3879
3880 : What should the include directory be ?
3881 echo " "
3882 $echo $n "Hmm...  $c"
3883 dflt='/usr/include'
3884 incpath=''
3885 mips_type=''
3886 if $test -f /bin/mips && /bin/mips; then
3887         echo "Looks like a MIPS system..."
3888         $cat >usr.c <<'EOCP'
3889 #ifdef SYSTYPE_BSD43
3890 /bsd43
3891 #endif
3892 EOCP
3893         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3894                 dflt='/bsd43/usr/include'
3895                 incpath='/bsd43'
3896                 mips_type='BSD 4.3'
3897         else
3898                 mips_type='System V'
3899         fi
3900         $rm -f usr.c usr.out
3901         echo "and you're compiling with the $mips_type compiler and libraries."
3902         xxx_prompt=y
3903         echo "exit 0" >mips
3904 else
3905         echo "Doesn't look like a MIPS system."
3906         xxx_prompt=n
3907         echo "exit 1" >mips
3908 fi
3909 chmod +x mips
3910 $eunicefix mips
3911 case "$usrinc" in
3912 '') ;;
3913 *) dflt="$usrinc";;
3914 esac
3915 case "$xxx_prompt" in
3916 y)      fn=d/
3917         echo " "
3918         rp='Where are the include files you want to use?'
3919         . ./getfile
3920         usrinc="$ans"
3921         ;;
3922 *)      usrinc="$dflt"
3923         ;;
3924 esac
3925
3926 : see how we invoke the C preprocessor
3927 echo " "
3928 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3929 cat <<'EOT' >testcpp.c
3930 #define ABC abc
3931 #define XYZ xyz
3932 ABC.XYZ
3933 EOT
3934 cd ..
3935 if test ! -f cppstdin; then
3936         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3937                 # AIX cc -E doesn't show the absolute headerfile
3938                 # locations but we'll cheat by using the -M flag.
3939                 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
3940         else
3941                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3942         fi
3943 else
3944         echo "Keeping your $hint cppstdin wrapper."
3945 fi
3946 chmod 755 cppstdin
3947 wrapper=`pwd`/cppstdin
3948 ok='false'
3949 cd UU
3950
3951 if $test "X$cppstdin" != "X" && \
3952         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3953         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3954 then
3955         echo "You used to use $cppstdin $cppminus so we'll use that again."
3956         case "$cpprun" in
3957         '') echo "But let's see if we can live without a wrapper..." ;;
3958         *)
3959                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3960                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3961                 then
3962                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3963                         ok='true'
3964                 else
3965                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3966                 fi
3967                 ;;
3968         esac
3969 else
3970         case "$cppstdin" in
3971         '') ;;
3972         *)
3973                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3974                 ;;
3975         esac
3976 fi
3977
3978 if $ok; then
3979         : nothing
3980 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3981         $cc -E <testcpp.c >testcpp.out 2>&1; \
3982         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3983         echo "Yup, it does."
3984         x_cpp="$cc -E"
3985         x_minus='';
3986 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3987         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3988         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3989         echo "Yup, it does."
3990         x_cpp="$cc -E"
3991         x_minus='-';
3992 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3993         $cc -P <testcpp.c >testcpp.out 2>&1; \
3994         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3995         echo "Yipee, that works!"
3996         x_cpp="$cc -P"
3997         x_minus='';
3998 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3999         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4000         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4001         echo "At long last!"
4002         x_cpp="$cc -P"
4003         x_minus='-';
4004 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4005         $cpp <testcpp.c >testcpp.out 2>&1; \
4006         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4007         echo "It works!"
4008         x_cpp="$cpp"
4009         x_minus='';
4010 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4011         $cpp - <testcpp.c >testcpp.out 2>&1; \
4012         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4013         echo "Hooray, it works!  I was beginning to wonder."
4014         x_cpp="$cpp"
4015         x_minus='-';
4016 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4017         $wrapper <testcpp.c >testcpp.out 2>&1; \
4018         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4019         x_cpp="$wrapper"
4020         x_minus=''
4021         echo "Eureka!"
4022 else
4023         dflt=''
4024         rp="No dice.  I can't find a C preprocessor.  Name one:"
4025         . ./myread
4026         x_cpp="$ans"
4027         x_minus=''
4028         $x_cpp <testcpp.c >testcpp.out 2>&1
4029         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4030                 echo "OK, that will do." >&4
4031         else
4032 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4033                 exit 1
4034         fi
4035 fi
4036
4037 case "$ok" in
4038 false)
4039         cppstdin="$x_cpp"
4040         cppminus="$x_minus"
4041         cpprun="$x_cpp"
4042         cpplast="$x_minus"
4043         set X $x_cpp
4044         shift
4045         case "$1" in
4046         "$cpp")
4047                 echo "Perhaps can we force $cc -E using a wrapper..."
4048                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4049                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4050                 then
4051                         echo "Yup, we can."
4052                         cppstdin="$wrapper"
4053                         cppminus='';
4054                 else
4055                         echo "Nope, we'll have to live without it..."
4056                 fi
4057                 ;;
4058         esac
4059         case "$cpprun" in
4060         "$wrapper")
4061                 cpprun=''
4062                 cpplast=''
4063                 ;;
4064         esac
4065         ;;
4066 esac
4067
4068 case "$cppstdin" in
4069 "$wrapper"|'cppstdin') ;;
4070 *) $rm -f $wrapper;;
4071 esac
4072 $rm -f testcpp.c testcpp.out
4073
4074 : Set private lib path
4075 case "$plibpth" in
4076 '') if ./mips; then
4077                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4078         fi;;
4079 esac
4080 case "$libpth" in
4081 ' ') dlist='';;
4082 '') dlist="$loclibpth $plibpth $glibpth";;
4083 *) dlist="$libpth";;
4084 esac
4085
4086 : Now check and see which directories actually exist, avoiding duplicates
4087 libpth=''
4088 for xxx in $dlist
4089 do
4090     if $test -d $xxx; then
4091                 case " $libpth " in
4092                 *" $xxx "*) ;;
4093                 *) libpth="$libpth $xxx";;
4094                 esac
4095     fi
4096 done
4097 $cat <<'EOM'
4098
4099 Some systems have incompatible or broken versions of libraries.  Among
4100 the directories listed in the question below, please remove any you
4101 know not to be holding relevant libraries, and add any that are needed.
4102 Say "none" for none.
4103
4104 EOM
4105 case "$libpth" in
4106 '') dflt='none';;
4107 *)
4108         set X $libpth
4109         shift
4110         dflt=${1+"$@"}
4111         ;;
4112 esac
4113 rp="Directories to use for library searches?"
4114 . ./myread
4115 case "$ans" in
4116 none) libpth=' ';;
4117 *) libpth="$ans";;
4118 esac
4119
4120 : compute shared library extension
4121 case "$so" in
4122 '')
4123         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4124                 dflt='sl'
4125         else
4126                 dflt='so'
4127         fi
4128         ;;
4129 *) dflt="$so";;
4130 esac
4131 $cat <<EOM
4132
4133 On some systems, shared libraries may be available.  Answer 'none' if
4134 you want to suppress searching of shared libraries for the remaining
4135 of this configuration.
4136
4137 EOM
4138 rp='What is the file extension used for shared libraries?'
4139 . ./myread
4140 so="$ans"
4141
4142 : Define several unixisms.
4143 : Hints files or command line option can be used to override them.
4144 : The convoluted testing is in case hints files set either the old
4145 : or the new name.
4146 case "$_exe" in
4147 '')     case "$exe_ext" in
4148     '') ;;
4149         *)      _exe="$exe_ext" ;;
4150         esac
4151         ;;
4152 esac
4153 case "$_a" in
4154 '')     case "$lib_ext" in
4155     '') _a='.a';;
4156         *)      _a="$lib_ext" ;;
4157         esac
4158         ;;
4159 esac
4160 case "$_o" in
4161 '') case "$obj_ext" in
4162         '')     _o='.o';;
4163         *)      _o="$obj_ext";;
4164         esac
4165         ;;
4166 esac
4167 case "$p_" in
4168 '') case "$path_sep" in
4169         '')     p_=':';;
4170         *)      p_="$path_sep";;
4171         esac
4172         ;;
4173 esac
4174 exe_ext=$_exe
4175 lib_ext=$_a
4176 obj_ext=$_o
4177 path_sep=$p_
4178
4179 : Which makefile gets called first.  This is used by make depend.
4180 case "$firstmakefile" in
4181 '') firstmakefile='makefile';;
4182 esac
4183
4184 cat <<EOM
4185
4186 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4187 Configure must be run with -Dusesocks.
4188
4189 Normally you do not need this and you should answer no.
4190
4191 EOM
4192 case "$usesocks" in
4193 $define|true|[yY]*)     dflt='y';;
4194 *) dflt='n';;
4195 esac
4196 rp='Build Perl for SOCKS?'
4197 . ./myread
4198 case "$ans" in
4199 y|Y)    val="$define" ;;     
4200 *)      val="$undef" ;;
4201 esac
4202 set usesocks
4203 eval $setvar
4204
4205 : Looking for optional libraries
4206 echo " "
4207 echo "Checking for optional libraries..." >&4
4208 case "$libs" in
4209 ' '|'') dflt='';;
4210 *) dflt="$libs";;
4211 esac
4212 case "$libswanted" in
4213 '') libswanted='c_s';;
4214 esac
4215 case "$usesocks" in
4216 $define)
4217         libswanted="$libswanted socks5 socks5_sh"
4218         ;;
4219 esac
4220 for thislib in $libswanted; do
4221         
4222         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4223                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4224                 echo "Found -l$thislib (shared)."
4225                 case " $dflt " in
4226                 *"-l$thislib "*);;
4227                 *) dflt="$dflt -l$thislib";;
4228                 esac
4229         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4230                 echo "Found -l$thislib (shared)."
4231                 case " $dflt " in
4232                 *"-l$thislib "*);;
4233                 *) dflt="$dflt -l$thislib";;
4234                 esac
4235         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4236                 echo "Found -l$thislib."
4237                 case " $dflt " in
4238                 *"-l$thislib "*);;
4239                 *) dflt="$dflt -l$thislib";;
4240                 esac
4241         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4242                 echo "Found -l$thislib."
4243                 case " $dflt " in
4244                 *"-l$thislib "*);;
4245                 *) dflt="$dflt -l$thislib";;
4246                 esac
4247         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4248                 echo "Found -l${thislib}_s."
4249                 case " $dflt " in
4250                 *"-l$thislib "*);;
4251                 *) dflt="$dflt -l${thislib}_s";;
4252                 esac
4253         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4254                 echo "Found -l$thislib."
4255                 case " $dflt " in
4256                 *"-l$thislib "*);;
4257                 *) dflt="$dflt -l$thislib";;
4258                 esac
4259         else
4260                 echo "No -l$thislib."
4261         fi
4262 done
4263 set X $dflt
4264 shift
4265 dflt="$*"
4266 case "$libs" in
4267 '') dflt="$dflt";;
4268 *) dflt="$libs";;
4269 esac
4270 case "$dflt" in
4271 ' '|'') dflt='none';;
4272 esac
4273
4274 $cat <<EOM
4275
4276 In order to compile $package on your machine, a number of libraries
4277 are usually needed.  Include any other special libraries here as well.
4278 Say "none" for none.  The default list is almost always right.
4279 EOM
4280
4281 echo " "
4282 rp="What libraries to use?"
4283 . ./myread
4284 case "$ans" in
4285 none) libs=' ';;
4286 *) libs="$ans";;
4287 esac
4288
4289 : determine optimization, if desired, or use for debug flag also
4290 case "$optimize" in
4291 ' '|$undef) dflt='none';;
4292 '') dflt='-O';;
4293 *) dflt="$optimize";;
4294 esac
4295 $cat <<EOH
4296
4297 By default, $package compiles with the -O flag to use the optimizer.
4298 Alternately, you might want to use the symbolic debugger, which uses
4299 the -g flag (on traditional Unix systems).  Either flag can be
4300 specified here.  To use neither flag, specify the word "none".
4301
4302 EOH
4303 rp="What optimizer/debugger flag should be used?"
4304 . ./myread
4305 optimize="$ans"
4306 case "$optimize" in
4307 'none') optimize=" ";;
4308 esac
4309
4310 dflt=''
4311 : We will not override a previous value, but we might want to
4312 : augment a hint file
4313 case "$hint" in
4314 default|recommended)
4315         case "$gccversion" in
4316         1*) dflt='-fpcc-struct-return' ;;
4317         esac
4318         case "$optimize" in
4319         *-g*) dflt="$dflt -DDEBUGGING";;
4320         esac
4321         case "$gccversion" in
4322         2*) if test -d /etc/conf/kconfig.d &&
4323                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4324                 then
4325                         dflt="$dflt -posix"
4326                 fi
4327                 ;;
4328         esac
4329         case "$gccversion" in
4330         1*) ;;
4331         2.[0-8]*) ;;
4332         ?*)     echo " "
4333                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4334                 echo 'int main(void) { return 0; }' > gcctest.c
4335                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4336                         echo "Yes, it does." 2>&1
4337                         case "$ccflags" in
4338                         *strict-aliasing*) 
4339                                 echo "Leaving current flags $ccflags alone." 2>&1
4340                                 ;;
4341                         *) dflt="$dflt -fno-strict-aliasing" ;;
4342                         esac
4343                 else
4344                         echo "Nope, it doesn't, but that's ok." 2>&1
4345                 fi
4346                 ;;
4347         esac
4348         ;;
4349 esac
4350
4351 case "$mips_type" in
4352 *BSD*|'') inclwanted="$locincpth $usrinc";;
4353 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4354 esac
4355 for thisincl in $inclwanted; do
4356         if $test -d $thisincl; then
4357                 if $test x$thisincl != x$usrinc; then
4358                         case "$dflt" in
4359                         *$thisincl*);;
4360                         *) dflt="$dflt -I$thisincl";;
4361                         esac
4362                 fi
4363         fi
4364 done
4365
4366 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4367         xxx=true;
4368 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4369         xxx=true;
4370 else
4371         xxx=false;
4372 fi;
4373 if $xxx; then
4374         case "$dflt" in
4375         *$2*);;
4376         *) dflt="$dflt -D$2";;
4377         esac;
4378 fi'
4379
4380 set signal.h LANGUAGE_C; eval $inctest
4381
4382 case "$usesocks" in
4383 $define)
4384         ccflags="$ccflags -DSOCKS"
4385         ;;
4386 esac
4387
4388 case "$hint" in
4389 default|recommended) dflt="$ccflags $dflt" ;;
4390 *) dflt="$ccflags";;
4391 esac
4392
4393 case "$dflt" in
4394 ''|' ') dflt=none;;
4395 esac
4396 $cat <<EOH
4397
4398 Your C compiler may want other flags.  For this question you should include
4399 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4400 but you should NOT include libraries or ld flags like -lwhatever.  If you
4401 want $package to honor its debug switch, you should include -DDEBUGGING here.
4402 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4403
4404 To use no flags, specify the word "none".
4405
4406 EOH
4407 set X $dflt
4408 shift
4409 dflt=${1+"$@"}
4410 rp="Any additional cc flags?"
4411 . ./myread
4412 case "$ans" in
4413 none) ccflags='';;
4414 *) ccflags="$ans";;
4415 esac
4416
4417 : the following weeds options from ccflags that are of no interest to cpp
4418 cppflags="$ccflags"
4419 case "$gccversion" in
4420 1*) cppflags="$cppflags -D__GNUC__"
4421 esac
4422 case "$mips_type" in
4423 '');;
4424 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4425 esac
4426 case "$cppflags" in
4427 '');;
4428 *)
4429         echo " "
4430         echo "Let me guess what the preprocessor flags are..." >&4
4431         set X $cppflags
4432         shift
4433         cppflags=''
4434         $cat >cpp.c <<'EOM'
4435 #define BLURFL foo
4436
4437 BLURFL xx LFRULB
4438 EOM
4439         previous=''
4440         for flag in $*
4441         do
4442                 case "$flag" in
4443                 -*) ftry="$flag";;
4444                 *) ftry="$previous $flag";;
4445                 esac
4446                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4447                         >cpp1.out 2>/dev/null && \
4448                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4449                         >cpp2.out 2>/dev/null && \
4450                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4451                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4452                 then
4453                         cppflags="$cppflags $ftry"
4454                         previous=''
4455                 else
4456                         previous="$flag"
4457                 fi
4458         done
4459         set X $cppflags
4460         shift
4461         cppflags=${1+"$@"}
4462         case "$cppflags" in
4463         *-*)  echo "They appear to be: $cppflags";;
4464         esac
4465         $rm -f cpp.c cpp?.out
4466         ;;
4467 esac
4468
4469 : flags used in final linking phase
4470 case "$ldflags" in
4471 '') if ./venix; then
4472                 dflt='-i -z'
4473         else
4474                 dflt=''
4475         fi
4476         case "$ccflags" in
4477         *-posix*) dflt="$dflt -posix" ;;
4478         esac
4479         ;;
4480 *) dflt="$ldflags";;
4481 esac
4482
4483 : Try to guess additional flags to pick up local libraries.
4484 for thislibdir in $libpth; do
4485         case " $loclibpth " in
4486         *" $thislibdir "*)
4487                 case "$dflt " in 
4488                 *"-L$thislibdir "*) ;;
4489                 *)  dflt="$dflt -L$thislibdir" ;;
4490                 esac
4491                 ;;
4492         esac
4493 done
4494
4495 case "$dflt" in
4496 '') dflt='none' ;;
4497 esac
4498
4499 $cat <<EOH
4500
4501 Your C linker may need flags.  For this question you should
4502 include -L/whatever and any other flags used by the C linker, but you
4503 should NOT include libraries like -lwhatever.
4504
4505 Make sure you include the appropriate -L/path flags if your C linker
4506 does not normally search all of the directories you specified above,
4507 namely
4508         $libpth
4509 To use no flags, specify the word "none".
4510
4511 EOH
4512
4513 rp="Any additional ld flags (NOT including libraries)?"
4514 . ./myread
4515 case "$ans" in
4516 none) ldflags='';;
4517 *) ldflags="$ans";;
4518 esac
4519 rmlist="$rmlist pdp11"
4520
4521 : coherency check
4522 echo " "
4523 echo "Checking your choice of C compiler and flags for coherency..." >&4
4524 $cat > try.c <<'EOF'
4525 #include <stdio.h>
4526 int main() { printf("Ok\n"); exit(0); }
4527 EOF
4528 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4529 shift
4530 $cat >try.msg <<'EOM'
4531 I've tried to compile and run the following simple program:
4532
4533 EOM
4534 $cat try.c >> try.msg
4535
4536 $cat >> try.msg <<EOM
4537
4538 I used the command:
4539
4540         $*
4541         ./try
4542
4543 and I got the following output:
4544
4545 EOM
4546 dflt=y
4547 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4548         if sh -c './try' >>try.msg 2>&1; then
4549                 xxx=`./try`
4550                 case "$xxx" in
4551                 "Ok") dflt=n ;;
4552                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4553                         case " $libs " in
4554                         *" -lsfio "*)
4555                                 cat >> try.msg <<'EOQS'
4556 If $libs contains -lsfio, and sfio is mis-configured, then it
4557 sometimes (apparently) runs and exits with a 0 status, but with no
4558 output!  It may have to do with sfio's use of _exit vs. exit.
4559
4560 EOQS
4561                                 rp="You have a big problem.  Shall I abort Configure"
4562                                 dflt=y
4563                                 ;;
4564                         esac
4565                         ;;
4566                 esac
4567         else
4568                 echo "The program compiled OK, but exited with status $?." >>try.msg
4569                 rp="You have a problem.  Shall I abort Configure"
4570                 dflt=y
4571         fi
4572 else
4573         echo "I can't compile the test program." >>try.msg
4574         rp="You have a BIG problem.  Shall I abort Configure"
4575         dflt=y
4576 fi
4577 case "$dflt" in
4578 y)
4579         $cat try.msg >&4
4580         case "$knowitall" in
4581         '')
4582                 echo "(The supplied flags or libraries might be incorrect.)"
4583                 ;;
4584         *) dflt=n;;
4585         esac
4586         echo " "
4587         . ./myread
4588         case "$ans" in
4589         n*|N*) ;;
4590         *)      echo "Ok.  Stopping Configure." >&4
4591                 exit 1
4592                 ;;
4593         esac
4594         ;;
4595 n) echo "OK, that should do.";;
4596 esac
4597 $rm -f try try.* core
4598
4599 : determine filename position in cpp output
4600 echo " "
4601 echo "Computing filename position in cpp output for #include directives..." >&4
4602 echo '#include <stdio.h>' > foo.c
4603 $cat >fieldn <<EOF
4604 $startsh
4605 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4606 $grep '^[       ]*#.*stdio\.h' | \
4607 while read cline; do
4608         pos=1
4609         set \$cline
4610         while $test \$# -gt 0; do
4611                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4612                         echo "\$pos"
4613                         exit 0
4614                 fi
4615                 shift
4616                 pos=\`expr \$pos + 1\`
4617         done
4618 done
4619 EOF
4620 chmod +x fieldn
4621 fieldn=`./fieldn`
4622 $rm -f foo.c fieldn
4623 case $fieldn in
4624 '') pos='???';;
4625 1) pos=first;;
4626 2) pos=second;;
4627 3) pos=third;;
4628 *) pos="${fieldn}th";;
4629 esac
4630 echo "Your cpp writes the filename in the $pos field of the line."
4631
4632 : locate header file
4633 $cat >findhdr <<EOF
4634 $startsh
4635 wanted=\$1
4636 name=''
4637 for usrincdir in $usrinc
4638 do
4639         if test -f \$usrincdir/\$wanted; then
4640                 echo "\$usrincdir/\$wanted"
4641                 exit 0
4642         fi
4643 done
4644 awkprg='{ print \$$fieldn }'
4645 echo "#include <\$wanted>" > foo\$\$.c
4646 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4647 $grep "^[       ]*#.*\$wanted" | \
4648 while read cline; do
4649         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4650         case "\$name" in
4651         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4652         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4653         *) exit 2;;
4654         esac;
4655 done;
4656 #
4657 # status = 0: grep returned 0 lines, case statement not executed
4658 # status = 1: headerfile found
4659 # status = 2: while loop executed, no headerfile found
4660 #
4661 status=\$?
4662 $rm -f foo\$\$.c;
4663 if test \$status -eq 1; then
4664         exit 0;
4665 fi
4666 exit 1
4667 EOF
4668 chmod +x findhdr
4669
4670 : define an alternate in-header-list? function
4671 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4672 cont=true; xxf="echo \"<\$1> found.\" >&4";
4673 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4674 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4675 esac;
4676 case $# in 4) instead=instead;; *) instead="at last";; esac;
4677 while $test "$cont"; do
4678         xxx=`./findhdr $1`
4679         var=$2; eval "was=\$$2";
4680         if $test "$xxx" && $test -r "$xxx";
4681         then eval $xxf;
4682         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4683                 cont="";
4684         else eval $xxnf;
4685         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4686         set $yyy; shift; shift; yyy=$@;
4687         case $# in 0) cont="";;
4688         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4689                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4690         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4691                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4692         esac;
4693 done;
4694 while $test "$yyy";
4695 do set $yyy; var=$2; eval "was=\$$2";
4696         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4697         set $yyy; shift; shift; yyy=$@;
4698 done'
4699
4700 : see if this is a malloc.h system
4701 set malloc.h i_malloc
4702 eval $inhdr
4703
4704 : see if stdlib is available
4705 set stdlib.h i_stdlib
4706 eval $inhdr
4707
4708 : determine which malloc to compile in
4709 echo " "
4710 case "$usemymalloc" in
4711 ''|[yY]*|true|$define)  dflt='y' ;;
4712 *)      dflt='n' ;;
4713 esac
4714 rp="Do you wish to attempt to use the malloc that comes with $package?"
4715 . ./myread
4716 usemymalloc="$ans"
4717 case "$ans" in
4718 y*|true)
4719         usemymalloc='y'
4720         mallocsrc='malloc.c'
4721         mallocobj="malloc$_o"
4722         d_mymalloc="$define"
4723         case "$libs" in
4724         *-lmalloc*)
4725                 : Remove malloc from list of libraries to use
4726                 echo "Removing unneeded -lmalloc from library list" >&4
4727                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4728                 shift
4729                 libs="$*"
4730                 echo "libs = $libs" >&4
4731                 ;;
4732         esac
4733         ;;
4734 *)
4735         usemymalloc='n'
4736         mallocsrc=''
4737         mallocobj=''
4738         d_mymalloc="$undef"
4739         ;;
4740 esac
4741
4742 : compute the return types of malloc and free
4743 echo " "
4744 $cat >malloc.c <<END
4745 #$i_malloc I_MALLOC
4746 #$i_stdlib I_STDLIB
4747 #include <stdio.h>
4748 #include <sys/types.h>
4749 #ifdef I_MALLOC
4750 #include <malloc.h>
4751 #endif
4752 #ifdef I_STDLIB
4753 #include <stdlib.h>
4754 #endif
4755 #ifdef TRY_MALLOC
4756 void *malloc();
4757 #endif
4758 #ifdef TRY_FREE
4759 void free();
4760 #endif
4761 END
4762 case "$malloctype" in
4763 '')
4764         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4765                 malloctype='void *'
4766         else
4767                 malloctype='char *'
4768         fi
4769         ;;
4770 esac
4771 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4772
4773 case "$freetype" in
4774 '')
4775         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4776                 freetype='void'
4777         else
4778                 freetype='int'
4779         fi
4780         ;;
4781 esac
4782 echo "Your system uses $freetype free(), it would seem." >&4
4783 $rm -f malloc.[co]
4784 $cat <<EOM
4785
4786 The installation process will also create a directory for
4787 vendor-supplied add-ons.  Vendors who supply perl with their system
4788 may find it convenient to place all vendor-supplied files in this
4789 directory rather than in the main distribution directory.  This will
4790 ease upgrades between binary-compatible maintenance versions of perl.
4791
4792 Of course you may also use these directories in whatever way you see
4793 fit.  For example, you might use them to access modules shared over a
4794 company-wide network.
4795
4796 The default answer should be fine for most people.
4797 This causes further questions about vendor add-ons to be skipped
4798 and no vendor-specific directories will be configured for perl.
4799
4800 EOM
4801 rp='Do you want to configure vendor-specific add-on directories?'
4802 case "$usevendorprefix" in
4803 define|true|[yY]*) dflt=y ;;
4804 *) dflt=n ;;
4805 esac
4806 . ./myread
4807 case "$ans" in
4808 [yY]*)  fn=d~+
4809         rp='Installation prefix to use for vendor-supplied add-ons?'
4810         case "$vendorprefix" in
4811         '') dflt='' ;;
4812         *)  dflt=$vendorprefix ;;
4813         esac
4814         . ./getfile
4815         oldvendorprefix=''
4816         case "$vendorprefix" in
4817         '') ;;
4818         *)      case "$ans" in
4819                 "$prefix") ;;
4820                 *) oldvendorprefix="$prefix";;
4821                 esac
4822                 ;;
4823         esac
4824         usevendorprefix="$define"
4825         vendorprefix="$ans"
4826         vendorprefixexp="$ansexp"
4827         ;;
4828 *)      usevendorprefix="$undef"
4829         vendorprefix=''
4830         vendorprefixexp=''
4831         ;;
4832 esac
4833
4834 case "$vendorprefix" in
4835 '')     d_vendorlib="$undef"
4836         vendorlib=''
4837         vendorlibexp=''
4838         ;;
4839 *)      d_vendorlib="$define"
4840         : determine where vendor-supplied modules go.
4841         : Usual default is /usr/local/lib/perl5/vendor_perl
4842         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4843         case "$installstyle" in
4844         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4845         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4846         esac
4847         fn=d~+
4848         rp='Pathname for the vendor-supplied library files?'
4849         . ./getfile
4850         vendorlib="$ans"
4851         vendorlibexp="$ansexp"
4852         : Change installation prefix, if necessary.
4853         if $test X"$prefix" != X"$installprefix"; then
4854                 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
4855         else
4856                 installvendorlib="$vendorlibexp"
4857         fi
4858         ;;
4859 esac
4860
4861 : Cruising for prototypes
4862 echo " "
4863 echo "Checking out function prototypes..." >&4
4864 $cat >prototype.c <<'EOCP'
4865 int main(int argc, char *argv[]) {
4866         exit(0);}
4867 EOCP
4868 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4869         echo "Your C compiler appears to support function prototypes."
4870         val="$define"
4871 else
4872         echo "Your C compiler doesn't seem to understand function prototypes."
4873         val="$undef"
4874 fi
4875 set prototype
4876 eval $setvar
4877 $rm -f prototype*
4878
4879 case "$prototype" in
4880 "$define") ;;
4881 *)      ansi2knr='ansi2knr'
4882         echo " "
4883         cat <<EOM >&4
4884
4885 $me:  FATAL ERROR:
4886 This version of $package can only be compiled by a compiler that 
4887 understands function prototypes.  Unfortunately, your C compiler 
4888         $cc $ccflags
4889 doesn't seem to understand them.  Sorry about that.
4890
4891 If GNU cc is available for your system, perhaps you could try that instead.  
4892
4893 Eventually, we hope to support building Perl with pre-ANSI compilers.
4894 If you would like to help in that effort, please contact <perlbug@perl.org>.
4895
4896 Aborting Configure now.
4897 EOM
4898         exit 2
4899         ;;
4900 esac
4901
4902 : determine where public executables go
4903 echo " "
4904 set dflt bin bin
4905 eval $prefixit
4906 fn=d~
4907 rp='Pathname where the public executables will reside?'
4908 . ./getfile
4909 if $test "X$ansexp" != "X$binexp"; then
4910         installbin=''
4911 fi
4912 bin="$ans"
4913 binexp="$ansexp"
4914 : Change installation prefix, if necessary.
4915 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4916 if $test X"$prefix" != X"$installprefix"; then
4917         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
4918 else
4919         installbin="$binexp"
4920 fi
4921
4922 : determine whether to install perl also as /usr/bin/perl
4923
4924 echo " "
4925 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4926         $cat <<EOM
4927 Many scripts expect to perl to be installed as /usr/bin/perl.
4928 I can install the perl you are about to compile also as /usr/bin/perl
4929 (in addition to $installbin/perl).
4930 EOM
4931         case "$installusrbinperl" in
4932         "$undef"|[nN]*) dflt='n';;
4933         *)              dflt='y';;
4934         esac
4935         rp="Do you want to install perl as /usr/bin/perl?"
4936         . ./myread
4937         case "$ans" in
4938         [yY]*)  val="$define";;
4939         *)      val="$undef" ;;
4940         esac
4941 else
4942         val="$undef"
4943 fi
4944 set installusrbinperl
4945 eval $setvar
4946
4947 : define a shorthand compile call
4948 compile='
4949 mc_file=$1;
4950 shift;
4951 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4952 : define a shorthand compile call for compilations that should be ok.
4953 compile_ok='
4954 mc_file=$1;
4955 shift;
4956 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4957
4958 echo " "
4959 echo "Checking for GNU C Library..." >&4
4960 cat >gnulibc.c <<EOM
4961 #include <stdio.h>
4962 int main()
4963 {
4964 #ifdef __GLIBC__
4965     exit(0);
4966 #else
4967     exit(1);
4968 #endif
4969 }
4970 EOM
4971 set gnulibc
4972 if eval $compile_ok && ./gnulibc; then
4973         val="$define"
4974         echo "You are using the GNU C Library"
4975 else
4976         val="$undef"
4977         echo "You are not using the GNU C Library"
4978 fi
4979 $rm -f gnulibc*
4980 set d_gnulibc
4981 eval $setvar
4982
4983 : see if nm is to be used to determine whether a symbol is defined or not
4984 case "$usenm" in
4985 '')
4986         dflt=''
4987         case "$d_gnulibc" in
4988         "$define")
4989                 echo " "
4990                 echo "nm probably won't work on the GNU C Library." >&4
4991                 dflt=n
4992                 ;;
4993         esac
4994         case "$dflt" in
4995         '') 
4996                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4997                         echo " "
4998                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4999                         echo "'nm' won't be sufficient on this sytem." >&4
5000                         dflt=n
5001                 fi
5002                 ;;
5003         esac
5004         case "$dflt" in
5005         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5006                 if $test $dflt -gt 20; then
5007                         dflt=y
5008                 else
5009                         dflt=n
5010                 fi
5011                 ;;
5012         esac
5013         ;;
5014 *)
5015         case "$usenm" in
5016         true|$define) dflt=y;;
5017         *) dflt=n;;
5018         esac
5019         ;;
5020 esac
5021 $cat <<EOM
5022
5023 I can use $nm to extract the symbols from your C libraries. This
5024 is a time consuming task which may generate huge output on the disk (up
5025 to 3 megabytes) but that should make the symbols extraction faster. The
5026 alternative is to skip the 'nm' extraction part and to compile a small
5027 test program instead to determine whether each symbol is present. If
5028 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5029 this may be the best solution.
5030
5031 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5032
5033 EOM
5034 rp="Shall I use $nm to extract C symbols from the libraries?"
5035 . ./myread
5036 case "$ans" in
5037 [Nn]*) usenm=false;;
5038 *) usenm=true;;
5039 esac
5040
5041 runnm=$usenm
5042 case "$reuseval" in
5043 true) runnm=false;;
5044 esac
5045
5046 : nm options which may be necessary
5047 case "$nm_opt" in
5048 '') if $test -f /mach_boot; then
5049                 nm_opt=''       # Mach
5050         elif $test -d /usr/ccs/lib; then
5051                 nm_opt='-p'     # Solaris (and SunOS?)
5052         elif $test -f /dgux; then
5053                 nm_opt='-p'     # DG-UX
5054         elif $test -f /lib64/rld; then
5055                 nm_opt='-p'     # 64-bit Irix
5056         else
5057                 nm_opt=''
5058         fi;;
5059 esac
5060
5061 : nm options which may be necessary for shared libraries but illegal
5062 : for archive libraries.  Thank you, Linux.
5063 case "$nm_so_opt" in
5064 '')     case "$myuname" in
5065         *linux*)
5066                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5067                         nm_so_opt='--dynamic'
5068                 fi
5069                 ;;
5070         esac
5071         ;;
5072 esac
5073
5074 case "$runnm" in
5075 true)
5076 : get list of predefined functions in a handy place
5077 echo " "
5078 case "$libc" in
5079 '') libc=unknown
5080         case "$libs" in
5081         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5082         esac
5083         ;;
5084 esac
5085 libnames='';
5086 case "$libs" in
5087 '') ;;
5088 *)  for thislib in $libs; do
5089         case "$thislib" in
5090         -lc|-lc_s)
5091                 : Handle C library specially below.
5092                 ;;
5093         -l*)
5094                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5095                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5096                         :
5097                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5098                         :
5099                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5100                         :
5101                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5102                         :
5103                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5104                         :
5105                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5106                         :
5107                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5108                         :
5109                 else
5110                         try=''
5111                 fi
5112                 libnames="$libnames $try"
5113                 ;;
5114         *) libnames="$libnames $thislib" ;;
5115         esac
5116         done
5117         ;;
5118 esac
5119 xxx=normal
5120 case "$libc" in
5121 unknown)
5122         set /lib/libc.$so
5123         for xxx in $libpth; do
5124                 $test -r $1 || set $xxx/libc.$so
5125                 : The messy sed command sorts on library version numbers.
5126                 $test -r $1 || \
5127                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5128                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5129                                 h
5130                                 s/[0-9][0-9]*/0000&/g
5131                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5132                                 G
5133                                 s/\n/ /' | \
5134                          sort | $sed -e 's/^.* //'`
5135                 eval set \$$#
5136         done
5137         $test -r $1 || set /usr/ccs/lib/libc.$so
5138         $test -r $1 || set /lib/libsys_s$_a
5139         ;;
5140 *)
5141         set blurfl
5142         ;;
5143 esac
5144 if $test -r "$1"; then
5145         echo "Your (shared) C library seems to be in $1."
5146         libc="$1"
5147 elif $test -r /lib/libc && $test -r /lib/clib; then
5148         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5149         xxx=apollo
5150         libc='/lib/clib /lib/libc'
5151         if $test -r /lib/syslib; then
5152                 echo "(Your math library is in /lib/syslib.)"
5153                 libc="$libc /lib/syslib"
5154         fi
5155 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5156         echo "Your C library seems to be in $libc, as you said before."
5157 elif $test -r $incpath/usr/lib/libc$_a; then
5158         libc=$incpath/usr/lib/libc$_a;
5159         echo "Your C library seems to be in $libc.  That's fine."
5160 elif $test -r /lib/libc$_a; then
5161         libc=/lib/libc$_a;
5162         echo "Your C library seems to be in $libc.  You're normal."
5163 else
5164         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5165                 :
5166         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5167                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5168         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5169                 :
5170         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5171                 :
5172         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5173                 :
5174         else
5175                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5176         fi
5177         if $test -r "$tans"; then
5178                 echo "Your C library seems to be in $tans, of all places."
5179                 libc=$tans
5180         else
5181                 libc='blurfl'
5182         fi
5183 fi
5184 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5185         dflt="$libc"
5186         cat <<EOM
5187
5188 If the guess above is wrong (which it might be if you're using a strange
5189 compiler, or your machine supports multiple models), you can override it here.
5190
5191 EOM
5192 else
5193         dflt=''
5194         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5195         cat >&4 <<EOM
5196 I can't seem to find your C library.  I've looked in the following places:
5197
5198 EOM
5199         $sed 's/^/      /' libpath
5200         cat <<EOM
5201
5202 None of these seems to contain your C library. I need to get its name...
5203
5204 EOM
5205 fi
5206 fn=f
5207 rp='Where is your C library?'
5208 . ./getfile
5209 libc="$ans"
5210
5211 echo " "
5212 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5213 set X `cat libnames`
5214 shift
5215 xxx=files
5216 case $# in 1) xxx=file; esac
5217 echo "Extracting names from the following $xxx for later perusal:" >&4
5218 echo " "
5219 $sed 's/^/      /' libnames >&4
5220 echo " "
5221 $echo $n "This may take a while...$c" >&4
5222
5223 for file in $*; do
5224         case $file in
5225         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5226         *) $nm $nm_opt $file 2>/dev/null;;
5227         esac
5228 done >libc.tmp
5229
5230 $echo $n ".$c"
5231 $grep fprintf libc.tmp > libc.ptf
5232 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5233 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5234 xxx='[ADTSIW]'
5235 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5236         eval $xscan;\
5237         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5238                 eval $xrun
5239 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5240         eval $xscan;\
5241         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5242                 eval $xrun
5243 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5244         eval $xscan;\
5245         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5246                 eval $xrun
5247 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5248         eval $xscan;\
5249         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5250                 eval $xrun
5251 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5252         eval $xscan;\
5253         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5254                 eval $xrun
5255 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5256         eval $xscan;\
5257         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5258                 eval $xrun
5259 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5260                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5261         eval $xscan;\
5262         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5263                 eval $xrun
5264 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5265         eval $xscan;\
5266         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5267                 eval $xrun
5268 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5269         eval $xscan;\
5270         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5271                 eval $xrun
5272 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5273         eval $xscan;\
5274         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5275                 eval $xrun
5276 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5277         eval $xscan;\
5278         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5279                 eval $xrun
5280 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5281         eval $xscan;\
5282         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5283                 eval $xrun
5284 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5285         eval $xscan;\
5286         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5287                 eval $xrun
5288 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5289         eval $xscan;\
5290         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5291                 eval $xrun
5292 else
5293         $nm -p $* 2>/dev/null >libc.tmp
5294         $grep fprintf libc.tmp > libc.ptf
5295         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5296                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5297         then
5298                 nm_opt='-p'
5299                 eval $xrun
5300         else
5301                 echo " "
5302                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5303                 com=''
5304                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5305                         for thisname in $libnames $libc; do
5306                                 $ar t $thisname >>libc.tmp
5307                         done
5308                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5309                         echo "Ok." >&4
5310                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5311                         # Repeat libc to extract forwarders to DLL entries too
5312                         for thisname in $libnames $libc; do
5313                                 $ar tv $thisname >>libc.tmp
5314                                 # Revision 50 of EMX has bug in $ar.
5315                                 # it will not extract forwarders to DLL entries
5316                                 # Use emximp which will extract exactly them.
5317                                 emximp -o tmp.imp $thisname \
5318                                     2>/dev/null && \
5319                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5320                                     < tmp.imp >>libc.tmp
5321                                 $rm tmp.imp
5322                         done
5323                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5324                         echo "Ok." >&4
5325                 else
5326                         echo "$ar didn't seem to work right." >&4
5327                         echo "Maybe this is a Cray...trying bld instead..." >&4
5328                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5329                         then
5330                                 for thisname in $libnames; do
5331                                         bld t $libnames | \
5332                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5333                                         $ar t $thisname >>libc.tmp
5334                                 done
5335                                 echo "Ok." >&4
5336                         else
5337                                 echo "That didn't work either.  Giving up." >&4
5338                                 exit 1
5339                         fi
5340                 fi
5341         fi
5342 fi
5343 nm_extract="$com"
5344 if $test -f /lib/syscalls.exp; then
5345         echo " "
5346         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5347         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5348 fi
5349 ;;
5350 esac
5351 $rm -f libnames libpath
5352
5353 : see if dld is available
5354 set dld.h i_dld
5355 eval $inhdr
5356
5357 : is a C symbol defined?
5358 csym='tlook=$1;
5359 case "$3" in
5360 -v) tf=libc.tmp; tc=""; tdc="";;
5361 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5362 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5363 esac;
5364 tx=yes;
5365 case "$reuseval-$4" in
5366 true-) ;;
5367 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5368 esac;
5369 case "$tx" in
5370 yes)
5371         case "$runnm" in
5372         true)
5373                 if $contains $tlook $tf >/dev/null 2>&1;
5374                 then tval=true;
5375                 else tval=false;
5376                 fi;;
5377         *)
5378                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5379                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5380                 then tval=true;
5381                 else tval=false;
5382                 fi;
5383                 $rm -f t t.c;;
5384         esac;;
5385 *)
5386         case "$tval" in
5387         $define) tval=true;;
5388         *) tval=false;;
5389         esac;;
5390 esac;
5391 eval "$2=$tval"'
5392
5393 : define an is-in-libc? function
5394 inlibc='echo " "; td=$define; tu=$undef;
5395 sym=$1; var=$2; eval "was=\$$2";
5396 tx=yes;
5397 case "$reuseval$was" in
5398 true) ;;
5399 true*) tx=no;;
5400 esac;
5401 case "$tx" in
5402 yes)
5403         set $sym tres -f;
5404         eval $csym;
5405         case "$tres" in
5406         true)
5407                 echo "$sym() found." >&4;
5408                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5409         *)
5410                 echo "$sym() NOT found." >&4;
5411                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5412         esac;;
5413 *)
5414         case "$was" in
5415         $define) echo "$sym() found." >&4;;
5416         *) echo "$sym() NOT found." >&4;;
5417         esac;;
5418 esac'
5419
5420 : see if dlopen exists
5421 xxx_runnm="$runnm"
5422 runnm=false
5423 set dlopen d_dlopen
5424 eval $inlibc
5425 runnm="$xxx_runnm"
5426
5427 : determine which dynamic loading, if any, to compile in
5428 echo " "
5429 dldir="ext/DynaLoader"
5430 case "$usedl" in
5431 $define|y|true)
5432         dflt='y'
5433         usedl="$define"
5434         ;;
5435 $undef|n|false)
5436         dflt='n'
5437         usedl="$undef"
5438         ;;
5439 *) 
5440         dflt='n'
5441         case "$d_dlopen" in
5442             $define) dflt='y' ;;
5443         esac
5444         case "$i_dld" in
5445             $define) dflt='y' ;;
5446         esac
5447         : Does a dl_xxx.xs file exist for this operating system
5448         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5449         ;;
5450 esac
5451 rp="Do you wish to use dynamic loading?"
5452 . ./myread
5453 usedl="$ans"
5454 case "$ans" in
5455 y*) usedl="$define"
5456         case "$dlsrc" in
5457         '')
5458                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5459                         dflt="$dldir/dl_${osname}.xs"
5460                 elif $test "$d_dlopen" = "$define" ; then
5461                         dflt="$dldir/dl_dlopen.xs"
5462                 elif $test "$i_dld" = "$define" ; then
5463                         dflt="$dldir/dl_dld.xs"
5464                 else
5465                         dflt=''
5466                 fi
5467                 ;;
5468         *)      dflt="$dldir/$dlsrc"
5469                 ;;
5470         esac
5471     echo "The following dynamic loading files are available:"
5472         : Can not go over to $dldir because getfile has path hard-coded in.
5473         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5474         rp="Source file to use for dynamic loading"
5475         fn="fne"
5476         gfpth="$src"
5477         . ./getfile
5478         usedl="$define"
5479         : emulate basename
5480         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5481
5482         $cat << EOM
5483
5484 Some systems may require passing special flags to $cc -c to
5485 compile modules that will be used to create a shared library.
5486 To use no flags, say "none".
5487
5488 EOM
5489     case "$cccdlflags" in
5490     '') case "$gccversion" in
5491                 '') case "$osname" in
5492                         hpux)   dflt='+z' ;;
5493                         next)   dflt='none' ;;
5494                         irix*)  dflt='-KPIC' ;;
5495                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5496                         sunos)  dflt='-pic' ;;
5497                         *)      dflt='none' ;;
5498                     esac
5499                         ;;
5500                 *)  case "$osname" in
5501                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5502                         *)      dflt='-fpic' ;;
5503                     esac ;;
5504             esac ;;
5505         ' ') dflt='none' ;;
5506     *)  dflt="$cccdlflags" ;;
5507     esac
5508     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5509     . ./myread
5510     case "$ans" in
5511     none) cccdlflags=' ' ;;
5512     *) cccdlflags="$ans" ;;
5513     esac
5514
5515     cat << EOM
5516
5517 Some systems use ld to create libraries that can be dynamically loaded,
5518 while other systems (such as those using ELF) use $cc.
5519
5520 EOM
5521         case "$ld" in
5522         '')     $cat >try.c <<'EOM'
5523 /* Test for whether ELF binaries are produced */
5524 #include <fcntl.h>
5525 #include <stdlib.h>
5526 int main() {
5527         char b[4];
5528         int i = open("a.out",O_RDONLY);
5529         if(i == -1) 
5530                 exit(1); /* fail */
5531         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5532                 exit(0); /* succeed (yes, it's ELF) */
5533         else
5534                 exit(1); /* fail */
5535 }
5536 EOM
5537                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5538                         cat <<EOM
5539 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5540 EOM
5541                         dflt="$cc"
5542                 else
5543                         echo "I'll use ld to build dynamic libraries."
5544                         dflt='ld'
5545                 fi
5546                 rm -f try.c a.out
5547                 ;;
5548         *)      dflt="$ld"
5549                 ;;
5550         esac
5551
5552     rp="What command should be used to create dynamic libraries?"
5553     . ./myread
5554         ld="$ans"
5555
5556     cat << EOM
5557
5558 Some systems may require passing special flags to $ld to create a
5559 library that can be dynamically loaded.  If your ld flags include
5560 -L/other/path options to locate libraries outside your loader's normal
5561 search path, you may need to specify those -L options here as well.  To
5562 use no flags, say "none".
5563
5564 EOM
5565     case "$lddlflags" in
5566     '') case "$osname" in
5567                         beos) dflt='-nostart' ;;
5568                         hpux)  dflt='-b' ;;
5569                         linux|irix*)    dflt='-shared' ;;
5570                         next)  dflt='none' ;;
5571                         solaris) dflt='-G' ;;
5572                         sunos) dflt='-assert nodefinitions' ;;
5573                         svr4*|esix*) dflt="-G $ldflags" ;;
5574                 *)     dflt='none' ;;
5575                         esac
5576                         ;;
5577     *) dflt="$lddlflags" ;;
5578     esac
5579
5580         : Try to guess additional flags to pick up local libraries.
5581         : Be careful not to append to a plain 'none'
5582         case "$dflt" in
5583         none) dflt='' ;;
5584         esac
5585         for thisflag in $ldflags; do
5586                 case "$thisflag" in
5587                 -L*)
5588                         case " $dflt " in
5589                         *" $thisflag "*) ;;
5590                         *) dflt="$dflt $thisflag" ;;
5591                         esac
5592                         ;;
5593                 esac
5594         done
5595
5596         case "$dflt" in
5597         ''|' ') dflt='none' ;;
5598         esac
5599
5600     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5601     . ./myread
5602     case "$ans" in
5603     none) lddlflags=' ' ;;
5604     *) lddlflags="$ans" ;;
5605     esac
5606
5607         cat <<EOM
5608
5609 Some systems may require passing special flags to $cc to indicate that
5610 the resulting executable will use dynamic linking.  To use no flags,
5611 say "none".
5612
5613 EOM
5614     case "$ccdlflags" in
5615     '') case "$osname" in
5616                 hpux)   dflt='-Wl,-E' ;;
5617                 linux)  dflt='-rdynamic' ;;
5618                 next)   dflt='none' ;;
5619                 sunos)  dflt='none' ;;
5620                 *)      dflt='none' ;;
5621             esac ;;
5622     ' ')  dflt='none' ;;
5623     *)  dflt="$ccdlflags" ;;
5624     esac
5625     rp="Any special flags to pass to $cc to use dynamic loading?"
5626     . ./myread
5627     case "$ans" in
5628     none) ccdlflags=' ' ;;
5629     *) ccdlflags="$ans" ;;
5630     esac
5631     ;;
5632 *)  usedl="$undef"
5633         ld='ld'
5634     dlsrc='dl_none.xs'
5635     lddlflags=''
5636     ccdlflags=''
5637     ;;
5638 esac
5639
5640 also=''
5641 case "$usedl" in
5642 $undef)
5643         # No dynamic loading being used, so don't bother even to prompt.
5644         useshrplib='false'
5645         ;;
5646 *)      case "$useshrplib" in
5647         '')     case "$osname" in
5648                 svr4*|dgux|dynixptx|esix|powerux|beos)
5649                         dflt=y
5650                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5651                         ;;
5652                 next*)
5653                         case "$osvers" in
5654                         4*)     dflt=y
5655                                 also='Building a shared libperl is needed for MAB support.'
5656                                 ;;
5657                         *)      dflt=n
5658                                 ;;
5659                         esac
5660                         ;;
5661                 *)      dflt=n
5662                         ;;
5663                 esac
5664                 ;;
5665         $define|true|[Yy]*)
5666                 dflt=y
5667                 ;;
5668         *)      dflt=n
5669                 ;;
5670         esac
5671         $cat << EOM
5672
5673 The perl executable is normally obtained by linking perlmain.c with
5674 libperl${_a}, any static extensions (usually just DynaLoader), and
5675 any other libraries needed on this system (such as -lm, etc.).  Since
5676 your system supports dynamic loading, it is probably possible to build
5677 a shared libperl.$so.  If you will have more than one executable linked
5678 to libperl.$so, this will significantly reduce the size of each
5679 executable, but it may have a noticeable affect on performance.  The
5680 default is probably sensible for your system.
5681 $also
5682
5683 EOM
5684         rp="Build a shared libperl.$so (y/n)"
5685         . ./myread
5686         case "$ans" in
5687         true|$define|[Yy]*)
5688                 useshrplib='true'  ;;
5689         *)      useshrplib='false' ;;
5690         esac
5691         ;;
5692 esac
5693
5694 case "$useshrplib" in
5695 true)
5696         case "$libperl" in
5697         '')
5698                 # Figure out a good name for libperl.so.  Since it gets stored in
5699                 # a version-specific architecture-dependent library, the version
5700                 # number isn't really that important, except for making cc/ld happy.
5701                 #
5702                 # A name such as libperl.so.3.1
5703                 majmin="libperl.$so.$patchlevel.$subversion"
5704                 # A name such as libperl.so.301
5705                 majonly=`echo $patchlevel $subversion |
5706                         $awk '{printf "%d%02d", $1, $2}'`
5707                 majonly=libperl.$so.$majonly
5708                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5709                 # rely on figuring it out from the naming of libc.
5710                 case "${osname}${osvers}" in
5711                 next4*)
5712                         dflt=libperl.5.$so
5713                         # XXX How handle the --version stuff for MAB?
5714                         ;;
5715                 linux*)  # ld won't link with a bare -lperl otherwise.
5716                         dflt=libperl.$so
5717                         ;;
5718                 *)      # Try to guess based on whether libc has major.minor.
5719                         case "$libc" in
5720                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5721                         *libc.$so.[0-9]*) dflt=$majonly ;;
5722                         *)      dflt=libperl.$so ;;
5723                         esac
5724                         ;;
5725                 esac
5726                 ;;
5727         *)      dflt=$libperl
5728                 ;;
5729         esac
5730         cat << EOM
5731
5732 I need to select a good name for the shared libperl.  If your system uses
5733 library names with major and minor numbers, then you might want something
5734 like $majmin.  Alternatively, if your system uses a single version
5735 number for shared libraries, then you might want to use $majonly.
5736 Or, your system might be quite happy with a simple libperl.$so.
5737
5738 Since the shared libperl will get installed into a version-specific
5739 architecture-dependent directory, the version number of the shared perl
5740 library probably isn't important, so the default should be o.k.
5741
5742 EOM
5743         rp='What name do you want to give to the shared libperl?'
5744         . ./myread
5745         libperl=$ans
5746         echo "Ok, I'll use $libperl"
5747         ;;
5748 *)
5749         libperl="libperl${_a}"
5750         ;;
5751 esac
5752
5753 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5754 case "$shrpdir" in
5755 '') ;;
5756 *)      $cat >&4 <<EOM
5757 WARNING:  Use of the shrpdir variable for the installation location of
5758 the shared $libperl is not supported.  It was never documented and
5759 will not work in this version.  Let me (perlbug@perl.com)
5760 know of any problems this may cause.
5761
5762 EOM
5763         case "$shrpdir" in
5764         "$archlibexp/CORE")
5765                 $cat >&4 <<EOM
5766 But your current setting of $shrpdir is
5767 the default anyway, so it's harmless.
5768 EOM
5769                 ;;
5770         *)
5771                 $cat >&4 <<EOM
5772 Further, your current attempted setting of $shrpdir
5773 conflicts with the value of $archlibexp/CORE
5774 that installperl will use.
5775 EOM
5776                 ;;
5777         esac
5778         ;;
5779 esac
5780
5781 # How will the perl executable find the installed shared $libperl?
5782 # Add $xxx to ccdlflags.
5783 # If we can't figure out a command-line option, use $shrpenv to
5784 # set env LD_RUN_PATH.  The main perl makefile uses this.
5785 shrpdir=$archlibexp/CORE
5786 xxx=''
5787 tmp_shrpenv=''
5788 if "$useshrplib"; then
5789     case "$osname" in 
5790         aix)
5791                 # We'll set it in Makefile.SH...
5792                 ;;
5793         solaris|netbsd)
5794                 xxx="-R $shrpdir"
5795                 ;;
5796         freebsd)
5797                 xxx="-Wl,-R$shrpdir"
5798                 ;;
5799         linux|irix*|dec_osf)
5800                 xxx="-Wl,-rpath,$shrpdir"
5801                 ;;
5802         next)
5803                 # next doesn't like the default...
5804                 ;;
5805         beos)
5806                 # beos doesn't like the default, either.
5807                 ;;
5808         hpux*)
5809                 # hpux doesn't like the default, either.
5810                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5811                 ;;
5812         *)
5813                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5814                 ;;
5815         esac
5816         case "$xxx" in
5817         '') ;;
5818         *)      
5819                 # Only add $xxx if it isn't already in ccdlflags.
5820                 case " $ccdlflags " in
5821                 *" $xxx "*)     ;;
5822                 *)      ccdlflags="$ccdlflags $xxx"
5823                         cat <<EOM >&4
5824
5825 Adding $xxx to the flags
5826 passed to $ld so that the perl executable will find the 
5827 installed shared $libperl.
5828
5829 EOM
5830                         ;;
5831                 esac
5832                 ;;
5833         esac
5834 fi
5835 # Fix ccdlflags in AIX for building external extensions.
5836 # (For building Perl itself bare -bE:perl.exp is needed,
5837 #  Makefile.SH takes care of this.)
5838 case "$osname" in
5839 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5840 esac
5841 # Respect a hint or command-line value.
5842 case "$shrpenv" in
5843 '') shrpenv="$tmp_shrpenv" ;;
5844 esac
5845 case "$ldlibpthname" in
5846 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5847 none)   ldlibpthname='' ;;
5848 esac
5849
5850 : determine where manual pages go
5851 set man1dir man1dir none
5852 eval $prefixit
5853 $cat <<EOM
5854
5855 $spackage has manual pages available in source form.
5856 EOM
5857 case "$nroff" in
5858 nroff)
5859         echo "However, you don't have nroff, so they're probably useless to you."
5860         case "$man1dir" in
5861         '') man1dir="none";;
5862         esac;;
5863 esac
5864 echo "If you don't want the manual sources installed, answer 'none'."
5865 case "$man1dir" in
5866 ' ') dflt=none
5867         ;;
5868 '')
5869         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5870         lookpath="$lookpath $prefixexp/man/p_man/man1"
5871         lookpath="$lookpath $prefixexp/man/u_man/man1"
5872         lookpath="$lookpath $prefixexp/man/man.1"
5873         case "$sysman" in
5874         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5875         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5876         esac
5877         set dflt
5878         eval $prefixup
5879         ;;
5880 *)  dflt="$man1dir"
5881         ;;
5882 esac
5883 echo " "
5884 fn=dn+~
5885 rp="Where do the main $spackage manual pages (source) go?"
5886 . ./getfile
5887 if $test "X$man1direxp" != "X$ansexp"; then
5888         installman1dir=''
5889 fi
5890 man1dir="$ans"
5891 man1direxp="$ansexp"
5892 case "$man1dir" in
5893 '')     man1dir=' '
5894         installman1dir='';;
5895 esac
5896
5897 : Change installation prefix, if necessary.
5898 if $test X"$prefix" != X"$installprefix"; then
5899         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
5900 else
5901         installman1dir="$man1direxp"
5902 fi
5903
5904 : What suffix to use on installed man pages
5905
5906 case "$man1dir" in
5907 ' ')
5908         man1ext='0'
5909         ;;
5910 *)
5911         rp="What suffix should be used for the main $spackage man pages?"
5912         case "$man1ext" in
5913         '')     case "$man1dir" in
5914                 *1)  dflt=1 ;;
5915                 *1p) dflt=1p ;;
5916                 *1pm) dflt=1pm ;;
5917                 *l) dflt=l;;
5918                 *n) dflt=n;;
5919                 *o) dflt=o;;
5920                 *p) dflt=p;;
5921                 *C) dflt=C;;
5922                 *L) dflt=L;;
5923                 *L1) dflt=L1;;
5924                 *) dflt=1;;
5925                 esac
5926                 ;;
5927         *)      dflt="$man1ext";;
5928         esac
5929         . ./myread
5930         man1ext="$ans"
5931         ;;
5932 esac
5933
5934 : see if we can have long filenames
5935 echo " "
5936 rmlist="$rmlist /tmp/cf$$"
5937 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5938 first=123456789abcdef
5939 second=/tmp/cf$$/$first
5940 $rm -f $first $second
5941 if (echo hi >$first) 2>/dev/null; then
5942         if $test -f 123456789abcde; then
5943                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5944                 val="$undef"
5945         else
5946                 if (echo hi >$second) 2>/dev/null; then
5947                         if $test -f /tmp/cf$$/123456789abcde; then
5948                                 $cat <<'EOM'
5949 That's peculiar... You can have filenames longer than 14 characters, but only
5950 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5951 I shall consider your system cannot support long filenames at all.
5952 EOM
5953                                 val="$undef"
5954                         else
5955                                 echo 'You can have filenames longer than 14 characters.' >&4
5956                                 val="$define"
5957                         fi
5958                 else
5959                         $cat <<'EOM'
5960 How confusing! Some of your filesystems are sane enough to allow filenames
5961 longer than 14 characters but some others like /tmp can't even think about them.
5962 So, for now on, I shall assume your kernel does not allow them at all.
5963 EOM
5964                         val="$undef"
5965                 fi
5966         fi
5967 else
5968         $cat <<'EOM'
5969 You can't have filenames longer than 14 chars.  You can't even think about them!
5970 EOM
5971         val="$undef"
5972 fi 
5973 set d_flexfnam
5974 eval $setvar
5975 $rm -rf /tmp/cf$$ 123456789abcde*
5976
5977 : determine where library module manual pages go
5978 set man3dir man3dir none
5979 eval $prefixit
5980 $cat <<EOM
5981
5982 $spackage has manual pages for many of the library modules.
5983 EOM
5984
5985 case "$nroff" in
5986 nroff)
5987         $cat <<'EOM'
5988 However, you don't have nroff, so they're probably useless to you.
5989 EOM
5990         case "$man3dir" in
5991         '') man3dir="none";;
5992         esac;;
5993 esac
5994
5995 case "$d_flexfnam" in
5996 undef)
5997         $cat <<'EOM'
5998 However, your system can't handle the long file names like File::Basename.3. 
5999 EOM
6000         case "$man3dir" in
6001         '') man3dir="none";;
6002         esac;;
6003 esac
6004
6005 echo "If you don't want the manual sources installed, answer 'none'."
6006 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6007 case "$man3dir" in
6008 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6009         if $test -d "$privlib/man/man3"; then
6010                 cat <<EOM >&4
6011
6012 WARNING:  Previous versions of perl installed man3 pages into
6013 $privlib/man/man3.  This version will suggest a 
6014 new default of $dflt.  
6015 EOM
6016                 tdflt=$dflt
6017                 dflt='n'
6018                 rp='Do you wish to preserve the old behavior?(y/n)'
6019                 . ./myread
6020                 case "$ans" in
6021                 y*) dflt="$privlib/man/man3" ;;
6022                 *)  dflt=$tdflt ;;
6023                 esac
6024     fi
6025         ;;
6026 ' ') dflt=none;;
6027 *)      dflt="$man3dir" ;;
6028 esac
6029 echo " "
6030 fn=dn+~
6031 rp="Where do the $package library man pages (source) go?"
6032 . ./getfile
6033 man3dir="$ans"
6034 man3direxp="$ansexp"
6035 case "$man1dir" in
6036 '')     man3dir=' '
6037         installman3dir='';;
6038 esac
6039
6040 : Change installation prefix, if necessary.
6041 if $test X"$prefix" != X"$installprefix"; then
6042         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6043 else
6044         installman3dir="$man3direxp"
6045 fi
6046
6047 : What suffix to use on installed man pages
6048 case "$man3dir" in
6049 ' ')
6050         man3ext='0'
6051         ;;
6052 *)
6053         rp="What suffix should be used for the $package library man pages?"
6054         case "$man3ext" in
6055         '')     case "$man3dir" in
6056                 *3)  dflt=3 ;;
6057                 *3p) dflt=3p ;;
6058                 *3pm) dflt=3pm ;;
6059                 *l) dflt=l;;
6060                 *n) dflt=n;;
6061                 *o) dflt=o;;
6062                 *p) dflt=p;;
6063                 *C) dflt=C;;
6064                 *L) dflt=L;;
6065                 *L3) dflt=L3;;
6066                 *) dflt=3;;
6067                 esac
6068                 ;;
6069         *)      dflt="$man3ext";;
6070         esac
6071         . ./myread
6072         man3ext="$ans"
6073         ;;
6074 esac
6075
6076 : see if we have to deal with yellow pages, now NIS.
6077 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6078         if $test -f /usr/etc/nibindd; then
6079                 echo " "
6080                 echo "I'm fairly confident you're on a NeXT."
6081                 echo " "
6082                 rp='Do you get the hosts file via NetInfo?'
6083                 dflt=y
6084                 case "$hostcat" in
6085                 nidump*) ;;
6086                 '') ;;
6087                 *) dflt=n;;
6088                 esac
6089                 . ./myread
6090                 case "$ans" in
6091                 y*) hostcat='nidump hosts .';;
6092                 *)      case "$hostcat" in
6093                         nidump*) hostcat='';;
6094                         esac
6095                         ;;
6096                 esac
6097         fi
6098         case "$hostcat" in
6099         nidump*) ;;
6100         *)
6101                 case "$hostcat" in
6102                 *ypcat*) dflt=y;;
6103                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6104                                 dflt=y
6105                         else
6106                                 dflt=n
6107                         fi;;
6108                 *) dflt=n;;
6109                 esac
6110                 echo " "
6111                 rp='Are you getting the hosts file via yellow pages?'
6112                 . ./myread
6113                 case "$ans" in
6114                 y*) hostcat='ypcat hosts';;
6115                 *) hostcat='cat /etc/hosts';;
6116                 esac
6117                 ;;
6118         esac
6119 fi
6120 case "$hostcat" in
6121 '') hostcat='cat /etc/hosts';;
6122 esac
6123 case "$groupcat" in
6124 '') groupcat='cat /etc/group';;
6125 esac
6126 case "$passcat" in
6127 '') passcat='cat /etc/passwd';;
6128 esac
6129
6130 : now get the host name
6131 echo " "
6132 echo "Figuring out host name..." >&4
6133 case "$myhostname" in
6134 '') cont=true
6135         echo 'Maybe "hostname" will work...'
6136         if tans=`sh -c hostname 2>&1` ; then
6137                 myhostname=$tans
6138                 phostname=hostname
6139                 cont=''
6140         fi
6141         ;;
6142 *) cont='';;
6143 esac
6144 if $test "$cont"; then
6145         if ./xenix; then
6146                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6147                 if tans=`cat /etc/systemid 2>&1` ; then
6148                         myhostname=$tans
6149                         phostname='cat /etc/systemid'
6150                         echo "Whadyaknow.  Xenix always was a bit strange..."
6151                         cont=''
6152                 fi
6153         elif $test -r /etc/systemid; then
6154                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6155         fi
6156 fi
6157 if $test "$cont"; then
6158         echo 'No, maybe "uuname -l" will work...'
6159         if tans=`sh -c 'uuname -l' 2>&1` ; then
6160                 myhostname=$tans
6161                 phostname='uuname -l'
6162         else
6163                 echo 'Strange.  Maybe "uname -n" will work...'
6164                 if tans=`sh -c 'uname -n' 2>&1` ; then
6165                         myhostname=$tans
6166                         phostname='uname -n'
6167                 else
6168                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6169                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6170                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6171                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6172                         else
6173                                 case "$myhostname" in
6174                                 '') echo "Does this machine have an identity crisis or something?"
6175                                         phostname='';;
6176                                 *)
6177                                         echo "Well, you said $myhostname before..."
6178                                         phostname='echo $myhostname';;
6179                                 esac
6180                         fi
6181                 fi
6182         fi
6183 fi
6184 : you do not want to know about this
6185 set $myhostname
6186 myhostname=$1
6187
6188 : verify guess
6189 if $test "$myhostname" ; then
6190         dflt=y
6191         rp='Your host name appears to be "'$myhostname'".'" Right?"
6192         . ./myread
6193         case "$ans" in
6194         y*) ;;
6195         *) myhostname='';;
6196         esac
6197 fi
6198
6199 : bad guess or no guess
6200 while $test "X$myhostname" = X ; do
6201         dflt=''
6202         rp="Please type the (one word) name of your host:"
6203         . ./myread
6204         myhostname="$ans"
6205 done
6206
6207 : translate upper to lower if necessary
6208 case "$myhostname" in
6209 *[A-Z]*)
6210         echo "(Normalizing case in your host name)"
6211         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6212         ;;
6213 esac
6214
6215 case "$myhostname" in
6216 *.*)
6217         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6218         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6219         echo "(Trimming domain name from host name--host name is now $myhostname)"
6220         ;;
6221 *) case "$mydomain" in
6222         '')
6223                 {
6224                         test "X$hostcat" = "Xypcat hosts" &&
6225                         ypmatch "$myhostname" hosts 2>/dev/null |\
6226                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6227                         $test -s hosts
6228                 } || {
6229                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6230                                         /[       ]$myhostname[  . ]/p" > hosts
6231                 }
6232                 tmp_re="[       . ]"
6233                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6234                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6235                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6236                         hosts | $sort | $uniq | \
6237                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6238                 case `$echo X$dflt` in
6239                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6240                         dflt=.
6241                         ;;
6242                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6243                         ;;
6244                 esac
6245                 case "$dflt" in
6246                 .)
6247                         tans=`./loc resolv.conf X /etc /usr/etc`
6248                         if $test -f "$tans"; then
6249                                 echo "(Attempting domain name extraction from $tans)"
6250                                 dflt=.`$sed -n -e 's/   / /g' \
6251                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6252                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6253                                 case "$dflt" in
6254                                 .) dflt=.`$sed -n -e 's/        / /g' \
6255                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6256                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6257                                         ;;
6258                                 esac
6259                         fi
6260                         ;;
6261                 esac
6262                 case "$dflt" in
6263                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6264                         dflt=.`sh -c domainname 2>/dev/null`
6265                         case "$dflt" in
6266                         '') dflt='.';;
6267                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6268                         esac
6269                         ;;
6270                 esac
6271                 case "$dflt" in
6272                 .) echo "(Lost all hope -- silly guess then)"
6273                         dflt='.uucp'
6274                         ;;
6275                 esac
6276                 $rm -f hosts
6277                 ;;
6278         *) dflt="$mydomain";;
6279         esac;;
6280 esac
6281 echo " "
6282 rp="What is your domain name?"
6283 . ./myread
6284 tans="$ans"
6285 case "$ans" in
6286 '') ;;
6287 .*) ;;
6288 *) tans=".$tans";;
6289 esac
6290 mydomain="$tans"
6291
6292 : translate upper to lower if necessary
6293 case "$mydomain" in
6294 *[A-Z]*)
6295         echo "(Normalizing case in your domain name)"
6296         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6297         ;;
6298 esac
6299
6300 : a little sanity check here
6301 case "$phostname" in
6302 '') ;;
6303 *)
6304         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6305         $myhostname$mydomain|$myhostname) ;;
6306         *)
6307                 case "$phostname" in
6308                 sed*)
6309                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6310                         ;;
6311                 *)
6312                         echo "(That doesn't agree with your $phostname command, by the way.)"
6313                         ;;
6314                 esac
6315         ;;
6316         esac
6317         ;;
6318 esac
6319
6320 $cat <<EOM
6321
6322 I need to get your e-mail address in Internet format if possible, i.e.
6323 something like user@host.domain. Please answer accurately since I have
6324 no easy means to double check it. The default value provided below
6325 is most probably close to the reality but may not be valid from outside
6326 your organization...
6327
6328 EOM
6329 cont=x
6330 while test "$cont"; do
6331         case "$cf_email" in
6332         '') dflt="$cf_by@$myhostname$mydomain";;
6333         *) dflt="$cf_email";;
6334         esac
6335         rp='What is your e-mail address?'
6336         . ./myread
6337         cf_email="$ans"
6338         case "$cf_email" in
6339         *@*.*) cont='' ;;
6340         *)
6341                 rp='Address does not look like an Internet one.  Use it anyway?'
6342                 case "$fastread" in
6343                 yes) dflt=y ;;
6344                 *) dflt=n ;;
6345                 esac
6346                 . ./myread
6347                 case "$ans" in
6348                 y*) cont='' ;;
6349                 *) echo " " ;;
6350                 esac
6351                 ;;
6352         esac
6353 done
6354
6355 $cat <<EOM
6356
6357 If you or somebody else will be maintaining perl at your site, please
6358 fill in the correct e-mail address here so that they may be contacted
6359 if necessary. Currently, the "perlbug" program included with perl
6360 will send mail to this address in addition to perlbug@perl.com. You may
6361 enter "none" for no administrator.
6362
6363 EOM
6364 case "$perladmin" in
6365 '') dflt="$cf_email";;
6366 *) dflt="$perladmin";;
6367 esac
6368 rp='Perl administrator e-mail address'
6369 . ./myread
6370 perladmin="$ans"
6371
6372 : figure out how to guarantee perl startup
6373 case "$startperl" in
6374 '')
6375         case "$sharpbang" in
6376         *!)
6377                 $cat <<EOH
6378
6379 I can use the #! construct to start perl on your system. This will
6380 make startup of perl scripts faster, but may cause problems if you
6381 want to share those scripts and perl is not in a standard place
6382 ($binexp/perl) on all your platforms. The alternative is to force
6383 a shell by starting the script with a single ':' character.
6384
6385 EOH
6386                 dflt="$binexp/perl"
6387                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6388                 . ./myread
6389                 case "$ans" in
6390                 none)   startperl=": # use perl";;
6391                 *)      startperl="#!$ans"
6392                         if $test 30 -lt `echo "$ans" | wc -c`; then
6393                                 $cat >&4 <<EOM
6394
6395 WARNING:  Some systems limit the #! command to 32 characters.
6396 If you experience difficulty running Perl scripts with #!, try
6397 installing Perl in a directory with a shorter pathname.
6398
6399 EOM
6400                         fi ;;
6401                 esac
6402                 ;;
6403         *) startperl=": # use perl"
6404                 ;;
6405         esac
6406         ;;
6407 esac
6408 echo "I'll use $startperl to start perl scripts."
6409
6410 : figure best path for perl in scripts
6411 case "$perlpath" in
6412 '')
6413         perlpath="$binexp/perl"
6414         case "$startperl" in
6415         *!*) ;;
6416         *)
6417                 $cat <<EOH
6418
6419 I will use the "eval 'exec'" idiom to start Perl on your system.
6420 I can use the full path of your Perl binary for this purpose, but
6421 doing so may cause problems if you want to share those scripts and
6422 Perl is not always in a standard place ($binexp/perl).
6423
6424 EOH
6425                 dflt="$binexp/perl"
6426                 rp="What path shall I use in \"eval 'exec'\"?"
6427                 . ./myread
6428                 perlpath="$ans"
6429                 ;;
6430         esac
6431         ;;
6432 esac
6433 case "$startperl" in
6434 *!*)    ;;
6435 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6436 esac
6437
6438 : determine where public executable scripts go
6439 set scriptdir scriptdir
6440 eval $prefixit
6441 case "$scriptdir" in
6442 '')
6443         dflt="$bin"
6444         : guess some guesses
6445         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6446         $test -d /usr/share/bin     && dflt=/usr/share/bin
6447         $test -d /usr/local/script  && dflt=/usr/local/script
6448         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6449         $test -d $prefixexp/script  && dflt=$prefixexp/script
6450         set dflt
6451         eval $prefixup
6452         ;;
6453 *)  dflt="$scriptdir"
6454         ;;
6455 esac
6456 $cat <<EOM
6457  
6458 Some installations have a separate directory just for executable scripts so
6459 that they can mount it across multiple architectures but keep the scripts in
6460 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6461 Or you might just lump your scripts in with all your other executables.
6462  
6463 EOM
6464 fn=d~
6465 rp='Where do you keep publicly executable scripts?'
6466 . ./getfile
6467 if $test "X$ansexp" != "X$scriptdirexp"; then
6468         installscript=''
6469 fi
6470 scriptdir="$ans"
6471 scriptdirexp="$ansexp"
6472 : Change installation prefix, if necessary.
6473 if $test X"$prefix" != X"$installprefix"; then
6474         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
6475 else
6476         installscript="$scriptdirexp"
6477 fi
6478
6479 $cat <<EOM
6480
6481 After $package is installed, you may wish to install various
6482 add-on modules and utilities.  Typically, these add-ons will
6483 be installed under $prefix with the rest
6484 of this package.  However, you may wish to install such add-ons
6485 elsewhere under a different prefix.
6486
6487 If you do not wish to put everything under a single prefix, that's
6488 ok.  You will be prompted for the individual locations; this siteprefix
6489 is only used to suggest the defaults.
6490
6491 The default should be fine for most people.
6492
6493 EOM
6494 fn=d~+
6495 rp='Installation prefix to use for add-on modules and utilities?'
6496 : XXX Here might be another good place for an installstyle setting.
6497 case "$siteprefix" in
6498 '') dflt=$prefix ;;
6499 *)  dflt=$siteprefix ;;
6500 esac
6501 . ./getfile
6502 oldsiteprefix=''
6503 case "$siteprefix" in
6504 '') ;;
6505 *)
6506         case "$ans" in
6507         "$prefix") ;;
6508         *) oldsiteprefix="$prefix";;
6509         esac
6510         ;;
6511 esac
6512 siteprefix="$ans"
6513 siteprefixexp="$ansexp"
6514
6515 : determine where site specific libraries go.
6516 : Usual default is /usr/local/lib/perl5/site_perl
6517 : The default "style" setting is made in installstyle.U
6518 : XXX No longer works with Prefixit stuff.
6519 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6520 case "$installstyle" in
6521 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6522 *)       dflt=$siteprefix/lib/site_$prog ;;
6523 esac
6524 $cat <<EOM
6525
6526 The installation process will create a directory for
6527 site-specific extensions and modules.  Most users find it convenient
6528 to place all site-specific files in this directory rather than in the
6529 main distribution directory.
6530
6531 EOM
6532 fn=d~+
6533 rp='Pathname for the site-specific library files?'
6534 . ./getfile
6535 sitelib="$ans"
6536 sitelibexp="$ansexp"
6537 : Change installation prefix, if necessary.
6538 if $test X"$prefix" != X"$installprefix"; then
6539         installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
6540 else
6541         installsitelib="$sitelibexp"
6542 fi
6543
6544 : determine where site specific architecture-dependent libraries go.
6545 : sitelib  default is /usr/local/lib/perl5/site_perl/
6546 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6547 : sitelib may have an optional trailing /share.
6548 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6549 tdflt="$tdflt/$apiversion/$archname"
6550 set sitearch sitearch none
6551 eval $prefixit
6552 case "$sitearch" in
6553 '')     dflt="$tdflt" ;;
6554 *)      dflt="$sitearch" ;;
6555 esac
6556 $cat <<EOM
6557
6558 The installation process will also create a directory for
6559 architecture-dependent site-specific extensions and modules.
6560
6561 EOM
6562 fn=nd~+
6563 rp='Pathname for the site-specific architecture-dependent library files?'
6564 . ./getfile
6565 sitearch="$ans"
6566 sitearchexp="$ansexp"
6567 : Change installation prefix, if necessary.
6568 if $test X"$prefix" != X"$installprefix"; then
6569         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6570 else
6571         installsitearch="$sitearchexp"
6572 fi
6573
6574 : determine where add-on public executables go
6575 case "$sitebin" in
6576 '')     dflt=$siteprefix/bin ;;
6577 *)      dflt=$sitebin ;;
6578 esac
6579 fn=d~
6580 rp='Pathname where the add-on public executables should be installed?'
6581 . ./getfile
6582 sitebin="$ans"
6583 sitebinexp="$ansexp"
6584 : Change installation prefix, if necessary.
6585 if $test X"$prefix" != X"$installprefix"; then
6586         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
6587 else
6588         installsitebin="$sitebinexp"
6589 fi
6590
6591 cat <<EOM
6592
6593 Perl can be built to take advantage of long doubles which
6594 (if available) may give more accuracy and range for floating point numbers.
6595
6596 If this doesn't make any sense to you, just accept the default 'n'.
6597 EOM
6598
6599 case "$ccflags" in
6600 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6601 esac
6602
6603 case "$uselongdouble" in
6604 $define|true|[yY]*)     dflt='y';;
6605 *) dflt='n';;
6606 esac
6607 rp='Try to use long doubles if available?'
6608 . ./myread
6609 case "$ans" in
6610 y|Y)    val="$define"   ;;
6611 *)      val="$undef"    ;;
6612 esac
6613 set uselongdouble
6614 eval $setvar
6615
6616 case "$uselongdouble" in
6617 true|[yY]*) uselongdouble="$define" ;;
6618 esac
6619
6620 case "$uselongdouble" in
6621 $define)
6622 : Look for a hint-file generated 'call-back-unit'.  If the
6623 : user has specified that long doubles should be used,
6624 : we may need to set or change some other defaults.
6625         if $test -f uselongdouble.cbu; then
6626                 echo "Your platform has some specific hints for long doubles, using them..."
6627                 . ./uselongdouble.cbu
6628         else
6629                 $cat <<EOM
6630 (Your platform doesn't have any specific hints for long doubles.)
6631 EOM
6632         fi
6633         ;;
6634 esac
6635
6636 cat <<EOM
6637
6638 Perl can be built to take advantage of long longs which
6639 (if available) may give more range for integer numbers.
6640
6641 If this doesn't make any sense to you, just accept the default 'n'.
6642 EOM
6643
6644 case "$ccflags" in
6645 *-DUSE_LONG_LONG*) uselonglong="$define" ;;
6646 esac
6647
6648 case "$uselonglong" in
6649 $define|true|[yY]*)     dflt='y';;
6650 *) dflt='n';;
6651 esac
6652 rp='Try to use long longs if available?'
6653 . ./myread
6654 case "$ans" in
6655 y|Y)    val="$define"   ;;
6656 *)      val="$undef"    ;;
6657 esac
6658 set uselonglong
6659 eval $setvar
6660
6661 case "$uselonglong" in
6662 true|[yY]*) uselonglong="$define" ;;
6663 esac
6664
6665 case "$uselonglong" in
6666 $define)
6667 : Look for a hint-file generated 'call-back-unit'.  If the
6668 : user has specified that long longs should be used,
6669 : we may need to set or change some other defaults.
6670         if $test -f uselonglong.cbu; then
6671                 echo "Your platform has some specific hints for long longs, using them..."
6672                 . ./uselonglong.cbu
6673         else
6674                 $cat <<EOM
6675 (Your platform doesn't have any specific hints for long longs.)
6676 EOM
6677         fi
6678         ;;
6679 esac
6680
6681 cat <<EOM
6682
6683 Previous version of $package used the standard IO mechanisms as defined
6684 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6685 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6686 the default.  This abstraction layer can use AT&T's sfio (if you already
6687 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6688 problems with some extension modules.  Using PerlIO with stdio is safe,
6689 but it is slower than plain stdio and therefore is not the default.
6690
6691 If this doesn't make any sense to you, just accept the default 'n'.
6692 EOM
6693 case "$useperlio" in
6694 $define|true|[yY]*)     dflt='y';;
6695 *) dflt='n';;
6696 esac
6697 rp='Use the experimental PerlIO abstraction layer?'
6698 . ./myread
6699 case "$ans" in
6700 y|Y) 
6701         val="$define"
6702         ;;     
6703 *)      
6704         echo "Ok, doing things the stdio way"
6705         val="$undef"
6706         ;;
6707 esac
6708 set useperlio
6709 eval $setvar 
6710
6711 case "$vendorprefix" in
6712 '')     d_vendorbin="$undef"
6713         vendorbin=''
6714         vendorbinexp=''
6715         ;;
6716 *)      d_vendorbin="$define"
6717         : determine where vendor-supplied executables go.
6718         dflt=$vendorprefix/bin
6719         fn=d~+
6720         rp='Pathname for the vendor-supplied executables directory?'
6721         . ./getfile
6722         vendorbin="$ans"
6723         vendorbinexp="$ansexp"
6724         : Change installation prefix, if necessary.
6725         if $test X"$prefix" != X"$installprefix"; then
6726                 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
6727         else
6728                 installvendorbin="$vendorbinexp"
6729         fi
6730         ;;
6731 esac
6732
6733 : Check how to convert floats to strings.
6734 if test "X$d_Gconvert" = X; then
6735         echo " "
6736         echo "Checking for an efficient way to convert floats to strings."
6737         $cat >try.c <<'EOP'
6738 #ifdef TRY_gconvert
6739 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6740 char *myname = "gconvert";
6741 #endif
6742 #ifdef TRY_gcvt
6743 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6744 char *myname = "gcvt";
6745 #endif
6746 #ifdef TRY_sprintf
6747 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6748 char *myname = "sprintf";
6749 #endif
6750
6751 #include <stdio.h>
6752
6753 int
6754 checkit(expect, got)
6755 char *expect;
6756 char *got;
6757 {
6758     if (strcmp(expect, got)) {
6759                 printf("%s oddity:  Expected %s, got %s\n",
6760                         myname, expect, got);
6761                 exit(1);
6762         }
6763 }
6764
6765 int main()
6766
6767         char buf[64]; 
6768         buf[63] = '\0';
6769
6770         /* This must be 1st test on (which?) platform */
6771         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6772         Gconvert(0.1, 8, 0, buf);
6773         checkit("0.1", buf);
6774
6775         Gconvert(1.0, 8, 0, buf); 
6776         checkit("1", buf);
6777
6778         Gconvert(0.0, 8, 0, buf); 
6779         checkit("0", buf);
6780
6781         Gconvert(-1.0, 8, 0, buf); 
6782         checkit("-1", buf);
6783
6784         /* Some Linux gcvt's give 1.e+5 here. */
6785         Gconvert(100000.0, 8, 0, buf); 
6786         checkit("100000", buf);
6787         
6788         /* Some Linux gcvt's give -1.e+5 here. */
6789         Gconvert(-100000.0, 8, 0, buf); 
6790         checkit("-100000", buf);
6791
6792         exit(0);
6793 }
6794 EOP
6795         case "$d_Gconvert" in
6796         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6797         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6798         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6799         *) xxx_list='gconvert gcvt sprintf' ;;
6800         esac
6801
6802         for xxx_convert in $xxx_list; do
6803                 echo "Trying $xxx_convert"
6804                 $rm -f try try$_o
6805                 set try -DTRY_$xxx_convert
6806                 if eval $compile; then
6807                         echo "$xxx_convert" found. >&4
6808                         if ./try; then
6809                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6810                                 break;
6811                         else
6812                                 echo "...But $xxx_convert didn't work as I expected."
6813                         fi
6814                 else
6815                         echo "$xxx_convert NOT found." >&4
6816                 fi
6817         done
6818                 
6819         case "$xxx_convert" in
6820         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6821         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6822         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6823         esac
6824 fi
6825
6826 : check for length of double
6827 echo " "
6828 case "$doublesize" in
6829 '')
6830         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
6831         $cat >try.c <<'EOCP'
6832 #include <stdio.h>
6833 int main()
6834 {
6835         printf("%d\n", sizeof(double));
6836 }
6837 EOCP
6838         set try
6839         if eval $compile_ok; then
6840                 doublesize=`./try`
6841                 $echo " $doublesize bytes." >&4
6842         else
6843                 dflt='8'
6844                 echo "(I can't seem to compile the test program.  Guessing...)"
6845                 rp="What is the size of a double precision number (in bytes)?"
6846                 . ./myread
6847                 doublesize="$ans"
6848         fi
6849         ;;
6850 esac
6851 $rm -f try.c try
6852
6853 : check for long doubles
6854 echo " "
6855 $echo $n "Checking to see if your system supports long double..." $c >&4
6856 echo 'int main() { long double x = 7.0; }' > try.c
6857 set try
6858 if eval $compile; then
6859         val="$define"
6860         echo " Yes, it does." >&4
6861 else
6862         val="$undef"
6863         echo " No, it doesn't." >&4
6864 fi
6865 $rm try.*
6866 set d_longdbl
6867 eval $setvar
6868
6869 : check for length of long double
6870 case "${d_longdbl}${longdblsize}" in
6871 $define)
6872         echo " "
6873         $echo $n "Checking to see how big your long doubles are..." $c >&4
6874         $cat >try.c <<'EOCP'
6875 #include <stdio.h>
6876 int main()
6877 {
6878         printf("%d\n", sizeof(long double));
6879 }
6880 EOCP
6881         set try
6882         set try
6883         if eval $compile; then
6884                 longdblsize=`./try$exe_ext`
6885                 $echo " $longdblsize bytes." >&4
6886         else
6887                 dflt='8'
6888                 echo " "
6889                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6890                 rp="What is the size of a long double (in bytes)?"
6891                 . ./myread
6892                 longdblsize="$ans"
6893         fi
6894         if $test "X$doublesize" = "X$longdblsize"; then
6895                 echo "(That isn't any different from an ordinary double.)"
6896         fi      
6897         ;;
6898 esac
6899 $rm -f try.* try
6900
6901 echo " "
6902
6903 if $test X"$d_longdbl" = X"$define"; then
6904
6905 echo "Checking how to print long doubles..." >&4
6906
6907 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
6908         $cat >try.c <<'EOCP'
6909 #include <sys/types.h>
6910 #include <stdio.h>
6911 int main() {
6912   double d = 123.456;
6913   printf("%.3f\n", d);
6914 }
6915 EOCP
6916         set try
6917         if eval $compile; then
6918                 yyy=`./try$exe_ext`
6919                 case "$yyy" in
6920                 123.456)
6921                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
6922                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
6923                         echo "We will use %f."
6924                         ;;
6925                 esac
6926         fi
6927 fi
6928
6929 if $test X"$sPRIfldbl" = X; then
6930         $cat >try.c <<'EOCP'
6931 #include <sys/types.h>
6932 #include <stdio.h>
6933 int main() {
6934   long double d = 123.456;
6935   printf("%.3llf\n", d);
6936 }
6937 EOCP
6938         set try
6939         if eval $compile; then
6940                 yyy=`./try$exe_ext`
6941                 case "$yyy" in
6942                 123.456)
6943                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
6944                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
6945                         echo "We will use %llf."
6946                         ;;
6947                 esac
6948         fi
6949 fi
6950
6951 if $test X"$sPRIfldbl" = X; then
6952         $cat >try.c <<'EOCP'
6953 #include <sys/types.h>
6954 #include <stdio.h>
6955 int main() {
6956   long double d = 123.456;
6957   printf("%.3Lf\n", d);
6958 }
6959 EOCP
6960         set try
6961         if eval $compile; then
6962                 yyy=`./try$exe_ext`
6963                 case "$yyy" in
6964                 123.456)
6965                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
6966                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
6967                         echo "We will use %Lf."
6968                         ;;
6969                 esac
6970         fi
6971 fi
6972
6973 if $test X"$sPRIfldbl" = X; then
6974         $cat >try.c <<'EOCP'
6975 #include <sys/types.h>
6976 #include <stdio.h>
6977 int main() {
6978   long double d = 123.456;
6979   printf("%.3lf\n", d);
6980 }
6981 EOCP
6982         set try
6983         if eval $compile; then
6984                 yyy=`./try$exe_ext`
6985                 case "$yyy" in
6986                 123.456)
6987                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
6988                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
6989                         echo "We will use %lf."
6990                         ;;
6991                 esac
6992         fi
6993 fi
6994
6995 if $test X"$sPRIfldbl" = X; then
6996         echo "Cannot figure out how to print long doubles." >&4
6997 fi
6998
6999 $rm -f try try.*
7000
7001 fi # d_longdbl
7002
7003 case "$sPRIfldbl" in
7004 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7005         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7006         ;;
7007 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7008         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7009         ;;
7010 esac
7011
7012 : Initialize h_fcntl
7013 h_fcntl=false
7014
7015 : Initialize h_sysfile
7016 h_sysfile=false
7017
7018 : access call always available on UNIX
7019 set access d_access
7020 eval $inlibc
7021
7022 : locate the flags for 'access()'
7023 case "$d_access" in
7024 "$define")
7025         echo " "
7026         $cat >access.c <<'EOCP'
7027 #include <sys/types.h>
7028 #ifdef I_FCNTL
7029 #include <fcntl.h>
7030 #endif
7031 #ifdef I_SYS_FILE
7032 #include <sys/file.h>
7033 #endif
7034 #ifdef I_UNISTD
7035 #include <unistd.h>
7036 #endif
7037 int main() {
7038         exit(R_OK);
7039 }
7040 EOCP
7041         : check sys/file.h first, no particular reason here
7042         if $test `./findhdr sys/file.h` && \
7043                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7044                 h_sysfile=true;
7045                 echo "<sys/file.h> defines the *_OK access constants." >&4
7046         elif $test `./findhdr fcntl.h` && \
7047                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7048                 h_fcntl=true;
7049                 echo "<fcntl.h> defines the *_OK access constants." >&4
7050         elif $test `./findhdr unistd.h` && \
7051                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7052                 echo "<unistd.h> defines the *_OK access constants." >&4
7053         else
7054                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7055         fi
7056         ;;
7057 esac
7058 $rm -f access*
7059
7060 : see if accessx exists
7061 set accessx d_accessx
7062 eval $inlibc
7063
7064 : see if alarm exists
7065 set alarm d_alarm
7066 eval $inlibc
7067
7068 : see if atolf exists
7069 set atolf d_atolf
7070 eval $inlibc
7071
7072 : see if atoll exists
7073 set atoll d_atoll
7074 eval $inlibc
7075
7076 : Look for GNU-cc style attribute checking
7077 echo " "
7078 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7079 $cat >attrib.c <<'EOCP'
7080 #include <stdio.h>
7081 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7082 EOCP
7083 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7084         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7085                 echo "Your C compiler doesn't fully support __attribute__."
7086                 val="$undef"
7087         else
7088                 echo "Your C compiler supports __attribute__."
7089                 val="$define"
7090         fi
7091 else
7092         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7093         val="$undef"
7094 fi
7095 set d_attribut
7096 eval $setvar
7097 $rm -f attrib*
7098
7099 : see if bcmp exists
7100 set bcmp d_bcmp
7101 eval $inlibc
7102
7103 : see if bcopy exists
7104 set bcopy d_bcopy
7105 eval $inlibc
7106
7107 : see if this is a unistd.h system
7108 set unistd.h i_unistd
7109 eval $inhdr
7110
7111 : see if getpgrp exists
7112 set getpgrp d_getpgrp
7113 eval $inlibc
7114
7115 case "$d_getpgrp" in
7116 "$define")
7117         echo " "
7118         echo "Checking to see which flavor of getpgrp is in use..."
7119         $cat >set.c <<EOP
7120 #$i_unistd I_UNISTD
7121 #include <sys/types.h>
7122 #ifdef I_UNISTD
7123 #  include <unistd.h>
7124 #endif
7125 int main()
7126 {
7127         if (getuid() == 0) {
7128                 printf("(I see you are running Configure as super-user...)\n");
7129                 setuid(1);
7130         }
7131 #ifdef TRY_BSD_PGRP
7132         if (getpgrp(1) == 0)
7133                 exit(0);
7134 #else
7135         if (getpgrp() > 0)
7136                 exit(0);
7137 #endif
7138         exit(1);
7139 }
7140 EOP
7141         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7142                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7143                 val="$define"
7144         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7145                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7146                 val="$undef"
7147         else
7148                 echo "I can't seem to compile and run the test program."
7149                 if ./usg; then
7150                         xxx="a USG one, i.e. you use getpgrp()."
7151                 else
7152                         # SVR4 systems can appear rather BSD-ish.
7153                         case "$i_unistd" in
7154                         $undef)
7155                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7156                                 val="$define"
7157                                 ;;
7158                         $define)
7159                                 xxx="probably a USG one, i.e. you use getpgrp()."
7160                                 val="$undef"
7161                                 ;;
7162                         esac
7163                 fi
7164                 echo "Assuming your getpgrp is $xxx" >&4
7165         fi
7166         ;;
7167 *) val="$undef";;
7168 esac
7169 set d_bsdgetpgrp
7170 eval $setvar
7171 $rm -f set set.c
7172
7173 : see if setpgrp exists
7174 set setpgrp d_setpgrp
7175 eval $inlibc
7176
7177 case "$d_setpgrp" in
7178 "$define")
7179         echo " "
7180         echo "Checking to see which flavor of setpgrp is in use..."
7181         $cat >set.c <<EOP
7182 #$i_unistd I_UNISTD
7183 #include <sys/types.h>
7184 #ifdef I_UNISTD
7185 #  include <unistd.h>
7186 #endif
7187 int main()
7188 {
7189         if (getuid() == 0) {
7190                 printf("(I see you are running Configure as super-user...)\n");
7191                 setuid(1);
7192         }
7193 #ifdef TRY_BSD_PGRP
7194         if (-1 == setpgrp(1, 1))
7195                 exit(0);
7196 #else
7197         if (setpgrp() != -1)
7198                 exit(0);
7199 #endif
7200         exit(1);
7201 }
7202 EOP
7203         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7204                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7205                 val="$define"
7206         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7207                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7208                 val="$undef"
7209         else
7210                 echo "(I can't seem to compile and run the test program.)"
7211                 if ./usg; then
7212                         xxx="a USG one, i.e. you use setpgrp()."
7213                 else
7214                         # SVR4 systems can appear rather BSD-ish.
7215                         case "$i_unistd" in
7216                         $undef)
7217                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7218                                 val="$define"
7219                                 ;;
7220                         $define)
7221                                 xxx="probably a USG one, i.e. you use setpgrp()."
7222                                 val="$undef"
7223                                 ;;
7224                         esac
7225                 fi
7226                 echo "Assuming your setpgrp is $xxx" >&4
7227         fi
7228         ;;
7229 *) val="$undef";;
7230 esac
7231 set d_bsdsetpgrp
7232 eval $setvar
7233 $rm -f set set.c
7234 : see if bzero exists
7235 set bzero d_bzero
7236 eval $inlibc
7237
7238 : check for lengths of integral types
7239 echo " "
7240 case "$intsize" in
7241 '')
7242         echo "Checking to see how big your integers are..." >&4
7243         $cat >intsize.c <<'EOCP'
7244 #include <stdio.h>
7245 int main()
7246 {
7247         printf("intsize=%d;\n", sizeof(int));
7248         printf("longsize=%d;\n", sizeof(long));
7249         printf("shortsize=%d;\n", sizeof(short));
7250         exit(0);
7251 }
7252 EOCP
7253         set intsize
7254         if eval $compile_ok && ./intsize > /dev/null; then
7255                 eval `./intsize`
7256                 echo "Your integers are $intsize bytes long."
7257                 echo "Your long integers are $longsize bytes long."
7258                 echo "Your short integers are $shortsize bytes long."
7259         else
7260                 $cat >&4 <<EOM
7261 !
7262 Help! I can't compile and run the intsize test program: please enlighten me!
7263 (This is probably a misconfiguration in your system or libraries, and
7264 you really ought to fix it.  Still, I'll try anyway.)
7265 !
7266 EOM
7267                 dflt=4
7268                 rp="What is the size of an integer (in bytes)?"
7269                 . ./myread
7270                 intsize="$ans"
7271                 dflt=$intsize
7272                 rp="What is the size of a long integer (in bytes)?"
7273                 . ./myread
7274                 longsize="$ans"
7275                 dflt=2
7276                 rp="What is the size of a short integer (in bytes)?"
7277                 . ./myread
7278                 shortsize="$ans"
7279         fi
7280         ;;
7281 esac
7282 $rm -f intsize intsize.*
7283
7284 : see if signal is declared as pointer to function returning int or void
7285 echo " "
7286 xxx=`./findhdr signal.h`
7287 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7288 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7289         echo "You have int (*signal())() instead of void." >&4
7290         val="$undef"
7291 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7292         echo "You have void (*signal())()." >&4
7293         val="$define"
7294 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7295         echo "You have int (*signal())() instead of void." >&4
7296         val="$undef"
7297 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7298         echo "You have void (*signal())()." >&4
7299         val="$define"
7300 else
7301         case "$d_voidsig" in
7302         '')
7303         echo "I can't determine whether signal handler returns void or int..." >&4
7304                 dflt=void
7305                 rp="What type does your signal handler return?"
7306                 . ./myread
7307                 case "$ans" in
7308                 v*) val="$define";;
7309                 *) val="$undef";;
7310                 esac;;
7311         "$define")
7312                 echo "As you already told me, signal handler returns void." >&4
7313                 val="$define"
7314                 ;;
7315         *)      echo "As you already told me, signal handler returns int." >&4
7316                 val="$undef"
7317                 ;;
7318         esac
7319 fi
7320 set d_voidsig
7321 eval $setvar
7322 case "$d_voidsig" in
7323 "$define") signal_t="void";;
7324 *) signal_t="int";;
7325 esac
7326 $rm -f $$.tmp
7327
7328 : check for ability to cast large floats to 32-bit ints.
7329 echo " "
7330 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7331 if $test "$intsize" -ge 4; then
7332         xxx=int
7333 else
7334         xxx=long
7335 fi
7336 $cat >try.c <<EOCP
7337 #include <stdio.h>
7338 #include <sys/types.h>
7339 #include <signal.h>
7340 $signal_t blech(s) int s; { exit(3); }
7341 int main()
7342 {
7343         $xxx i32;
7344         double f, g;
7345         int result = 0;
7346         char str[16];
7347         signal(SIGFPE, blech);
7348
7349         /* Don't let compiler optimize the test away.  Store the number 
7350            in a writable string for gcc to pass to sscanf under HP/UX.
7351         */
7352         sprintf(str, "2147483647");
7353         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7354         g = 10 * f;
7355         i32  = ($xxx) g;
7356
7357         /* x86 processors will probably give 0x8000 0000, which is a
7358        sign change.  We don't want that.  We want to mimic SPARC
7359            behavior here, which is to preserve the sign and give
7360            back 0x7fff ffff.
7361         */
7362         if (i32 != ($xxx) f)
7363                 result |= 1;
7364         exit(result);
7365 }
7366 EOCP
7367 set try
7368 if eval $compile_ok; then
7369         ./try
7370         yyy=$?
7371 else
7372         echo "(I can't seem to compile the test program--assuming it can't)"
7373         yyy=1
7374 fi
7375 case "$yyy" in
7376 0)      val="$define"
7377         echo "Yup, it can."
7378         ;;
7379 *)      val="$undef"
7380         echo "Nope, it can't."
7381         ;;
7382 esac
7383 set d_casti32
7384 eval $setvar
7385 $rm -f try try.*
7386
7387 : check for ability to cast negative floats to unsigned
7388 echo " "
7389 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7390 $cat >try.c <<EOCP
7391 #include <stdio.h>
7392 #include <sys/types.h>
7393 #include <signal.h>
7394 $signal_t blech(s) int s; { exit(7); }
7395 $signal_t blech_in_list(s) int s; { exit(4); }
7396 unsigned long dummy_long(p) unsigned long p; { return p; }
7397 unsigned int dummy_int(p) unsigned int p; { return p; }
7398 unsigned short dummy_short(p) unsigned short p; { return p; }
7399 int main()
7400 {
7401         double f;
7402         unsigned long along;
7403         unsigned int aint;
7404         unsigned short ashort;
7405         int result = 0;
7406         char str[16];
7407         
7408         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7409            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7410            optimized the whole file away
7411         */
7412         /* Store the number in a writable string for gcc to pass to 
7413            sscanf under HP/UX.
7414         */
7415         sprintf(str, "-123");
7416         sscanf(str, "%lf", &f);  /* f = -123.; */
7417
7418         signal(SIGFPE, blech);
7419         along = (unsigned long)f;
7420         aint = (unsigned int)f;
7421         ashort = (unsigned short)f;
7422         if (along != (unsigned long)-123)
7423                 result |= 1;
7424         if (aint != (unsigned int)-123)
7425                 result |= 1;
7426         if (ashort != (unsigned short)-123)
7427                 result |= 1;
7428         sprintf(str, "1073741824.");
7429         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7430         f = f + f;
7431         along = 0;
7432         along = (unsigned long)f;
7433         if (along != 0x80000000)
7434                 result |= 2;
7435         f -= 1.;
7436         along = 0;
7437         along = (unsigned long)f;
7438         if (along != 0x7fffffff)
7439                 result |= 1;
7440         f += 2.;
7441         along = 0;
7442         along = (unsigned long)f;
7443         if (along != 0x80000001)
7444                 result |= 2;
7445         if (result)
7446                 exit(result);
7447         signal(SIGFPE, blech_in_list);
7448         sprintf(str, "123.");
7449         sscanf(str, "%lf", &f);  /* f = 123.; */
7450         along = dummy_long((unsigned long)f);
7451         aint = dummy_int((unsigned int)f);
7452         ashort = dummy_short((unsigned short)f);
7453         if (along != (unsigned long)123)
7454                 result |= 4;
7455         if (aint != (unsigned int)123)
7456                 result |= 4;
7457         if (ashort != (unsigned short)123)
7458                 result |= 4;
7459         exit(result);
7460
7461 }
7462 EOCP
7463 set try
7464 if eval $compile_ok; then
7465         ./try
7466         castflags=$?
7467 else
7468         echo "(I can't seem to compile the test program--assuming it can't)"
7469         castflags=7
7470 fi
7471 case "$castflags" in
7472 0)      val="$define"
7473         echo "Yup, it can."
7474         ;;
7475 *)      val="$undef"
7476         echo "Nope, it can't."
7477         ;;
7478 esac
7479 set d_castneg
7480 eval $setvar
7481 $rm -f try.*
7482
7483 : see if vprintf exists
7484 echo " "
7485 if set vprintf val -f d_vprintf; eval $csym; $val; then
7486         echo 'vprintf() found.' >&4
7487         val="$define"
7488         $cat >vprintf.c <<'EOF'
7489 #include <varargs.h>
7490
7491 int main() { xxx("foo"); }
7492
7493 xxx(va_alist)
7494 va_dcl
7495 {
7496         va_list args;
7497         char buf[10];
7498
7499         va_start(args);
7500         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7501 }
7502 EOF
7503         set vprintf
7504         if eval $compile && ./vprintf; then
7505                 echo "Your vsprintf() returns (int)." >&4
7506                 val2="$undef"
7507         else
7508                 echo "Your vsprintf() returns (char*)." >&4
7509                 val2="$define"
7510         fi
7511 else
7512         echo 'vprintf() NOT found.' >&4
7513                 val="$undef"
7514                 val2="$undef"
7515 fi
7516 set d_vprintf
7517 eval $setvar
7518 val=$val2
7519 set d_charvspr
7520 eval $setvar
7521
7522 : see if chown exists
7523 set chown d_chown
7524 eval $inlibc
7525
7526 : see if chroot exists
7527 set chroot d_chroot
7528 eval $inlibc
7529
7530 : see if chsize exists
7531 set chsize d_chsize
7532 eval $inlibc
7533
7534 : check for const keyword
7535 echo " "
7536 echo 'Checking to see if your C compiler knows about "const"...' >&4
7537 $cat >const.c <<'EOCP'
7538 typedef struct spug { int drokk; } spug;
7539 int main()
7540 {
7541         const char *foo;
7542         const spug y;
7543 }
7544 EOCP
7545 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7546         val="$define"
7547         echo "Yup, it does."
7548 else
7549         val="$undef"
7550         echo "Nope, it doesn't."
7551 fi
7552 set d_const
7553 eval $setvar
7554
7555 : see if crypt exists
7556 echo " "
7557 if set crypt val -f d_crypt; eval $csym; $val; then
7558         echo 'crypt() found.' >&4
7559         val="$define"
7560         cryptlib=''
7561 else
7562         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7563         if $test -z "$cryptlib"; then
7564                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7565         else
7566                 cryptlib=-lcrypt
7567         fi
7568         if $test -z "$cryptlib"; then
7569                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7570         else
7571                 cryptlib=-lcrypt
7572         fi
7573         if $test -z "$cryptlib"; then
7574                 cryptlib=`./loc libcrypt$_a "" $libpth`
7575         else
7576                 cryptlib=-lcrypt
7577         fi
7578         if $test -z "$cryptlib"; then
7579                 echo 'crypt() NOT found.' >&4
7580                 val="$undef"
7581         else
7582                 val="$define"
7583         fi
7584 fi
7585 set d_crypt
7586 eval $setvar
7587
7588 : get csh whereabouts
7589 case "$csh" in
7590 'csh') val="$undef" ;;
7591 *) val="$define" ;;
7592 esac
7593 set d_csh
7594 eval $setvar
7595 : Respect a hint or command line value for full_csh.
7596 case "$full_csh" in
7597 '') full_csh=$csh ;;
7598 esac
7599
7600 : see if cuserid exists
7601 set cuserid d_cuserid
7602 eval $inlibc
7603
7604 : see if this is a limits.h system
7605 set limits.h i_limits
7606 eval $inhdr
7607
7608 : see if this is a float.h system
7609 set float.h i_float
7610 eval $inhdr
7611
7612 : See if number of significant digits in a double precision number is known
7613 echo " "
7614 $cat >dbl_dig.c <<EOM
7615 #$i_limits I_LIMITS
7616 #$i_float I_FLOAT
7617 #ifdef I_LIMITS
7618 #include <limits.h>
7619 #endif
7620 #ifdef I_FLOAT
7621 #include <float.h>
7622 #endif
7623 #ifdef DBL_DIG
7624 printf("Contains DBL_DIG");
7625 #endif
7626 EOM
7627 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7628 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7629         echo "DBL_DIG found." >&4
7630         val="$define"
7631 else
7632         echo "DBL_DIG NOT found." >&4
7633         val="$undef"
7634 fi
7635 $rm -f dbl_dig.?
7636 set d_dbl_dig
7637 eval $setvar
7638
7639 : see if difftime exists
7640 set difftime d_difftime
7641 eval $inlibc
7642
7643 : see if this is a dirent system
7644 echo " "
7645 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7646         val="$define"
7647         echo "<dirent.h> found." >&4
7648 else
7649         val="$undef"
7650         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7651                 echo "<sys/dir.h> found." >&4
7652                 echo " "
7653         else
7654                 xinc=`./findhdr sys/ndir.h`
7655         fi
7656         echo "<dirent.h> NOT found." >&4
7657 fi
7658 set i_dirent
7659 eval $setvar
7660
7661 : Look for type of directory structure.
7662 echo " "
7663 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7664
7665 case "$direntrytype" in
7666 ''|' ')
7667         case "$i_dirent" in
7668         $define) guess1='struct dirent' ;;
7669         *) guess1='struct direct'  ;;
7670         esac
7671         ;;
7672 *)      guess1="$direntrytype"
7673         ;;
7674 esac
7675
7676 case "$guess1" in
7677 'struct dirent') guess2='struct direct' ;;
7678 *) guess2='struct dirent' ;;
7679 esac
7680                 
7681 if $contains "$guess1" try.c >/dev/null 2>&1; then
7682         direntrytype="$guess1"
7683         echo "Your directory entries are $direntrytype." >&4
7684 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7685         direntrytype="$guess2"
7686         echo "Your directory entries seem to be $direntrytype." >&4
7687 else
7688         echo "I don't recognize your system's directory entries." >&4
7689         rp="What type is used for directory entries on this system?"
7690         dflt="$guess1"
7691         . ./myread
7692         direntrytype="$ans"
7693 fi
7694 $rm -f try.c
7695
7696
7697 : see if the directory entry stores field length
7698 echo " "
7699 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7700 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7701         echo "Good, your directory entry keeps length information in d_namlen." >&4
7702         val="$define"
7703 else
7704         echo "Your directory entry does not know about the d_namlen field." >&4
7705         val="$undef"
7706 fi
7707 set d_dirnamlen
7708 eval $setvar
7709 $rm -f try.c
7710
7711 : see if dlerror exists
7712 xxx_runnm="$runnm"
7713 runnm=false
7714 set dlerror d_dlerror
7715 eval $inlibc
7716 runnm="$xxx_runnm"
7717
7718 : see if dlfcn is available
7719 set dlfcn.h i_dlfcn
7720 eval $inhdr
7721
7722 case "$usedl" in
7723 $define|y|true)
7724         $cat << EOM
7725
7726 On a few systems, the dynamically loaded modules that perl generates and uses
7727 will need a different extension than shared libs. The default will probably
7728 be appropriate.
7729
7730 EOM
7731         case "$dlext" in
7732         '')     dflt="$so" ;;
7733         *)      dflt="$dlext" ;;
7734         esac
7735         rp='What is the extension of dynamically loaded modules'
7736         . ./myread
7737         dlext="$ans"
7738         ;;
7739 *)
7740         dlext="none"
7741         ;;
7742 esac
7743
7744 : Check if dlsym need a leading underscore
7745 echo " "
7746 val="$undef"
7747
7748 case "$dlsrc" in
7749 dl_dlopen.xs)
7750         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7751         $cat >dyna.c <<'EOM'
7752 fred () { }
7753 EOM
7754
7755 $cat >fred.c<<EOM
7756
7757 #include <stdio.h>
7758 #$i_dlfcn I_DLFCN
7759 #ifdef I_DLFCN
7760 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7761 #else
7762 #include <sys/types.h>
7763 #include <nlist.h>
7764 #include <link.h>
7765 #endif
7766
7767 extern int fred() ;
7768
7769 int main()
7770 {
7771     void * handle ;
7772     void * symbol ;
7773 #ifndef RTLD_LAZY
7774     int mode = 1 ;
7775 #else
7776     int mode = RTLD_LAZY ;
7777 #endif
7778     handle = dlopen("./dyna.$dlext", mode) ;
7779     if (handle == NULL) {
7780         printf ("1\n") ;
7781         fflush (stdout) ;
7782         exit(0);
7783     }
7784     symbol = dlsym(handle, "fred") ;
7785     if (symbol == NULL) {
7786         /* try putting a leading underscore */
7787         symbol = dlsym(handle, "_fred") ;
7788         if (symbol == NULL) {
7789             printf ("2\n") ;
7790             fflush (stdout) ;
7791             exit(0);
7792         }
7793         printf ("3\n") ;
7794     }
7795     else
7796         printf ("4\n") ;
7797     fflush (stdout) ;
7798     exit(0);
7799 }
7800 EOM
7801         : Call the object file tmp-dyna.o in case dlext=o.
7802         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7803                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7804                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7805                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7806                 xxx=`./fred`
7807                 case $xxx in
7808                 1)      echo "Test program failed using dlopen." >&4
7809                         echo "Perhaps you should not use dynamic loading." >&4;;
7810                 2)      echo "Test program failed using dlsym." >&4
7811                         echo "Perhaps you should not use dynamic loading." >&4;;
7812                 3)      echo "dlsym needs a leading underscore" >&4
7813                         val="$define" ;;
7814                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7815                 esac
7816         else
7817                 echo "I can't compile and run the test program." >&4
7818                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
7819         fi
7820         ;;
7821 esac
7822                 
7823 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7824
7825 set d_dlsymun
7826 eval $setvar
7827
7828 hasproto='varname=$1; func=$2; shift; shift;
7829 while $test $# -ge 2; do
7830         case "$1" in
7831         $define) echo "#include <$2>";;
7832         esac ;
7833     shift 2;
7834 done > try.c;
7835 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7836 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7837         echo "$func() prototype found.";
7838         val="$define";
7839 else
7840         echo "$func() prototype NOT found.";
7841         val="$undef";
7842 fi;
7843 set $varname;
7844 eval $setvar;
7845 $rm -f try.c tryout.c'
7846
7847 : see if prototype for drand48 is available
7848 echo " "
7849 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7850 eval $hasproto
7851
7852 : see if dup2 exists
7853 set dup2 d_dup2
7854 eval $inlibc
7855
7856 : see if eaccess exists
7857 set eaccess d_eaccess
7858 eval $inlibc
7859
7860 : see if endgrent exists
7861 set endgrent d_endgrent
7862 eval $inlibc
7863
7864 : see if endhostent exists
7865 set endhostent d_endhent
7866 eval $inlibc
7867
7868 : see if endnetent exists
7869 set endnetent d_endnent
7870 eval $inlibc
7871
7872 : see if endprotoent exists
7873 set endprotoent d_endpent
7874 eval $inlibc
7875
7876 : see if endpwent exists
7877 set endpwent d_endpwent
7878 eval $inlibc
7879
7880 : see if endservent exists
7881 set endservent d_endsent
7882 eval $inlibc
7883
7884 : see if endspent exists
7885 set endspent d_endspent
7886 eval $inlibc
7887
7888 : Locate the flags for 'open()'
7889 echo " "
7890 $cat >open3.c <<'EOCP'
7891 #include <sys/types.h>
7892 #ifdef I_FCNTL
7893 #include <fcntl.h>
7894 #endif
7895 #ifdef I_SYS_FILE
7896 #include <sys/file.h>
7897 #endif
7898 int main() {
7899         if(O_RDONLY);
7900 #ifdef O_TRUNC
7901         exit(0);
7902 #else
7903         exit(1);
7904 #endif
7905 }
7906 EOCP
7907 : check sys/file.h first to get FREAD on Sun
7908 if $test `./findhdr sys/file.h` && \
7909                 set open3 -DI_SYS_FILE && eval $compile; then
7910         h_sysfile=true;
7911         echo "<sys/file.h> defines the O_* constants..." >&4
7912         if ./open3; then
7913                 echo "and you have the 3 argument form of open()." >&4
7914                 val="$define"
7915         else
7916                 echo "but not the 3 argument form of open().  Oh, well." >&4
7917                 val="$undef"
7918         fi
7919 elif $test `./findhdr fcntl.h` && \
7920                 set open3 -DI_FCNTL && eval $compile; then
7921         h_fcntl=true;
7922         echo "<fcntl.h> defines the O_* constants..." >&4
7923         if ./open3; then
7924                 echo "and you have the 3 argument form of open()." >&4
7925                 val="$define"
7926         else
7927                 echo "but not the 3 argument form of open().  Oh, well." >&4
7928                 val="$undef"
7929         fi
7930 else
7931         val="$undef"
7932         echo "I can't find the O_* constant definitions!  You got problems." >&4
7933 fi
7934 set d_open3
7935 eval $setvar
7936 $rm -f open3*
7937
7938 : check for non-blocking I/O stuff
7939 case "$h_sysfile" in
7940 true) echo "#include <sys/file.h>" > head.c;;
7941 *)
7942         case "$h_fcntl" in
7943         true) echo "#include <fcntl.h>" > head.c;;
7944         *) echo "#include <sys/fcntl.h>" > head.c;;
7945         esac
7946         ;;
7947 esac
7948 echo " "
7949 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7950 case "$o_nonblock" in
7951 '')
7952         $cat head.c > try.c
7953         $cat >>try.c <<'EOCP'
7954 int main() {
7955 #ifdef O_NONBLOCK
7956         printf("O_NONBLOCK\n");
7957         exit(0);
7958 #endif
7959 #ifdef O_NDELAY
7960         printf("O_NDELAY\n");
7961         exit(0);
7962 #endif
7963 #ifdef FNDELAY
7964         printf("FNDELAY\n");
7965         exit(0);
7966 #endif
7967         exit(0);
7968 }
7969 EOCP
7970         set try
7971         if eval $compile_ok; then
7972                 o_nonblock=`./try`
7973                 case "$o_nonblock" in
7974                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7975                 *) echo "Seems like we can use $o_nonblock.";;
7976                 esac
7977         else
7978                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7979         fi
7980         ;;
7981 *) echo "Using $hint value $o_nonblock.";;
7982 esac
7983 $rm -f try try.* .out core
7984
7985 echo " "
7986 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7987 case "$eagain" in
7988 '')
7989         $cat head.c > try.c
7990         $cat >>try.c <<EOCP
7991 #include <errno.h>
7992 #include <sys/types.h>
7993 #include <signal.h>
7994 #define MY_O_NONBLOCK $o_nonblock
7995 #ifndef errno  /* XXX need better Configure test */
7996 extern int errno;
7997 #endif
7998 $signal_t blech(x) int x; { exit(3); }
7999 EOCP
8000         $cat >> try.c <<'EOCP'
8001 int main()
8002 {
8003         int pd[2];
8004         int pu[2];
8005         char buf[1];
8006         char string[100];
8007
8008         pipe(pd);       /* Down: child -> parent */
8009         pipe(pu);       /* Up: parent -> child */
8010         if (0 != fork()) {
8011                 int ret;
8012                 close(pd[1]);   /* Parent reads from pd[0] */
8013                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8014                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8015                         exit(1);
8016                 signal(SIGALRM, blech);
8017                 alarm(5);
8018                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8019                         exit(2);
8020                 sprintf(string, "%d\n", ret);
8021                 write(2, string, strlen(string));
8022                 alarm(0);
8023 #ifdef EAGAIN
8024                 if (errno == EAGAIN) {
8025                         printf("EAGAIN\n");
8026                         goto ok;
8027                 }
8028 #endif
8029 #ifdef EWOULDBLOCK
8030                 if (errno == EWOULDBLOCK)
8031                         printf("EWOULDBLOCK\n");
8032 #endif
8033         ok:
8034                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8035                 sleep(2);                               /* Give it time to close our pipe */
8036                 alarm(5);
8037                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8038                 alarm(0);
8039                 sprintf(string, "%d\n", ret);
8040                 write(3, string, strlen(string));
8041                 exit(0);
8042         }
8043
8044         close(pd[0]);                   /* We write to pd[1] */
8045         close(pu[1]);                   /* We read from pu[0] */
8046         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8047         close(pd[1]);                   /* Pipe pd is now fully closed! */
8048         exit(0);                                /* Bye bye, thank you for playing! */
8049 }
8050 EOCP
8051         set try
8052         if eval $compile_ok; then
8053                 echo "$startsh" >mtry
8054                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8055                 chmod +x mtry
8056                 ./mtry >/dev/null 2>&1
8057                 case $? in
8058                 0) eagain=`$cat try.out`;;
8059                 1) echo "Could not perform non-blocking setting!";;
8060                 2) echo "I did a successful read() for something that was not there!";;
8061                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8062                 *) echo "Something terribly wrong happened during testing.";;
8063                 esac
8064                 rd_nodata=`$cat try.ret`
8065                 echo "A read() system call with no data present returns $rd_nodata."
8066                 case "$rd_nodata" in
8067                 0|-1) ;;
8068                 *)
8069                         echo "(That's peculiar, fixing that to be -1.)"
8070                         rd_nodata=-1
8071                         ;;
8072                 esac
8073                 case "$eagain" in
8074                 '')
8075                         echo "Forcing errno EAGAIN on read() with no data available."
8076                         eagain=EAGAIN
8077                         ;;
8078                 *)
8079                         echo "Your read() sets errno to $eagain when no data is available."
8080                         ;;
8081                 esac
8082                 status=`$cat try.err`
8083                 case "$status" in
8084                 0) echo "And it correctly returns 0 to signal EOF.";;
8085                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8086                 *) echo "However, your read() returns '$status' on EOF??";;
8087                 esac
8088                 val="$define"
8089                 if test "$status" = "$rd_nodata"; then
8090                         echo "WARNING: you can't distinguish between EOF and no data!"
8091                         val="$undef"
8092                 fi
8093         else
8094                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8095                 eagain=EAGAIN
8096         fi
8097         set d_eofnblk
8098         eval $setvar
8099         ;;
8100 *)
8101         echo "Using $hint value $eagain."
8102         echo "Your read() returns $rd_nodata when no data is present."
8103         case "$d_eofnblk" in
8104         "$define") echo "And you can see EOF because read() returns 0.";;
8105         "$undef") echo "But you can't see EOF status from read() returned value.";;
8106         *)
8107                 echo "(Assuming you can't see EOF status from read anyway.)"
8108                 d_eofnblk=$undef
8109                 ;;
8110         esac
8111         ;;
8112 esac
8113 $rm -f try try.* .out core head.c mtry
8114
8115 : see if fchmod exists
8116 set fchmod d_fchmod
8117 eval $inlibc
8118
8119 : see if fchown exists
8120 set fchown d_fchown
8121 eval $inlibc
8122
8123 : see if this is an fcntl system
8124 set fcntl d_fcntl
8125 eval $inlibc
8126
8127 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8128 while $test $# -ge 2; do
8129         case "$1" in
8130         $define) echo "#include <$2>";;
8131         esac ;
8132     shift 2;
8133 done > try.c;
8134 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8135 set try;
8136 if eval $compile; then
8137         val="$define";
8138 else
8139         val="$undef";
8140 fi;
8141 set $varname;
8142 eval $setvar;
8143 $rm -f try.c try.o'
8144
8145 socketlib=''
8146 sockethdr=''
8147 : see whether socket exists
8148 echo " "
8149 $echo $n "Hmm... $c" >&4
8150 if set socket val -f d_socket; eval $csym; $val; then
8151         echo "Looks like you have Berkeley networking support." >&4
8152         d_socket="$define"
8153         if set setsockopt val -f; eval $csym; $val; then
8154                 d_oldsock="$undef"
8155         else
8156                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8157                 d_oldsock="$define"
8158         fi
8159 else
8160         if $contains socklib libc.list >/dev/null 2>&1; then
8161                 echo "Looks like you have Berkeley networking support." >&4
8162                 d_socket="$define"
8163                 : we will have to assume that it supports the 4.2 BSD interface
8164                 d_oldsock="$undef"
8165         else
8166                 echo "You don't have Berkeley networking in libc$_a..." >&4
8167                 if test "X$d_socket" = "X$define"; then
8168                    echo "...but you seem to believe that you have sockets." >&4
8169                 else
8170                         for net in net socket
8171                         do
8172                                 if test -f /usr/lib/lib$net$_a; then
8173                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8174                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8175                                         if $contains socket libc.list >/dev/null 2>&1; then
8176                                                 d_socket="$define"
8177                                                 socketlib="-l$net"
8178                                                 case "$net" in
8179                                                 net)
8180                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8181                                                         sockethdr="-I/usr/netinclude"
8182                                                         ;;
8183                                                 esac
8184                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8185                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8186                                                         d_oldsock="$undef"
8187                                                 else
8188                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8189                                                         d_oldsock="$define"
8190                                                 fi
8191                                                 break
8192                                         fi
8193                                 fi
8194                         done
8195                         if test "X$d_socket" != "X$define"; then
8196                            echo "or anywhere else I see." >&4
8197                            d_socket="$undef"
8198                            d_oldsock="$undef"
8199                         fi
8200                 fi
8201         fi
8202 fi
8203
8204 : see if socketpair exists
8205 set socketpair d_sockpair
8206 eval $inlibc
8207
8208
8209 echo " "
8210 echo "Checking the availability of certain socket constants..." >& 4
8211 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8212         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8213         $cat >try.c <<EOF
8214 #include <sys/types.h>
8215 #include <sys/socket.h>
8216 int main() {
8217     int i = $ENUM;
8218 }
8219 EOF
8220         val="$undef"
8221         set try; if eval $compile; then
8222                 val="$define"
8223         fi
8224         set d_${enum}; eval $setvar
8225         $rm -f try.c try
8226 done
8227
8228 : see if sys/select.h has to be included
8229 set sys/select.h i_sysselct
8230 eval $inhdr
8231
8232 : see if we should include time.h, sys/time.h, or both
8233 echo " "
8234 if test "X$timeincl" = X; then
8235         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8236         $echo $n "I'm now running the test program...$c"
8237         $cat >try.c <<'EOCP'
8238 #include <sys/types.h>
8239 #ifdef I_TIME
8240 #include <time.h>
8241 #endif
8242 #ifdef I_SYSTIME
8243 #ifdef SYSTIMEKERNEL
8244 #define KERNEL
8245 #endif
8246 #include <sys/time.h>
8247 #endif
8248 #ifdef I_SYSSELECT
8249 #include <sys/select.h>
8250 #endif
8251 int main()
8252 {
8253         struct tm foo;
8254 #ifdef S_TIMEVAL
8255         struct timeval bar;
8256 #endif
8257 #ifdef S_TIMEZONE
8258         struct timezone tzp;
8259 #endif
8260         if (foo.tm_sec == foo.tm_sec)
8261                 exit(0);
8262 #ifdef S_TIMEVAL
8263         if (bar.tv_sec == bar.tv_sec)
8264                 exit(0);
8265 #endif
8266         exit(1);
8267 }
8268 EOCP
8269         flags=''
8270         for s_timezone in '-DS_TIMEZONE' ''; do
8271         sysselect=''
8272         for s_timeval in '-DS_TIMEVAL' ''; do
8273         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8274         for i_time in '' '-DI_TIME'; do
8275         for i_systime in '-DI_SYSTIME' ''; do
8276                 case "$flags" in
8277                 '') $echo $n ".$c"
8278                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8279                         if eval $compile; then
8280                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8281                                 shift
8282                                 flags="$*"
8283                                 echo " "
8284                                 $echo $n "Succeeded with $flags$c"
8285                         fi
8286                         ;;
8287                 esac
8288         done
8289         done
8290         done
8291         done
8292         done
8293         timeincl=''
8294         echo " "
8295         case "$flags" in
8296         *SYSTIMEKERNEL*) i_systimek="$define"
8297                 timeincl=`./findhdr sys/time.h`
8298                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8299         *) i_systimek="$undef";;
8300         esac
8301         case "$flags" in
8302         *I_TIME*) i_time="$define"
8303                 timeincl=`./findhdr time.h`" $timeincl"
8304                 echo "We'll include <time.h>." >&4;;
8305         *) i_time="$undef";;
8306         esac
8307         case "$flags" in
8308         *I_SYSTIME*) i_systime="$define"
8309                 timeincl=`./findhdr sys/time.h`" $timeincl"
8310                 echo "We'll include <sys/time.h>." >&4;;
8311         *) i_systime="$undef";;
8312         esac
8313         $rm -f try.c try
8314 fi
8315
8316 : check for fd_set items
8317 $cat <<EOM
8318
8319 Checking to see how well your C compiler handles fd_set and friends ...
8320 EOM
8321 $cat >fd_set.c <<EOCP
8322 #$i_systime I_SYS_TIME
8323 #$i_sysselct I_SYS_SELECT
8324 #$d_socket HAS_SOCKET
8325 #include <sys/types.h>
8326 #ifdef HAS_SOCKET
8327 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8328 #endif
8329 #ifdef I_SYS_TIME
8330 #include <sys/time.h>
8331 #endif
8332 #ifdef I_SYS_SELECT
8333 #include <sys/select.h>
8334 #endif
8335 int main() {
8336         fd_set fds;
8337
8338 #ifdef TRYBITS
8339         if(fds.fds_bits);
8340 #endif
8341
8342 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8343         exit(0);
8344 #else
8345         exit(1);
8346 #endif
8347 }
8348 EOCP
8349 set fd_set -DTRYBITS
8350 if eval $compile; then
8351         d_fds_bits="$define"
8352         d_fd_set="$define"
8353         echo "Well, your system knows about the normal fd_set typedef..." >&4
8354         if ./fd_set; then
8355                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8356                 d_fd_macros="$define"
8357         else
8358                 $cat >&4 <<'EOM'
8359 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8360 EOM
8361                 d_fd_macros="$undef"
8362         fi
8363 else
8364         $cat <<'EOM'
8365 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8366 EOM
8367         set fd_set
8368         if eval $compile; then
8369                 d_fds_bits="$undef"
8370                 d_fd_set="$define"
8371                 echo "Well, your system has some sort of fd_set available..." >&4
8372                 if ./fd_set; then
8373                         echo "and you have the normal fd_set macros." >&4
8374                         d_fd_macros="$define"
8375                 else
8376                         $cat <<'EOM'
8377 but not the normal fd_set macros!  Gross!  More work for me...
8378 EOM
8379                         d_fd_macros="$undef"
8380                 fi
8381         else
8382         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8383                 d_fd_set="$undef"
8384                 d_fds_bits="$undef"
8385                 d_fd_macros="$undef"
8386         fi
8387 fi
8388 $rm -f fd_set*
8389
8390 : see if fgetpos exists
8391 set fgetpos d_fgetpos
8392 eval $inlibc
8393
8394 : see if flock exists
8395 set flock d_flock
8396 eval $inlibc
8397
8398 : see if fork exists
8399 set fork d_fork
8400 eval $inlibc
8401
8402 : see if pathconf exists
8403 set pathconf d_pathconf
8404 eval $inlibc
8405
8406 : see if fpathconf exists
8407 set fpathconf d_fpathconf
8408 eval $inlibc
8409
8410 : define an is-a-typedef? function
8411 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8412 case "$inclist" in
8413 "") inclist="sys/types.h";;
8414 esac;
8415 eval "varval=\$$var";
8416 case "$varval" in
8417 "")
8418         $rm -f temp.c;
8419         for inc in $inclist; do
8420                 echo "#include <$inc>" >>temp.c;
8421         done;
8422         echo "#ifdef $type" >> temp.c;
8423         echo "printf(\"We have $type\");" >> temp.c;
8424         echo "#endif" >> temp.c;
8425         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8426         if $contains $type temp.E >/dev/null 2>&1; then
8427                 eval "$var=\$type";
8428         else
8429                 eval "$var=\$def";
8430         fi;
8431         $rm -f temp.?;;
8432 *) eval "$var=\$varval";;
8433 esac'
8434
8435 : define an is-a-typedef? function that prompts if the type is not available.
8436 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8437 case "$inclist" in
8438 "") inclist="sys/types.h";;
8439 esac;
8440 eval "varval=\$$var";
8441 case "$varval" in
8442 "")
8443         $rm -f temp.c;
8444         for inc in $inclist; do
8445                 echo "#include <$inc>" >>temp.c;
8446         done;
8447         echo "#ifdef $type" >> temp.c;
8448         echo "printf(\"We have $type\");" >> temp.c;
8449         echo "#endif" >> temp.c;
8450         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8451         echo " " ;
8452         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8453         if $contains $type temp.E >/dev/null 2>&1; then
8454                 echo "$type found." >&4;
8455                 eval "$var=\$type";
8456         else
8457                 echo "$type NOT found." >&4;
8458                 dflt="$def";
8459                 . ./myread ;
8460                 eval "$var=\$ans";
8461         fi;
8462         $rm -f temp.?;;
8463 *) eval "$var=\$varval";;
8464 esac'
8465
8466 : see what type lseek is declared as in the kernel
8467 rp="What is the type used for lseek's offset on this system?"
8468 set off_t lseektype long stdio.h sys/types.h
8469 eval $typedef_ask
8470
8471 echo " "
8472 $echo $n "Checking to see how big your file offsets are...$c" >&4
8473 $cat >try.c <<EOCP
8474 #include <sys/types.h>
8475 #include <stdio.h>
8476 int main()
8477 {
8478         printf("%d\n", sizeof($lseektype));
8479 }
8480 EOCP
8481 set try
8482 if eval $compile_ok; then
8483         lseeksize=`./try`
8484         $echo " $lseeksize bytes." >&4
8485 else
8486         dflt='4'
8487         echo " "
8488         echo "(I can't seem to compile the test program.  Guessing...)"
8489         rp="What is the size of your file offsets (in bytes)?"
8490         . ./myread
8491         lseeksize="$ans"
8492 fi
8493 $rm -f try.c try
8494
8495 : see what type file positions are declared as in the library
8496 rp="What is the type for file position used by fsetpos()?"
8497 set fpos_t fpostype long stdio.h sys/types.h
8498 eval $typedef_ask
8499
8500 echo " "
8501 case "$fpostype" in
8502 *_t) zzz="$fpostype"    ;;
8503 *)   zzz="fpos_t"       ;;
8504 esac
8505 echo "Checking the size of $zzz..." >&4 
8506 cat > try.c <<EOCP
8507 #include <sys/types.h>
8508 #include <stdio.h>
8509 int main() {
8510     printf("%d\n", sizeof($fpostype));
8511 }
8512 EOCP
8513 set try
8514 if eval $compile_ok; then
8515         yyy=`./try`
8516         case "$yyy" in
8517         '')     fpossize=4
8518                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8519                 ;;
8520         *)      fpossize=$yyy
8521                 echo "Your $zzz size is $fpossize bytes."
8522                 ;;
8523         esac
8524 else
8525         fpossize=4
8526         echo "(I can't compile the test program--guessing $fpossize.)" >&4
8527 fi
8528
8529
8530
8531 : check for off64_t
8532 echo " "
8533 echo "Checking to see if your system supports off64_t..." >&4
8534 $cat >try.c <<EOCP
8535 #include <sys/types.h>
8536 #include <unistd.h>
8537 int main() { off64_t x = 7; }'
8538 EOCP
8539 set try
8540 if eval $compile; then
8541         val="$define"
8542         echo "Yes, it does."
8543 else
8544         val="$undef"
8545         echo "No, it doesn't."
8546         case "$lseeksize" in
8547         8) echo "(This is okay because your off_t is 64 bits wide.)" ;;
8548         esac
8549 fi
8550 $rm -f try.* try
8551 set d_off64_t
8552 eval $setvar
8553
8554 : check for fpos64_t
8555 echo " "
8556 echo "Checking to see if your system supports fpos64_t..." >&4
8557 $cat >try.c <<EOCP
8558 #include <sys/stdio.h>
8559 int main() { fpos64_t x x = 7; }'
8560 EOCP
8561 set try
8562 if eval $compile; then
8563         val="$define"
8564         echo "Yes, it does."
8565 else
8566         val="$undef"
8567         echo "No, it doesn't."
8568         case "$fpossize" in
8569         8) echo "(This is okay because your fpos_t is 64 bits wide.)" ;;
8570         esac
8571 fi
8572 $rm -f try.* try
8573 set d_fpos64_t
8574 eval $setvar
8575
8576 hasstruct='varname=$1; struct=$2; shift; shift;
8577 while $test $# -ge 2; do
8578         case "$1" in
8579         $define) echo "#include <$2>";;
8580         esac ;
8581     shift 2;
8582 done > try.c;
8583 echo "int main () { struct $struct foo; }" >> try.c;
8584 set try;
8585 if eval $compile; then
8586         val="$define";
8587 else
8588         val="$undef";
8589 fi;
8590 set $varname;
8591 eval $setvar;
8592 $rm -f try.c try.o'
8593
8594 : see if this is a sys/param system
8595 set sys/param.h i_sysparam
8596 eval $inhdr
8597
8598 : see if this is a sys/mount.h system
8599 set sys/mount.h i_sysmount
8600 eval $inhdr
8601
8602 : see if sys/types.h has to be included
8603 set sys/types.h i_systypes
8604 eval $inhdr
8605
8606
8607 echo " "
8608 echo "Checking to see if your system supports struct fs_data..." >&4
8609 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
8610 eval $hasstruct
8611 case "$d_fs_data_s" in
8612 "$define")      echo "Yes, it does."   ;;
8613 *)              echo "No, it doesn't." ;;
8614 esac
8615
8616 : see if fseeko exists
8617 set fseeko d_fseeko
8618 eval $inlibc
8619
8620 : see if fsetpos exists
8621 set fsetpos d_fsetpos
8622 eval $inlibc
8623
8624
8625 : see if fstatfs exists
8626 set fstatfs d_fstatfs
8627 eval $inlibc
8628
8629
8630 : see if statvfs exists
8631 set statvfs d_statvfs
8632 eval $inlibc
8633
8634 : see if fstatvfs exists
8635 set fstatvfs d_fstatvfs
8636 eval $inlibc
8637
8638
8639 : see if ftello exists
8640 set ftello d_ftello
8641 eval $inlibc
8642
8643 : see if getgrent exists
8644 set getgrent d_getgrent
8645 eval $inlibc
8646
8647 : see if gethostbyaddr exists
8648 set gethostbyaddr d_gethbyaddr
8649 eval $inlibc
8650
8651 : see if gethostbyname exists
8652 set gethostbyname d_gethbyname
8653 eval $inlibc
8654
8655 : see if gethostent exists
8656 set gethostent d_gethent
8657 eval $inlibc
8658
8659 : see how we will look up host name
8660 echo " "
8661 call=''
8662 if set gethostname val -f d_gethname; eval $csym; $val; then
8663         echo 'gethostname() found.' >&4
8664         d_gethname="$define"
8665         call=gethostname
8666 fi
8667 if set uname val -f d_uname; eval $csym; $val; then
8668         if ./xenix; then
8669                 $cat <<'EOM'
8670 uname() was found, but you're running xenix, and older versions of xenix
8671 have a broken uname(). If you don't really know whether your xenix is old
8672 enough to have a broken system call, use the default answer.
8673
8674 EOM
8675                 dflt=y
8676                 case "$d_uname" in
8677                 "$define") dflt=n;;
8678                 esac
8679                 rp='Is your uname() broken?'
8680                 . ./myread
8681                 case "$ans" in
8682                 n*) d_uname="$define"; call=uname;;
8683                 esac
8684         else
8685                 echo 'uname() found.' >&4
8686                 d_uname="$define"
8687                 case "$call" in
8688                 '') call=uname ;;
8689                 esac
8690         fi
8691 fi
8692 case "$d_gethname" in
8693 '') d_gethname="$undef";;
8694 esac
8695 case "$d_uname" in
8696 '') d_uname="$undef";;
8697 esac
8698 case "$d_uname$d_gethname" in
8699 *define*)
8700         dflt=n
8701         cat <<EOM
8702  
8703 Every now and then someone has a $call() that lies about the hostname
8704 but can't be fixed for political or economic reasons.  If you wish, I can
8705 pretend $call() isn't there and maybe compute hostname at run-time
8706 thanks to the '$phostname' command.
8707
8708 EOM
8709         rp="Shall I ignore $call() from now on?"
8710         . ./myread
8711         case "$ans" in
8712         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8713         esac;;
8714 esac
8715 case "$phostname" in
8716 '') aphostname='';;
8717 *) case "$aphostname" in
8718         /*) ;;
8719         *) set X $phostname
8720                 shift
8721                 file=$1
8722                 shift
8723                 file=`./loc $file $file $pth`
8724                 aphostname=`echo $file $*`
8725                 ;;
8726         esac
8727         ;;
8728 esac
8729 case "$d_uname$d_gethname" in
8730 *define*) ;;
8731 *)
8732         case "$phostname" in
8733         '')
8734                 echo "There will be no way for $package to get your hostname." >&4;;
8735         *)
8736         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8737                 ;;
8738         esac;;
8739 esac
8740 case "$d_phostname" in
8741 '') d_phostname="$undef";;
8742 esac
8743
8744 : see if this is a netdb.h system
8745 set netdb.h i_netdb
8746 eval $inhdr
8747
8748 : see if prototypes for various gethostxxx netdb.h functions are available
8749 echo " "
8750 set d_gethostprotos gethostent $i_netdb netdb.h
8751 eval $hasproto
8752
8753 : see if getlogin exists
8754 set getlogin d_getlogin
8755 eval $inlibc
8756
8757 : see if getmnt exists
8758 set getmnt d_getmnt
8759 eval $inlibc
8760
8761 : see if getmntent exists
8762 set getmntent d_getmntent
8763 eval $inlibc
8764
8765 : see if getnetbyaddr exists
8766 set getnetbyaddr d_getnbyaddr
8767 eval $inlibc
8768
8769 : see if getnetbyname exists
8770 set getnetbyname d_getnbyname
8771 eval $inlibc
8772
8773 : see if getnetent exists
8774 set getnetent d_getnent
8775 eval $inlibc
8776
8777 : see if prototypes for various getnetxxx netdb.h functions are available
8778 echo " "
8779 set d_getnetprotos getnetent $i_netdb netdb.h
8780 eval $hasproto
8781
8782
8783 : see if getprotobyname exists
8784 set getprotobyname d_getpbyname
8785 eval $inlibc
8786
8787 : see if getprotobynumber exists
8788 set getprotobynumber d_getpbynumber
8789 eval $inlibc
8790
8791 : see if getprotoent exists
8792 set getprotoent d_getpent
8793 eval $inlibc
8794
8795 : see if getpgid exists
8796 set getpgid d_getpgid
8797 eval $inlibc
8798
8799 : see if getpgrp2 exists
8800 set getpgrp2 d_getpgrp2
8801 eval $inlibc
8802
8803 : see if getppid exists
8804 set getppid d_getppid
8805 eval $inlibc
8806
8807 : see if getpriority exists
8808 set getpriority d_getprior
8809 eval $inlibc
8810
8811 : see if prototypes for various getprotoxxx netdb.h functions are available
8812 echo " "
8813 set d_getprotoprotos getprotoent $i_netdb netdb.h
8814 eval $hasproto
8815
8816 : see if getpwent exists
8817 set getpwent d_getpwent
8818 eval $inlibc
8819
8820
8821 : see if getservbyname exists
8822 set getservbyname d_getsbyname
8823 eval $inlibc
8824
8825 : see if getservbyport exists
8826 set getservbyport d_getsbyport
8827 eval $inlibc
8828
8829 : see if getservent exists
8830 set getservent d_getsent
8831 eval $inlibc
8832
8833 : see if prototypes for various getservxxx netdb.h functions are available
8834 echo " "
8835 set d_getservprotos getservent $i_netdb netdb.h
8836 eval $hasproto
8837
8838 : see if getspent exists
8839 set getspent d_getspent
8840 eval $inlibc
8841
8842 : see if getspnam exists
8843 set getspnam d_getspnam
8844 eval $inlibc
8845
8846 : see if gettimeofday or ftime exists
8847 set gettimeofday d_gettimeod
8848 eval $inlibc
8849 case "$d_gettimeod" in
8850 "$undef")
8851         set ftime d_ftime 
8852         eval $inlibc
8853         ;;
8854 *)
8855         val="$undef"; set d_ftime; eval $setvar
8856         ;;
8857 esac
8858 case "$d_gettimeod$d_ftime" in
8859 "$undef$undef")
8860         echo " "
8861         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8862         ;;
8863 esac
8864
8865 : see if this is an grp system
8866 set grp.h i_grp
8867 eval $inhdr
8868
8869 case "$i_grp" in
8870 $define)
8871         xxx=`./findhdr grp.h`
8872         $cppstdin $cppflags $cppminus < $xxx >$$.h
8873
8874         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8875                 val="$define"
8876         else
8877                 val="$undef"
8878         fi
8879         set d_grpasswd
8880         eval $setvar
8881
8882         $rm -f $$.h
8883         ;;
8884 *)
8885         val="$undef";
8886         set d_grpasswd; eval $setvar
8887         ;;
8888 esac
8889
8890 : see if hasmntopt exists
8891 set hasmntopt d_hasmntopt
8892 eval $inlibc
8893
8894 : see if this is a netinet/in.h or sys/in.h system
8895 set netinet/in.h i_niin sys/in.h i_sysin
8896 eval $inhdr
8897
8898 : see if arpa/inet.h has to be included
8899 set arpa/inet.h i_arpainet
8900 eval $inhdr
8901
8902 : see if htonl --and friends-- exists
8903 val=''
8904 set htonl val
8905 eval $inlibc
8906
8907 : Maybe they are macros.
8908 case "$val" in
8909 $undef)
8910         $cat >htonl.c <<EOM
8911 #include <stdio.h>
8912 #include <sys/types.h>
8913 #$i_niin I_NETINET_IN
8914 #$i_sysin I_SYS_IN
8915 #$i_arpainet I_ARPA_INET
8916 #ifdef I_NETINET_IN
8917 #include <netinet/in.h>
8918 #endif
8919 #ifdef I_SYS_IN
8920 #include <sys/in.h>
8921 #endif
8922 #ifdef I_ARPA_INET
8923 #include <arpa/inet.h>
8924 #endif
8925 #ifdef htonl
8926 printf("Defined as a macro.");
8927 #endif
8928 EOM
8929         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8930         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8931                 val="$define"
8932                 echo "But it seems to be defined as a macro." >&4
8933         fi
8934         $rm -f htonl.?
8935         ;;
8936 esac
8937 set d_htonl
8938 eval $setvar
8939
8940 : see which of string.h or strings.h is needed
8941 echo " "
8942 strings=`./findhdr string.h`
8943 if $test "$strings" && $test -r "$strings"; then
8944         echo "Using <string.h> instead of <strings.h>." >&4
8945         val="$define"
8946 else
8947         val="$undef"
8948         strings=`./findhdr strings.h`
8949         if $test "$strings" && $test -r "$strings"; then
8950                 echo "Using <strings.h> instead of <string.h>." >&4
8951         else
8952                 echo "No string header found -- You'll surely have problems." >&4
8953         fi
8954 fi
8955 set i_string
8956 eval $setvar
8957 case "$i_string" in
8958 "$undef") strings=`./findhdr strings.h`;;
8959 *)        strings=`./findhdr string.h`;;
8960 esac
8961
8962 : index or strchr
8963 echo " "
8964 if set index val -f; eval $csym; $val; then
8965         if set strchr val -f d_strchr; eval $csym; $val; then
8966                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8967                         val="$define"
8968                         vali="$undef"
8969                         echo "strchr() found." >&4
8970                 else
8971                         val="$undef"
8972                         vali="$define"
8973                         echo "index() found." >&4
8974                 fi
8975         else
8976                 val="$undef"
8977                 vali="$define"
8978                 echo "index() found." >&4
8979         fi
8980 else
8981         if set strchr val -f d_strchr; eval $csym; $val; then
8982                 val="$define"
8983                 vali="$undef"
8984                 echo "strchr() found." >&4
8985         else
8986                 echo "No index() or strchr() found!" >&4
8987                 val="$undef"
8988                 vali="$undef"
8989         fi
8990 fi
8991 set d_strchr; eval $setvar
8992 val="$vali"
8993 set d_index; eval $setvar
8994
8995 : check whether inet_aton exists
8996 set inet_aton d_inetaton
8997 eval $inlibc
8998
8999 : see if inttypes.h is available
9000 : we want a real compile instead of Inhdr because some systems
9001 : have an inttypes.h which includes non-existent headers
9002 echo " "
9003 $cat >try.c <<EOCP
9004 #include <inttypes.h>
9005 int main() {
9006         static int32_t foo32 = 0x12345678;
9007 }
9008 EOCP
9009 set try
9010 if eval $compile; then
9011         echo "<inttypes.h> found." >&4
9012         val="$define"
9013 else
9014         echo "<inttypes.h> NOT found." >&4
9015         val="$undef"
9016 fi
9017 $rm -f try.c try
9018 set i_inttypes
9019 eval $setvar
9020
9021 : check for int64_t
9022 case "$use64bits" in
9023 "$define" )
9024         echo " "
9025         $echo $n "Checking to see if your system supports int64_t...$c" >&4
9026         $cat >try.c <<EOCP
9027 #include <sys/types.h>
9028 #$i_inttypes I_INTTYPES
9029 #ifdef I_INTTYPES
9030 #include <inttypes.h>
9031 #endif
9032 int main() { int64_t x = 7; }
9033 EOCP
9034         set try
9035         if eval $compile; then
9036                 val="$define"
9037                 echo " Yes, it does." >&4
9038         else
9039                 val="$undef"
9040                 echo " No, it doesn't." >&4
9041         fi
9042         $rm -f try try.*
9043         ;;
9044 *)      val="$undef"
9045         ;;
9046 esac
9047 set d_int64t
9048 eval $setvar
9049
9050
9051 : Look for isascii
9052 echo " "
9053 $cat >isascii.c <<'EOCP'
9054 #include <stdio.h>
9055 #include <ctype.h>
9056 int main() {
9057         int c = 'A';
9058         if (isascii(c))
9059                 exit(0);
9060         else
9061                 exit(1);
9062 }
9063 EOCP
9064 set isascii
9065 if eval $compile; then
9066         echo "isascii() found." >&4
9067         val="$define"
9068 else
9069         echo "isascii() NOT found." >&4
9070         val="$undef"
9071 fi
9072 set d_isascii
9073 eval $setvar
9074 $rm -f isascii*
9075
9076 : see if killpg exists
9077 set killpg d_killpg
9078 eval $inlibc
9079
9080 : see if lchown exists
9081 echo " "
9082 $cat > try.c <<'EOCP'
9083 /* System header to define __stub macros and hopefully few prototypes,
9084     which can conflict with char lchown(); below.  */
9085 #include <assert.h>
9086 /* Override any gcc2 internal prototype to avoid an error.  */
9087 /* We use char because int might match the return type of a gcc2
9088    builtin and then its argument prototype would still apply.  */
9089 char lchown();
9090 int main() {
9091     /*  The GNU C library defines this for functions which it implements
9092         to always fail with ENOSYS.  Some functions are actually named
9093         something starting with __ and the normal name is an alias.  */
9094 #if defined (__stub_lchown) || defined (__stub___lchown)
9095 choke me
9096 #else
9097 lchown();
9098 #endif
9099 ; return 0; }
9100 EOCP
9101 set try
9102 if eval $compile; then
9103     $echo "lchown() found." >&4
9104     val="$define"
9105 else
9106     $echo "lchown() NOT found." >&4
9107     val="$undef"
9108 fi
9109 set d_lchown
9110 eval $setvar
9111
9112 : See if number of significant digits in a double precision number is known
9113 echo " "
9114 $cat >ldbl_dig.c <<EOM
9115 #$i_limits I_LIMITS
9116 #$i_float I_FLOAT
9117 #ifdef I_LIMITS
9118 #include <limits.h>
9119 #endif
9120 #ifdef I_FLOAT
9121 #include <float.h>
9122 #endif
9123 #ifdef LDBL_DIG
9124 printf("Contains LDBL_DIG");
9125 #endif
9126 EOM
9127 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9128 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9129         echo "LDBL_DIG found." >&4
9130         val="$define"
9131 else
9132         echo "LDBL_DIG NOT found." >&4
9133         val="$undef"
9134 fi
9135 $rm -f ldbl_dig.?
9136 set d_ldbl_dig
9137 eval $setvar
9138
9139 : see if link exists
9140 set link d_link
9141 eval $inlibc
9142
9143 : see if localeconv exists
9144 set localeconv d_locconv
9145 eval $inlibc
9146
9147 : see if lockf exists
9148 set lockf d_lockf
9149 eval $inlibc
9150
9151 : check for long long
9152 echo " "
9153 $echo $n "Checking to see if your system supports long long..." $c >&4
9154 echo 'int main() { long long x = 7; }' > try.c
9155 set try
9156 if eval $compile; then
9157         val="$define"
9158         echo " Yes, it does." >&4
9159 else
9160         val="$undef"
9161         echo " No, it doesn't." >&4
9162 fi
9163 $rm try.*
9164 set d_longlong
9165 eval $setvar
9166
9167 : check for length of long long
9168 case "${d_longlong}${longlongsize}" in
9169 $define)
9170         echo " "
9171         $echo $n "Checking to see how big your long longs are..." $c >&4
9172         $cat >try.c <<'EOCP'
9173 #include <stdio.h>
9174 int main()
9175 {
9176         printf("%d\n", sizeof(long long));
9177 }
9178 EOCP
9179         set try
9180         if eval $compile_ok; then
9181                 longlongsize=`./try$exe_ext`
9182                 $echo " $longlongsize bytes." >&4
9183         else
9184                 dflt='8'
9185                 echo " "
9186                 echo "(I can't seem to compile the test program.  Guessing...)"
9187                 rp="What is the size of a long long (in bytes)?"
9188                 . ./myread
9189                 longlongsize="$ans"
9190         fi
9191         if $test "X$longsize" = "X$longlongsize"; then
9192                 echo "(That isn't any different from an ordinary long.)"
9193         fi      
9194         ;;
9195 esac
9196 $rm -f try.* try
9197
9198 : see if lstat exists
9199 set lstat d_lstat
9200 eval $inlibc
9201
9202 : see if mblen exists
9203 set mblen d_mblen
9204 eval $inlibc
9205
9206 : see if mbstowcs exists
9207 set mbstowcs d_mbstowcs
9208 eval $inlibc
9209
9210 : see if mbtowc exists
9211 set mbtowc d_mbtowc
9212 eval $inlibc
9213
9214 : see if memchr exists
9215 set memchr d_memchr
9216 eval $inlibc
9217
9218 : see if memcmp exists
9219 set memcmp d_memcmp
9220 eval $inlibc
9221
9222 : see if memcpy exists
9223 set memcpy d_memcpy
9224 eval $inlibc
9225
9226 : see if memmove exists
9227 set memmove d_memmove
9228 eval $inlibc
9229
9230 : see if memset exists
9231 set memset d_memset
9232 eval $inlibc
9233
9234 : see if mkdir exists
9235 set mkdir d_mkdir
9236 eval $inlibc
9237
9238 : see if mkfifo exists
9239 set mkfifo d_mkfifo
9240 eval $inlibc
9241
9242 : see if mktime exists
9243 set mktime d_mktime
9244 eval $inlibc
9245
9246 : see if msgctl exists
9247 set msgctl d_msgctl
9248 eval $inlibc
9249
9250 : see if msgget exists
9251 set msgget d_msgget
9252 eval $inlibc
9253
9254 : see if msgsnd exists
9255 set msgsnd d_msgsnd
9256 eval $inlibc
9257
9258 : see if msgrcv exists
9259 set msgrcv d_msgrcv
9260 eval $inlibc
9261
9262 : see how much of the 'msg*(2)' library is present.
9263 h_msg=true
9264 echo " "
9265 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9266 *"$undef"*) h_msg=false;;
9267 esac
9268 case "$osname" in
9269 freebsd)
9270     case "`ipcs 2>&1`" in
9271     "SVID messages"*"not configured"*)
9272         echo "Your $osname does not have the msg*(2) configured." >&4
9273         h_msg=false
9274         val="$undef"
9275         set msgctl d_msgctl
9276         eval $setvar
9277         set msgget d_msgget
9278         eval $setvar
9279         set msgsnd d_msgsnd
9280         eval $setvar
9281         set msgrcv d_msgrcv
9282         eval $setvar
9283         ;;
9284     esac
9285     ;;
9286 esac
9287 : we could also check for sys/ipc.h ...
9288 if $h_msg && $test `./findhdr sys/msg.h`; then
9289         echo "You have the full msg*(2) library." >&4
9290         val="$define"
9291 else
9292         echo "You don't have the full msg*(2) library." >&4
9293         val="$undef"
9294 fi
9295 set d_msg
9296 eval $setvar
9297
9298 : see if nice exists
9299 set nice d_nice
9300 eval $inlibc
9301
9302 : see if POSIX threads are available
9303 set pthread.h i_pthread
9304 eval $inhdr
9305
9306
9307
9308
9309 : how to create joinable pthreads
9310 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9311         echo " "
9312         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9313         $cat >try.c <<'EOCP'
9314 #include <pthread.h>
9315 int main() {
9316     int detachstate = JOINABLE;
9317 }
9318 EOCP
9319         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9320         if eval $compile; then
9321                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9322                 val="$undef" # Yes, undef.
9323                 set d_old_pthread_create_joinable
9324                 eval $setvar
9325                 val=""
9326                 set old_pthread_create_joinable
9327                 eval $setvar
9328         else
9329                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9330                 if eval $compile; then
9331                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9332                         val="$define"
9333                         set d_old_pthread_create_joinable
9334                         eval $setvar
9335                         val=PTHREAD_CREATE_UNDETACHED
9336                         set old_pthread_create_joinable
9337                         eval $setvar
9338                 else            
9339                         set try -DJOINABLE=__UNDETACHED
9340                         if eval $compile; then
9341                                 echo "You seem to use __UNDETACHED." >&4
9342                                 val="$define"
9343                                 set d_old_pthread_create_joinable
9344                                 eval $setvar
9345                                 val=__UNDETACHED
9346                                 set old_pthread_create_joinable
9347                                 eval $setvar
9348                         else
9349                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9350                                 val="$define"
9351                                 set d_old_pthread_create_joinable
9352                                 eval $setvar
9353                                 val=0
9354                                 set old_pthread_create_joinable
9355                                 eval $setvar
9356                         fi
9357                 fi
9358         fi
9359         $rm -f try try.*
9360 else
9361     d_old_pthread_create_joinable="$undef"
9362     old_pthread_create_joinable=""
9363 fi
9364
9365 : see if pause exists
9366 set pause d_pause
9367 eval $inlibc
9368
9369 : see if pipe exists
9370 set pipe d_pipe
9371 eval $inlibc
9372
9373 : see if poll exists
9374 set poll d_poll
9375 eval $inlibc
9376
9377
9378 : see whether the various POSIXish _yields exist
9379 $cat >try.c <<EOP
9380 #include <pthread.h>
9381 #include <stdio.h>
9382 int main() {
9383 #ifdef SCHED_YIELD
9384         sched_yield();
9385 #else
9386 #ifdef PTHREAD_YIELD
9387         pthread_yield();
9388 #else
9389 #ifdef PTHREAD_YIELD_NULL
9390         pthread_yield(NULL);
9391 #endif
9392 #endif
9393 #endif
9394 }
9395 EOP
9396 : see if sched_yield exists
9397 set try -DSCHED_YIELD
9398 if eval $compile; then
9399     val="$define"
9400     sched_yield='sched_yield()'
9401 else
9402     val="$undef"
9403 fi
9404 case "$usethreads" in
9405 $define)
9406         case "$val" in
9407         $define) echo 'sched_yield() found.' >&4        ;;
9408         *)       echo 'sched_yield() NOT found.' >&4    ;;
9409         esac
9410 esac
9411 set d_sched_yield
9412 eval $setvar
9413
9414 : see if pthread_yield exists
9415 set try -DPTHREAD_YIELD
9416 if eval $compile; then
9417     val="$define"
9418     case "$sched_yield" in
9419     '') sched_yield='pthread_yield()' ;;
9420     esac
9421 else
9422     set try -DPTHREAD_YIELD_NULL
9423     if eval $compile; then
9424         val="$define"
9425         case "$sched_yield" in
9426         '') sched_yield='pthread_yield(NULL)' ;;
9427         esac
9428     else
9429         val="$undef"
9430     fi
9431 fi
9432 case "$usethreads" in
9433 $define)
9434         case "$val" in
9435         $define) echo 'pthread_yield() found.' >&4      ;;
9436         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9437         esac
9438         ;;
9439 esac
9440 set d_pthread_yield
9441 eval $setvar
9442
9443 case "$sched_yield" in
9444 '') sched_yield=undef ;;
9445 esac
9446
9447 $rm -f try try.*
9448
9449 : see if this is a pwd.h system
9450 set pwd.h i_pwd
9451 eval $inhdr
9452
9453 case "$i_pwd" in
9454 $define)
9455         xxx=`./findhdr pwd.h`
9456         $cppstdin $cppflags $cppminus < $xxx >$$.h
9457
9458         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9459                 val="$define"
9460         else
9461                 val="$undef"
9462         fi
9463         set d_pwquota
9464         eval $setvar
9465
9466         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9467                 val="$define"
9468         else
9469                 val="$undef"
9470         fi
9471         set d_pwage
9472         eval $setvar
9473
9474         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9475                 val="$define"
9476         else
9477                 val="$undef"
9478         fi
9479         set d_pwchange
9480         eval $setvar
9481
9482         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9483                 val="$define"
9484         else
9485                 val="$undef"
9486         fi
9487         set d_pwclass
9488         eval $setvar
9489
9490         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9491                 val="$define"
9492         else
9493                 val="$undef"
9494         fi
9495         set d_pwexpire
9496         eval $setvar
9497
9498         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9499                 val="$define"
9500         else
9501                 val="$undef"
9502         fi
9503         set d_pwcomment
9504         eval $setvar
9505
9506         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9507                 val="$define"
9508         else
9509                 val="$undef"
9510         fi
9511         set d_pwgecos
9512         eval $setvar
9513
9514         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9515                 val="$define"
9516         else
9517                 val="$undef"
9518         fi
9519         set d_pwpasswd
9520         eval $setvar
9521
9522         $rm -f $$.h
9523         ;;
9524 *)
9525         val="$undef"; 
9526         set d_pwquota; eval $setvar
9527         set d_pwage; eval $setvar
9528         set d_pwchange; eval $setvar
9529         set d_pwclass; eval $setvar
9530         set d_pwexpire; eval $setvar
9531         set d_pwcomment; eval $setvar
9532         set d_pwgecos; eval $setvar
9533         set d_pwpasswd; eval $setvar
9534         ;;
9535 esac
9536
9537 : see if readdir and friends exist
9538 set readdir d_readdir
9539 eval $inlibc
9540 set seekdir d_seekdir
9541 eval $inlibc
9542 set telldir d_telldir
9543 eval $inlibc
9544 set rewinddir d_rewinddir
9545 eval $inlibc
9546
9547 : see if readlink exists
9548 set readlink d_readlink
9549 eval $inlibc
9550
9551 : see if rename exists
9552 set rename d_rename
9553 eval $inlibc
9554
9555 : see if rmdir exists
9556 set rmdir d_rmdir
9557 eval $inlibc
9558
9559 : see if memory.h is available.
9560 val=''
9561 set memory.h val
9562 eval $inhdr
9563
9564 : See if it conflicts with string.h
9565 case "$val" in
9566 $define)
9567         case "$strings" in
9568         '') ;;
9569         *)
9570                 $cppstdin $cppflags $cppminus < $strings > mem.h
9571                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9572                         echo " "
9573                         echo "We won't be including <memory.h>."
9574                         val="$undef"
9575                 fi
9576                 $rm -f mem.h
9577                 ;;
9578         esac
9579 esac
9580 set i_memory
9581 eval $setvar
9582
9583 : can bcopy handle overlapping blocks?
9584 val="$undef"
9585 case "$d_bcopy" in
9586 "$define")
9587         echo " "
9588         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9589         $cat >try.c <<EOCP
9590 #$i_memory I_MEMORY
9591 #$i_stdlib I_STDLIB
9592 #$i_string I_STRING
9593 #$i_unistd I_UNISTD
9594 EOCP
9595         $cat >>try.c <<'EOCP'
9596 #include <stdio.h>
9597 #ifdef I_MEMORY
9598 #  include <memory.h>
9599 #endif
9600 #ifdef I_STDLIB
9601 #  include <stdlib.h>
9602 #endif
9603 #ifdef I_STRING
9604 #  include <string.h>
9605 #else
9606 #  include <strings.h>
9607 #endif
9608 #ifdef I_UNISTD
9609 #  include <unistd.h>  /* Needed for NetBSD */
9610 #endif
9611 int main()
9612 {
9613 char buf[128], abc[128];
9614 char *b;
9615 int len;
9616 int off;
9617 int align;
9618
9619 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9620
9621 for (align = 7; align >= 0; align--) {
9622         for (len = 36; len; len--) {
9623                 b = buf+align;
9624                 bcopy(abc, b, len);
9625                 for (off = 1; off <= len; off++) {
9626                         bcopy(b, b+off, len);
9627                         bcopy(b+off, b, len);
9628                         if (bcmp(b, abc, len))
9629                                 exit(1);
9630                 }
9631         }
9632 }
9633 exit(0);
9634 }
9635 EOCP
9636         set try
9637         if eval $compile_ok; then
9638                 if ./try 2>/dev/null; then
9639                         echo "Yes, it can."
9640                         val="$define"
9641                 else
9642                         echo "It can't, sorry."
9643                         case "$d_memmove" in
9644                         "$define") echo "But that's Ok since you have memmove()." ;;
9645                         esac
9646                 fi
9647         else
9648                 echo "(I can't compile the test program, so we'll assume not...)"
9649                 case "$d_memmove" in
9650                 "$define") echo "But that's Ok since you have memmove()." ;;
9651                 esac
9652         fi
9653         ;;
9654 esac
9655 $rm -f try.* try core
9656 set d_safebcpy
9657 eval $setvar
9658
9659 : can memcpy handle overlapping blocks?
9660 val="$undef"
9661 case "$d_memcpy" in
9662 "$define")
9663         echo " "
9664         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9665         $cat >try.c <<EOCP
9666 #$i_memory I_MEMORY
9667 #$i_stdlib I_STDLIB
9668 #$i_string I_STRING
9669 #$i_unistd I_UNISTD
9670 EOCP
9671         $cat >>try.c <<'EOCP'
9672 #include <stdio.h>
9673 #ifdef I_MEMORY
9674 #  include <memory.h>
9675 #endif
9676 #ifdef I_STDLIB
9677 #  include <stdlib.h>
9678 #endif
9679 #ifdef I_STRING
9680 #  include <string.h>
9681 #else
9682 #  include <strings.h>
9683 #endif
9684 #ifdef I_UNISTD
9685 #  include <unistd.h>  /* Needed for NetBSD */
9686 #endif
9687 int main()
9688 {
9689 char buf[128], abc[128];
9690 char *b;
9691 int len;
9692 int off;
9693 int align;
9694
9695 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9696    try to store the string in read-only memory. */
9697 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9698
9699 for (align = 7; align >= 0; align--) {
9700         for (len = 36; len; len--) {
9701                 b = buf+align;
9702                 memcpy(b, abc, len);
9703                 for (off = 1; off <= len; off++) {
9704                         memcpy(b+off, b, len);
9705                         memcpy(b, b+off, len);
9706                         if (memcmp(b, abc, len))
9707                                 exit(1);
9708                 }
9709         }
9710 }
9711 exit(0);
9712 }
9713 EOCP
9714         set try
9715         if eval $compile_ok; then
9716                 if ./try 2>/dev/null; then
9717                         echo "Yes, it can."
9718                         val="$define"
9719                 else
9720                         echo "It can't, sorry."
9721                         case "$d_memmove" in
9722                         "$define") echo "But that's Ok since you have memmove()." ;;
9723                         esac
9724                 fi
9725         else
9726                 echo "(I can't compile the test program, so we'll assume not...)"
9727                 case "$d_memmove" in
9728                 "$define") echo "But that's Ok since you have memmove()." ;;
9729                 esac
9730         fi
9731         ;;
9732 esac
9733 $rm -f try.* try core
9734 set d_safemcpy
9735 eval $setvar
9736
9737 : can memcmp be trusted to compare relative magnitude?
9738 val="$undef"
9739 case "$d_memcmp" in
9740 "$define")
9741         echo " "
9742         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9743         $cat >try.c <<EOCP
9744 #$i_memory I_MEMORY
9745 #$i_stdlib I_STDLIB
9746 #$i_string I_STRING
9747 #$i_unistd I_UNISTD
9748 EOCP
9749         $cat >>try.c <<'EOCP'
9750 #include <stdio.h>
9751 #ifdef I_MEMORY
9752 #  include <memory.h>
9753 #endif
9754 #ifdef I_STDLIB
9755 #  include <stdlib.h>
9756 #endif
9757 #ifdef I_STRING
9758 #  include <string.h>
9759 #else
9760 #  include <strings.h>
9761 #endif
9762 #ifdef I_UNISTD
9763 #  include <unistd.h>  /* Needed for NetBSD */
9764 #endif
9765 int main()
9766 {
9767 char a = -1;
9768 char b = 0;
9769 if ((a < b) && memcmp(&a, &b, 1) < 0)
9770         exit(1);
9771 exit(0);
9772 }
9773 EOCP
9774         set try
9775         if eval $compile_ok; then
9776                 if ./try 2>/dev/null; then
9777                         echo "Yes, it can."
9778                         val="$define"
9779                 else
9780                         echo "No, it can't (it uses signed chars)."
9781                 fi
9782         else
9783                 echo "(I can't compile the test program, so we'll assume not...)"
9784         fi
9785         ;;
9786 esac
9787 $rm -f try.* try core
9788 set d_sanemcmp
9789 eval $setvar
9790
9791 : see if select exists
9792 set select d_select
9793 eval $inlibc
9794
9795 : see if semctl exists
9796 set semctl d_semctl
9797 eval $inlibc
9798
9799 : see if semget exists
9800 set semget d_semget
9801 eval $inlibc
9802
9803 : see if semop exists
9804 set semop d_semop
9805 eval $inlibc
9806
9807 : see how much of the 'sem*(2)' library is present.
9808 h_sem=true
9809 echo " "
9810 case "$d_semctl$d_semget$d_semop" in
9811 *"$undef"*) h_sem=false;;
9812 esac
9813 case "$osname" in
9814 freebsd)
9815     case "`ipcs 2>&1`" in
9816     "SVID messages"*"not configured"*)
9817         echo "Your $osname does not have the sem*(2) configured." >&4
9818         h_sem=false
9819         val="$undef"
9820         set semctl d_semctl
9821         eval $setvar
9822         set semget d_semget
9823         eval $setvar
9824         set semop d_semop
9825         eval $setvar
9826         ;;
9827     esac
9828     ;;
9829 esac
9830 : we could also check for sys/ipc.h ...
9831 if $h_sem && $test `./findhdr sys/sem.h`; then
9832         echo "You have the full sem*(2) library." >&4
9833         val="$define"
9834 else
9835         echo "You don't have the full sem*(2) library." >&4
9836         val="$undef"
9837 fi
9838 set d_sem
9839 eval $setvar
9840
9841 : see whether sys/sem.h defines union semun
9842 echo " "
9843 $cat > try.c <<'END'
9844 #include <sys/types.h>
9845 #include <sys/ipc.h>
9846 #include <sys/sem.h>
9847 int main () { union semun semun; semun.buf = 0; }
9848 END
9849 set try
9850 if eval $compile; then
9851     echo "You have union semun in <sys/sem.h>." >&4
9852     val="$define"
9853 else
9854     echo "You do not have union semun in <sys/sem.h>." >&4
9855     val="$undef"
9856 fi
9857 $rm -f try try.c try.h
9858 set d_union_semun
9859 eval $setvar
9860
9861 : see how to do semctl IPC_STAT
9862 case "$d_sem" in
9863 $define)
9864     : see whether semctl IPC_STAT can use union semun
9865     echo " "
9866     $cat > try.h <<END
9867 #ifndef S_IRUSR
9868 #   ifdef S_IREAD
9869 #       define S_IRUSR S_IREAD
9870 #       define S_IWUSR S_IWRITE
9871 #       define S_IXUSR S_IEXEC
9872 #   else
9873 #       define S_IRUSR 0400
9874 #       define S_IWUSR 0200
9875 #       define S_IXUSR 0100
9876 #   endif
9877 #   define S_IRGRP (S_IRUSR>>3)
9878 #   define S_IWGRP (S_IWUSR>>3)
9879 #   define S_IXGRP (S_IXUSR>>3)
9880 #   define S_IROTH (S_IRUSR>>6)
9881 #   define S_IWOTH (S_IWUSR>>6)
9882 #   define S_IXOTH (S_IXUSR>>6)
9883 #endif
9884 #ifndef S_IRWXU
9885 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9886 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9887 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9888 #endif
9889 END
9890
9891     $cat > try.c <<END
9892 #include <sys/types.h>
9893 #include <sys/ipc.h>
9894 #include <sys/sem.h>
9895 #include <sys/stat.h>
9896 #include <stdio.h>
9897 #include <errno.h>
9898 #include "try.h"
9899 #ifndef errno
9900 extern int errno;
9901 #endif
9902 #$d_union_semun HAS_UNION_SEMUN
9903 int main() {
9904     union semun
9905 #ifndef HAS_UNION_SEMUN
9906     {
9907         int val;
9908         struct semid_ds *buf;
9909         unsigned short *array;
9910     }
9911 #endif
9912     arg;
9913     int sem, st;
9914
9915 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9916     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9917     if (sem > -1) {
9918         struct semid_ds argbuf;
9919         arg.buf = &argbuf;
9920 #       ifdef IPC_STAT
9921         st = semctl(sem, 0, IPC_STAT, arg);
9922         if (st == 0)
9923             printf("semun\n");
9924         else
9925 #       endif /* IPC_STAT */
9926             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9927 #       ifdef IPC_RMID
9928         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9929 #       endif /* IPC_RMID */
9930             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9931     } else
9932 #endif /* IPC_PRIVATE && ... */
9933         printf("semget failed: errno = %d\n", errno);
9934   return 0;
9935 }
9936 END
9937     val="$undef"
9938     set try
9939     if eval $compile; then
9940         xxx=`./try`
9941         case "$xxx" in
9942         semun) val="$define" ;;
9943         esac
9944     fi
9945     $rm -f try try.c
9946     set d_semctl_semun
9947     eval $setvar
9948     case "$d_semctl_semun" in
9949     $define)
9950         echo "You can use union semun for semctl IPC_STAT." >&4
9951         also='also'
9952         ;;
9953     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9954         also=''
9955         ;;
9956     esac
9957
9958     : see whether semctl IPC_STAT can use struct semid_ds pointer
9959     $cat > try.c <<'END'
9960 #include <sys/types.h>
9961 #include <sys/ipc.h>
9962 #include <sys/sem.h>
9963 #include <sys/stat.h>
9964 #include "try.h"
9965 #include <stdio.h>
9966 #include <errno.h>
9967 #ifndef errno
9968 extern int errno;
9969 #endif
9970 int main() {
9971     struct semid_ds arg;
9972     int sem, st;
9973
9974 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9975     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9976     if (sem > -1) {
9977 #       ifdef IPC_STAT
9978         st = semctl(sem, 0, IPC_STAT, &arg);
9979         if (st == 0)
9980             printf("semid_ds\n");
9981         else
9982 #       endif /* IPC_STAT */
9983             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9984 #       ifdef IPC_RMID
9985         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9986 #       endif /* IPC_RMID */
9987             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9988     } else
9989 #endif /* IPC_PRIVATE && ... */
9990         printf("semget failed: errno = %d\n", errno);
9991
9992     return 0;
9993 }
9994 END
9995     val="$undef"
9996     set try
9997     if eval $compile; then
9998         xxx=`./try`
9999         case "$xxx" in
10000         semid_ds) val="$define" ;;
10001         esac
10002     fi
10003     $rm -f try try.c
10004     set d_semctl_semid_ds
10005     eval $setvar
10006     case "$d_semctl_semid_ds" in
10007     $define)
10008         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10009         ;;
10010     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10011         ;;
10012     esac
10013     $rm -f try.h
10014     ;;
10015 *)  val="$undef"
10016
10017     # We do not have the full sem*(2) library, so assume we can not
10018     # use either.
10019
10020     set d_semctl_semun
10021     eval $setvar
10022
10023     set d_semctl_semid_ds
10024     eval $setvar
10025     ;;
10026 esac
10027
10028 : see if setegid exists
10029 set setegid d_setegid
10030 eval $inlibc
10031
10032 : see if seteuid exists
10033 set seteuid d_seteuid
10034 eval $inlibc
10035
10036 : see if setgrent exists
10037 set setgrent d_setgrent
10038 eval $inlibc
10039
10040 : see if sethostent exists
10041 set sethostent d_sethent
10042 eval $inlibc
10043
10044 : see if setlinebuf exists
10045 set setlinebuf d_setlinebuf
10046 eval $inlibc
10047
10048 : see if setlocale exists
10049 set setlocale d_setlocale
10050 eval $inlibc
10051
10052 : see if setnetent exists
10053 set setnetent d_setnent
10054 eval $inlibc
10055
10056 : see if setprotoent exists
10057 set setprotoent d_setpent
10058 eval $inlibc
10059
10060 : see if setpgid exists
10061 set setpgid d_setpgid
10062 eval $inlibc
10063
10064 : see if setpgrp2 exists
10065 set setpgrp2 d_setpgrp2
10066 eval $inlibc
10067
10068 : see if setpriority exists
10069 set setpriority d_setprior
10070 eval $inlibc
10071
10072 : see if setpwent exists
10073 set setpwent d_setpwent
10074 eval $inlibc
10075
10076 : see if setregid exists
10077 set setregid d_setregid
10078 eval $inlibc
10079 set setresgid d_setresgid
10080 eval $inlibc
10081
10082 : see if setreuid exists
10083 set setreuid d_setreuid
10084 eval $inlibc
10085 set setresuid d_setresuid
10086 eval $inlibc
10087
10088 : see if setrgid exists
10089 set setrgid d_setrgid
10090 eval $inlibc
10091
10092 : see if setruid exists
10093 set setruid d_setruid
10094 eval $inlibc
10095
10096 : see if setservent exists
10097 set setservent d_setsent
10098 eval $inlibc
10099
10100 : see if setsid exists
10101 set setsid d_setsid
10102 eval $inlibc
10103
10104 : see if setspent exists
10105 set setspent d_setspent
10106 eval $inlibc
10107
10108 : see if setvbuf exists
10109 set setvbuf d_setvbuf
10110 eval $inlibc
10111
10112 : see if sfio.h is available
10113 set sfio.h i_sfio
10114 eval $inhdr
10115
10116
10117 : see if sfio library is available
10118 case "$i_sfio" in
10119 $define)
10120         val=''
10121         set sfreserve val
10122         eval $inlibc
10123         ;;
10124 *)
10125         val="$undef"
10126         ;;
10127 esac
10128 : Ok, but do we want to use it.
10129 case "$val" in
10130 $define)
10131         case "$usesfio" in
10132         true|$define|[yY]*) dflt='y';;
10133         *) dflt='n';;
10134         esac
10135         echo "$package can use the sfio library, but it is experimental."
10136         rp="You seem to have sfio available, do you want to try using it?"
10137         . ./myread
10138         case "$ans" in
10139         y|Y) ;;
10140         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10141                 val="$undef"
10142                 : Remove sfio from list of libraries to use
10143                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10144                 shift
10145                 libs="$*"
10146                 echo "libs = $libs" >&4
10147                 ;;
10148         esac
10149         ;;
10150 *)      case "$usesfio" in
10151         true|$define|[yY]*)
10152                 echo "Sorry, cannot find sfio on this machine" >&4
10153                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10154                 ;;
10155         esac
10156         ;;
10157 esac
10158 set d_sfio
10159 eval $setvar
10160 case "$d_sfio" in
10161 $define) usesfio='true';;
10162 *) usesfio='false';;
10163 esac
10164
10165 : see if shmctl exists
10166 set shmctl d_shmctl
10167 eval $inlibc
10168
10169 : see if shmget exists
10170 set shmget d_shmget
10171 eval $inlibc
10172
10173 : see if shmat exists
10174 set shmat d_shmat
10175 eval $inlibc
10176 : see what shmat returns
10177 case "$d_shmat" in
10178 "$define")
10179         $cat >shmat.c <<'END'
10180 #include <sys/shm.h>
10181 void *shmat();
10182 END
10183         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10184                 shmattype='void *'
10185         else
10186                 shmattype='char *'
10187         fi
10188         echo "and it returns ($shmattype)." >&4
10189         : see if a prototype for shmat is available
10190         xxx=`./findhdr sys/shm.h`
10191         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10192         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10193                 val="$define"
10194         else
10195                 val="$undef"
10196         fi
10197         $rm -f shmat.[co]
10198         ;;
10199 *)
10200         val="$undef"
10201         ;;
10202 esac
10203 set d_shmatprototype
10204 eval $setvar
10205
10206 : see if shmdt exists
10207 set shmdt d_shmdt
10208 eval $inlibc
10209
10210 : see how much of the 'shm*(2)' library is present.
10211 h_shm=true
10212 echo " "
10213 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10214 *"$undef"*) h_shm=false;;
10215 esac
10216 case "$osname" in
10217 freebsd)
10218     case "`ipcs 2>&1`" in
10219     "SVID shared memory"*"not configured"*)
10220         echo "Your $osname does not have the shm*(2) configured." >&4
10221         h_shm=false
10222         val="$undef"
10223         set shmctl d_shmctl
10224         evat $setvar
10225         set shmget d_shmget
10226         evat $setvar
10227         set shmat d_shmat
10228         evat $setvar
10229         set shmdt d_shmdt
10230         evat $setvar
10231         ;;
10232     esac
10233     ;;
10234 esac
10235 : we could also check for sys/ipc.h ...
10236 if $h_shm && $test `./findhdr sys/shm.h`; then
10237         echo "You have the full shm*(2) library." >&4
10238         val="$define"
10239 else
10240         echo "You don't have the full shm*(2) library." >&4
10241         val="$undef"
10242 fi
10243 set d_shm
10244 eval $setvar
10245
10246 echo " "
10247 : see if we have sigaction
10248 if set sigaction val -f d_sigaction; eval $csym; $val; then
10249         echo 'sigaction() found.' >&4
10250         $cat > try.c <<'EOP'
10251 #include <stdio.h>
10252 #include <sys/types.h>
10253 #include <signal.h>
10254 int main()
10255 {
10256     struct sigaction act, oact;
10257     act.sa_flags = 0;
10258     oact.sa_handler = 0;
10259 }
10260 EOP
10261         set try
10262         if eval $compile_ok; then
10263                 val="$define"
10264         else
10265                 echo "But you don't seem to have a useable struct sigaction." >&4
10266                 val="$undef"
10267         fi
10268 else
10269         echo 'sigaction NOT found.' >&4
10270         val="$undef"
10271 fi
10272 set d_sigaction; eval $setvar
10273 $rm -f try try$_o try.c
10274
10275 : see if sigsetjmp exists
10276 echo " "
10277 case "$d_sigsetjmp" in
10278 '')
10279         $cat >try.c <<'EOP'
10280 #include <setjmp.h>
10281 sigjmp_buf env;
10282 int set = 1;
10283 int main()
10284 {
10285         if (sigsetjmp(env,1))
10286                 exit(set);
10287         set = 0;
10288         siglongjmp(env, 1);
10289         exit(1);
10290 }
10291 EOP
10292         set try
10293         if eval $compile; then
10294                 if ./try >/dev/null 2>&1; then
10295                         echo "POSIX sigsetjmp found." >&4
10296                         val="$define"
10297                 else
10298                         $cat >&4 <<EOM
10299 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10300 I'll ignore them.
10301 EOM
10302                         val="$undef"
10303                 fi
10304         else
10305                 echo "sigsetjmp not found." >&4
10306                 val="$undef"
10307         fi
10308         ;;
10309 *) val="$d_sigsetjmp"
10310         case "$d_sigsetjmp" in
10311         $define) echo "POSIX sigsetjmp found." >&4;;
10312         $undef) echo "sigsetjmp not found." >&4;;
10313         esac
10314         ;;
10315 esac
10316 set d_sigsetjmp
10317 eval $setvar
10318 $rm -f try.c try
10319
10320 : see if sqrtl exists
10321 set sqrtl d_sqrtl
10322 eval $inlibc
10323
10324 : see if sys/stat.h is available
10325 set sys/stat.h i_sysstat
10326 eval $inhdr
10327
10328
10329 : see if stat knows about block sizes
10330 echo " "
10331 echo "Checking to see if your struct stat has st_blocks field..." >&4
10332 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10333 eval $hasfield
10334
10335
10336 : see if this is a sys/vfs.h system
10337 set sys/vfs.h i_sysvfs
10338 eval $inhdr
10339
10340
10341 : see if this is a sys/statfs.h system
10342 set sys/statfs.h i_sysstatfs
10343 eval $inhdr
10344
10345
10346 echo " "
10347 echo "Checking to see if your system supports struct statfs..." >&4
10348 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
10349 eval $hasstruct
10350 case "$d_statfs_s" in
10351 "$define")      echo "Yes, it does."   ;;
10352 *)              echo "No, it doesn't." ;;
10353 esac
10354
10355
10356
10357 : see if struct statfs knows about f_flags
10358 case "$d_statfs_s" in
10359 define) 
10360         echo " "
10361         echo "Checking to see if your struct statfs has f_flags field..." >&4
10362         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
10363         eval $hasfield
10364         ;;
10365 *)      val="$undef"
10366         set d_statfs_f_flags
10367         eval $setvar
10368         ;;
10369 esac
10370 case "$d_statfs_f_flags" in
10371 "$define")      echo "Yes, it does."   ;;
10372 *)              echo "No, it doesn't." ;;
10373 esac
10374
10375 : see if _ptr and _cnt from stdio act std
10376 echo " "
10377 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10378         echo "(Looks like you have stdio.h from Linux.)"
10379         case "$stdio_ptr" in
10380         '') stdio_ptr='((fp)->_IO_read_ptr)'
10381                 ptr_lval=$define
10382                 ;;
10383         *)      ptr_lval=$d_stdio_ptr_lval;;
10384         esac
10385         case "$stdio_cnt" in
10386         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10387                 cnt_lval=$undef
10388                 ;;
10389         *)      cnt_lval=$d_stdio_cnt_lval;;
10390         esac
10391         case "$stdio_base" in
10392         '') stdio_base='((fp)->_IO_read_base)';;
10393         esac
10394         case "$stdio_bufsiz" in
10395         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10396         esac
10397 else
10398         case "$stdio_ptr" in
10399         '') stdio_ptr='((fp)->_ptr)'
10400                 ptr_lval=$define
10401                 ;;
10402         *)      ptr_lval=$d_stdio_ptr_lval;;
10403         esac
10404         case "$stdio_cnt" in
10405         '') stdio_cnt='((fp)->_cnt)'
10406                 cnt_lval=$define
10407                 ;;
10408         *)      cnt_lval=$d_stdio_cnt_lval;;
10409         esac
10410         case "$stdio_base" in
10411         '') stdio_base='((fp)->_base)';;
10412         esac
10413         case "$stdio_bufsiz" in
10414         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10415         esac
10416 fi
10417 : test whether _ptr and _cnt really work
10418 echo "Checking how std your stdio is..." >&4
10419 $cat >try.c <<EOP
10420 #include <stdio.h>
10421 #define FILE_ptr(fp)    $stdio_ptr
10422 #define FILE_cnt(fp)    $stdio_cnt
10423 int main() {
10424         FILE *fp = fopen("try.c", "r");
10425         char c = getc(fp);
10426         if (
10427                 18 <= FILE_cnt(fp) &&
10428                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10429         )
10430                 exit(0);
10431         exit(1);
10432 }
10433 EOP
10434 val="$undef"
10435 set try
10436 if eval $compile; then
10437         if ./try; then
10438                 echo "Your stdio acts pretty std."
10439                 val="$define"
10440         else
10441                 echo "Your stdio isn't very std."
10442         fi
10443 else
10444         echo "Your stdio doesn't appear very std."
10445 fi
10446 $rm -f try.c try
10447 set d_stdstdio
10448 eval $setvar
10449
10450 : Can _ptr be used as an lvalue?
10451 case "$d_stdstdio$ptr_lval" in
10452 $define$define) val=$define ;;
10453 *) val=$undef ;;
10454 esac
10455 set d_stdio_ptr_lval
10456 eval $setvar
10457
10458 : Can _cnt be used as an lvalue?
10459 case "$d_stdstdio$cnt_lval" in
10460 $define$define) val=$define ;;
10461 *) val=$undef ;;
10462 esac
10463 set d_stdio_cnt_lval
10464 eval $setvar
10465
10466 : see if _base is also standard
10467 val="$undef"
10468 case "$d_stdstdio" in
10469 $define)
10470         $cat >try.c <<EOP
10471 #include <stdio.h>
10472 #define FILE_base(fp)   $stdio_base
10473 #define FILE_bufsiz(fp) $stdio_bufsiz
10474 int main() {
10475         FILE *fp = fopen("try.c", "r");
10476         char c = getc(fp);
10477         if (
10478                 19 <= FILE_bufsiz(fp) &&
10479                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10480         )
10481                 exit(0);
10482         exit(1);
10483 }
10484 EOP
10485         set try
10486         if eval $compile; then
10487                 if ./try; then
10488                         echo "And its _base field acts std."
10489                         val="$define"
10490                 else
10491                         echo "But its _base field isn't std."
10492                 fi
10493         else
10494                 echo "However, it seems to be lacking the _base field."
10495         fi
10496         $rm -f try.c try
10497         ;;
10498 esac
10499 set d_stdiobase
10500 eval $setvar
10501
10502 $cat >&4 <<EOM
10503 Checking how to access stdio streams by file descriptor number...
10504 EOM
10505 case "$stdio_stream_array" in
10506 '')     $cat >try.c <<EOCP
10507 #include <stdio.h>
10508 int main() {
10509   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10510     printf("yes\n");
10511 }
10512 EOCP
10513         for s in _iob __iob __sF
10514         do
10515                 set try -DSTDIO_STREAM_ARRAY=$s
10516                 if eval $compile; then
10517                         case "`./try$exe_ext`" in
10518                         yes)    stdio_stream_array=$s; break ;;
10519                         esac
10520                 fi
10521         done
10522         $rm -f try.* try$exe_ext
10523 esac
10524 case "$stdio_stream_array" in
10525 '')     $cat >&4 <<EOM
10526 I can't figure out how to access stdio streams by file descriptor number.
10527 EOM
10528         d_stdio_stream_array="$undef"
10529         ;;
10530 *)      $cat >&4 <<EOM
10531 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10532 EOM
10533         d_stdio_stream_array="$define"
10534         ;;
10535 esac
10536
10537 : see if strcoll exists
10538 set strcoll d_strcoll
10539 eval $inlibc
10540
10541 : check for structure copying
10542 echo " "
10543 echo "Checking to see if your C compiler can copy structs..." >&4
10544 $cat >try.c <<'EOCP'
10545 int main()
10546 {
10547         struct blurfl {
10548                 int dyick;
10549         } foo, bar;
10550
10551         foo = bar;
10552 }
10553 EOCP
10554 if $cc -c try.c >/dev/null 2>&1 ; then
10555         val="$define"
10556         echo "Yup, it can."
10557 else
10558         val="$undef"
10559         echo "Nope, it can't."
10560 fi
10561 set d_strctcpy
10562 eval $setvar
10563 $rm -f try.*
10564
10565 : see if strerror and/or sys_errlist[] exist
10566 echo " "
10567 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10568     if set strerror val -f d_strerror; eval $csym; $val; then
10569                 echo 'strerror() found.' >&4
10570                 d_strerror="$define"
10571                 d_strerrm='strerror(e)'
10572                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10573                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10574                         d_syserrlst="$define"
10575                 else
10576                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10577                         d_syserrlst="$undef"
10578                 fi
10579     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10580                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10581                 echo 'strerror() found in string header.' >&4
10582                 d_strerror="$define"
10583                 d_strerrm='strerror(e)'
10584                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10585                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10586                                 d_syserrlst="$define"
10587                 else
10588                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10589                         d_syserrlst="$undef"
10590                 fi
10591     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10592                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10593                 d_strerror="$undef"
10594                 d_syserrlst="$define"
10595                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10596     else
10597                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10598                 d_strerror="$undef"
10599                 d_syserrlst="$undef"
10600                 d_strerrm='"unknown"'
10601     fi
10602 fi
10603
10604 : see if strtod exists
10605 set strtod d_strtod
10606 eval $inlibc
10607
10608 : see if strtol exists
10609 set strtol d_strtol
10610 eval $inlibc
10611
10612 : see if strtoul exists
10613 set strtoul d_strtoul
10614 eval $inlibc
10615
10616 : see if strtoull exists
10617 set strtoull d_strtoull
10618 eval $inlibc
10619
10620 : see if strxfrm exists
10621 set strxfrm d_strxfrm
10622 eval $inlibc
10623
10624 : see if symlink exists
10625 set symlink d_symlink
10626 eval $inlibc
10627
10628 : see if syscall exists
10629 set syscall d_syscall
10630 eval $inlibc
10631
10632 : see if sysconf exists
10633 set sysconf d_sysconf
10634 eval $inlibc
10635
10636 : see if system exists
10637 set system d_system
10638 eval $inlibc
10639
10640 : see if tcgetpgrp exists
10641 set tcgetpgrp d_tcgetpgrp
10642 eval $inlibc
10643
10644 : see if tcsetpgrp exists
10645 set tcsetpgrp d_tcsetpgrp
10646 eval $inlibc
10647
10648 : see if prototype for telldir is available
10649 echo " "
10650 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10651 eval $hasproto
10652
10653 : see if this is a sys/times.h system
10654 set sys/times.h i_systimes
10655 eval $inhdr
10656
10657 : see if times exists
10658 echo " "
10659 if set times val -f d_times; eval $csym; $val; then
10660         echo 'times() found.' >&4
10661         d_times="$define"
10662         inc=''
10663         case "$i_systimes" in
10664         "$define") inc='sys/times.h';;
10665         esac
10666         rp="What is the type returned by times() on this system?"
10667         set clock_t clocktype long stdio.h sys/types.h $inc
10668         eval $typedef_ask
10669 else
10670         echo 'times() NOT found, hope that will do.' >&4
10671         d_times="$undef"
10672         clocktype='int'
10673 fi
10674
10675 : see if truncate exists
10676 set truncate d_truncate
10677 eval $inlibc
10678
10679 : see if tzname[] exists
10680 echo " "
10681 if set tzname val -a d_tzname; eval $csym; $val; then
10682         val="$define"
10683         echo 'tzname[] found.' >&4
10684 else
10685         val="$undef"
10686         echo 'tzname[] NOT found.' >&4
10687 fi
10688 set d_tzname
10689 eval $setvar
10690
10691 : see if umask exists
10692 set umask d_umask
10693 eval $inlibc
10694
10695 : see if ustat exists
10696 set ustat d_ustat
10697 eval $inlibc
10698
10699 : backward compatibility for d_hvfork
10700 if test X$d_hvfork != X; then
10701         d_vfork="$d_hvfork"
10702         d_hvfork=''
10703 fi
10704 : see if there is a vfork
10705 val=''
10706 set vfork val
10707 eval $inlibc
10708
10709 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10710 : perl on Solaris 2.x, and probably elsewhere.
10711 case "$val" in
10712 $define)
10713         echo " "
10714         case "$usevfork" in
10715         false) dflt='n';;
10716         *) dflt='y';;
10717         esac
10718         cat <<'EOM'
10719  
10720 Perl can only use a vfork() that doesn't suffer from strict
10721 restrictions on calling functions or modifying global data in
10722 the child.  For example, glibc-2.1 contains such a vfork()
10723 that is unsuitable.  If your system provides a proper fork()
10724 call, chances are that you do NOT want perl to use vfork().
10725
10726 EOM
10727         rp="Do you still want to use vfork()?"
10728         . ./myread
10729         case "$ans" in
10730         y|Y) ;;
10731         *)
10732                 echo "Ok, we won't use vfork()."
10733                 val="$undef"
10734                 ;;
10735         esac
10736         ;;
10737 esac
10738 set d_vfork
10739 eval $setvar
10740 case "$d_vfork" in
10741 $define) usevfork='true';;
10742 *) usevfork='false';;
10743 esac
10744
10745 : see if this is an sysdir system
10746 set sys/dir.h i_sysdir
10747 eval $inhdr
10748
10749 : see if this is an sysndir system
10750 set sys/ndir.h i_sysndir
10751 eval $inhdr
10752
10753 : see if closedir exists
10754 set closedir d_closedir
10755 eval $inlibc
10756
10757 case "$d_closedir" in
10758 "$define")
10759         echo " "
10760         echo "Checking whether closedir() returns a status..." >&4
10761         cat > closedir.c <<EOM
10762 #$i_dirent I_DIRENT             /**/
10763 #$i_sysdir I_SYS_DIR            /**/
10764 #$i_sysndir I_SYS_NDIR          /**/
10765 #$i_systypes I_SYS_TYPES        /**/
10766
10767 #if defined(I_SYS_TYPES)
10768 #include <sys/types.h>
10769 #endif
10770 #if defined(I_DIRENT)
10771 #include <dirent.h>
10772 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10773 #include <sys/dir.h>
10774 #endif
10775 #else
10776 #ifdef I_SYS_NDIR
10777 #include <sys/ndir.h>
10778 #else
10779 #ifdef I_SYS_DIR
10780 #ifdef hp9000s500
10781 #include <ndir.h>       /* may be wrong in the future */
10782 #else
10783 #include <sys/dir.h>
10784 #endif
10785 #endif
10786 #endif
10787 #endif 
10788 int main() { return closedir(opendir(".")); }
10789 EOM
10790         set closedir
10791         if eval $compile_ok; then
10792                 if ./closedir > /dev/null 2>&1 ; then
10793                         echo "Yes, it does."
10794                         val="$undef"
10795                 else
10796                         echo "No, it doesn't."
10797                         val="$define"
10798                 fi
10799         else
10800                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10801                 val="$define"
10802         fi
10803         ;;
10804 *)
10805         val="$undef";
10806         ;;
10807 esac
10808 set d_void_closedir
10809 eval $setvar
10810 $rm -f closedir*
10811 : check for volatile keyword
10812 echo " "
10813 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10814 $cat >try.c <<'EOCP'
10815 int main()
10816 {
10817         typedef struct _goo_struct goo_struct;
10818         goo_struct * volatile goo = ((goo_struct *)0);
10819         struct _goo_struct {
10820                 long long_int;
10821                 int reg_int;
10822                 char char_var;
10823         };
10824         typedef unsigned short foo_t;
10825         char *volatile foo;
10826         volatile int bar;
10827         volatile foo_t blech;
10828         foo = foo;
10829 }
10830 EOCP
10831 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10832         val="$define"
10833         echo "Yup, it does."
10834 else
10835         val="$undef"
10836         echo "Nope, it doesn't."
10837 fi
10838 set d_volatile
10839 eval $setvar
10840 $rm -f try.*
10841
10842 : see if there is a wait4
10843 set wait4 d_wait4
10844 eval $inlibc
10845
10846 : see if waitpid exists
10847 set waitpid d_waitpid
10848 eval $inlibc
10849
10850 : see if wcstombs exists
10851 set wcstombs d_wcstombs
10852 eval $inlibc
10853
10854 : see if wctomb exists
10855 set wctomb d_wctomb
10856 eval $inlibc
10857
10858 : preserve RCS keywords in files with variable substitution, grrr
10859 Date='$Date'
10860 Id='$Id'
10861 Log='$Log'
10862 RCSfile='$RCSfile'
10863 Revision='$Revision'
10864
10865 case "$crosscompile" in
10866 ''|[nN]*) crosscompile="$undef" ;;
10867 esac
10868
10869 case "$osname" in
10870 next|rhapsody) multiarch="$define" ;;
10871 esac
10872 case "$multiarch" in
10873 ''|[nN]*) multiarch="$undef" ;;
10874 esac
10875
10876 : check for alignment requirements
10877 echo " "
10878 case "$crosscompile$multiarch" in
10879 *$define*)
10880         $cat <<EOM
10881 You seem to be either cross-compiling or doing a multiarchitecture build,
10882 skipping the memory alignment check.
10883
10884 EOM
10885         case "$alignbytes" in
10886         '') alignbytes=8 ;;
10887         esac
10888         ;;
10889 *)
10890         case "$alignbytes" in
10891         '') echo "Checking alignment constraints..." >&4
10892                 $cat >try.c <<'EOCP'
10893 struct foobar {
10894         char foo;
10895         double bar;
10896 } try_algn;
10897 int main()
10898 {
10899         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10900 }
10901 EOCP
10902                 set try
10903                 if eval $compile_ok; then
10904                         dflt=`./try`
10905                 else
10906                         dflt='8'
10907                         echo "(I can't seem to compile the test program...)"
10908                 fi
10909                 ;;
10910         *) dflt="$alignbytes"
10911                 ;;
10912         esac
10913         rp="Doubles must be aligned on a how-many-byte boundary?"
10914         . ./myread
10915         alignbytes="$ans"
10916         $rm -f try.c try
10917         ;;
10918 esac
10919
10920
10921 : check for ordering of bytes in a long
10922 echo " "
10923 case "$crosscompile$multiarch" in
10924 *$define*)
10925         $cat <<EOM
10926 You seem to be either cross-compiling or doing a multiarchitecture build,
10927 skipping the byteorder check.
10928
10929 EOM
10930         byteorder='0xffff'
10931         ;;
10932 *)
10933         case "$byteorder" in
10934         '')
10935                 $cat <<'EOM'
10936 In the following, larger digits indicate more significance.  A big-endian
10937 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10938 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10939 machines may have weird orders like 3412.  A Cray will report 87654321,
10940 an Alpha will report 12345678. If the test program works the default is
10941 probably right.
10942 I'm now running the test program...
10943 EOM
10944                 $cat >try.c <<'EOCP'
10945 #include <stdio.h>
10946 int main()
10947 {
10948         int i;
10949         union {
10950                 unsigned long l;
10951                 char c[sizeof(long)];
10952         } u;
10953
10954         if (sizeof(long) > 4)
10955                 u.l = (0x08070605L << 32) | 0x04030201L;
10956         else
10957                 u.l = 0x04030201L;
10958         for (i = 0; i < sizeof(long); i++)
10959                 printf("%c", u.c[i]+'0');
10960         printf("\n");
10961         exit(0);
10962 }
10963 EOCP
10964                 xxx_prompt=y
10965                 set try
10966                 if eval $compile && ./try > /dev/null; then
10967                         dflt=`./try`
10968                         case "$dflt" in
10969                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10970                                 echo "(The test program ran ok.)"
10971                                 echo "byteorder=$dflt"
10972                                 xxx_prompt=n
10973                         ;;
10974                         ????|????????) echo "(The test program ran ok.)" ;;
10975                         *) echo "(The test program didn't run right for some reason.)" ;;
10976                         esac
10977                 else
10978                         dflt='4321'
10979                         cat <<'EOM'
10980 (I can't seem to compile the test program.  Guessing big-endian...)
10981 EOM
10982                 fi
10983                 case "$xxx_prompt" in
10984                 y)
10985                         rp="What is the order of bytes in a long?"
10986                         . ./myread
10987                         byteorder="$ans"
10988                         ;;
10989                 *)      byteorder=$dflt
10990                         ;;
10991                 esac
10992                 ;;
10993         esac
10994         $rm -f try.c try
10995         ;;
10996 esac
10997
10998
10999 : how do we catenate cpp tokens here?
11000 echo " "
11001 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11002 $cat >cpp_stuff.c <<'EOCP'
11003 #define RCAT(a,b)a/**/b
11004 #define ACAT(a,b)a ## b
11005 RCAT(Rei,ser)
11006 ACAT(Cir,cus)
11007 EOCP
11008 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11009 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11010         echo "Oh!  Smells like ANSI's been here." >&4
11011         echo "We can catify or stringify, separately or together!"
11012         cpp_stuff=42
11013 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11014         echo "Ah, yes!  The good old days!" >&4
11015         echo "However, in the good old days we don't know how to stringify and"
11016         echo "catify at the same time."
11017         cpp_stuff=1
11018 else
11019         $cat >&4 <<EOM
11020 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11021 to have to edit the values of CAT[2-5] in config.h...
11022 EOM
11023         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11024 fi
11025 $rm -f cpp_stuff.*
11026
11027 : see if this is a db.h system
11028 set db.h i_db
11029 eval $inhdr
11030
11031 case "$i_db" in
11032 $define)
11033         : Check db version.
11034         echo " "
11035         echo "Checking Berkeley DB version ..." >&4
11036         $cat >try.c <<EOCP
11037 #$d_const HASCONST
11038 #ifndef HASCONST
11039 #define const
11040 #endif
11041 #include <sys/types.h>
11042 #include <stdio.h>
11043 #include <db.h>
11044 int main()
11045 {
11046 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11047     int Major, Minor, Patch ;
11048     unsigned long Version ;
11049     (void)db_version(&Major, &Minor, &Patch) ;
11050     printf("You have Berkeley DB Version 2 or greater\n");
11051
11052     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11053                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11054     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11055                 Major, Minor, Patch) ;
11056
11057     /* check that db.h & libdb are compatible */
11058     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11059         printf("db.h and libdb are incompatible\n") ;
11060         exit(3);        
11061     }
11062
11063     printf("db.h and libdb are compatible\n") ;
11064
11065     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11066                 + DB_VERSION_PATCH ;
11067
11068     /* needs to be >= 2.3.4 */
11069     if (Version < 2003004) {
11070     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11071         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11072         exit(2);        
11073     }
11074
11075     exit(0);
11076 #else
11077 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11078     printf("You have Berkeley DB Version 1\n");
11079     exit(0);    /* DB version < 2: the coast is clear. */
11080 #else
11081     exit(1);    /* <db.h> not Berkeley DB? */
11082 #endif
11083 #endif
11084 }
11085 EOCP
11086         set try
11087         if eval $compile && ./try; then
11088                 echo 'Looks OK.' >&4
11089         else
11090                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11091                 i_db=$undef
11092                 case " $libs " in
11093                 *"-ldb "*)
11094                         : Remove db from list of libraries to use
11095                         echo "Removing unusable -ldb from library list" >&4
11096                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11097                         shift
11098                         libs="$*"
11099                         echo "libs = $libs" >&4
11100                         ;;
11101                 esac
11102         fi
11103         $rm -f try.*
11104         ;;
11105 esac
11106
11107 case "$i_db" in
11108 define)
11109         : Check the return type needed for hash 
11110         echo " "
11111         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11112         $cat >try.c <<EOCP
11113 #$d_const HASCONST
11114 #ifndef HASCONST
11115 #define const
11116 #endif
11117 #include <sys/types.h>
11118 #include <db.h>
11119
11120 #ifndef DB_VERSION_MAJOR
11121 u_int32_t hash_cb (ptr, size)
11122 const void *ptr;
11123 size_t size;
11124 {
11125 }
11126 HASHINFO info;
11127 int main()
11128 {
11129         info.hash = hash_cb;
11130 }
11131 #endif
11132 EOCP
11133         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11134                 if $contains warning try.out >>/dev/null 2>&1 ; then
11135                         db_hashtype='int'
11136                 else
11137                         db_hashtype='u_int32_t'
11138                 fi
11139         else
11140                 : XXX Maybe we should just give up here.
11141                 db_hashtype=u_int32_t
11142                 $cat try.out >&4
11143                 echo "Help:  I can't seem to compile the db test program." >&4
11144                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11145         fi
11146         $rm -f try.*
11147         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11148         ;;
11149 *)      db_hashtype=u_int32_t
11150         ;;
11151 esac
11152 case "$i_db" in
11153 define)
11154         : Check the return type needed for prefix 
11155         echo " "
11156         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11157         cat >try.c <<EOCP
11158 #$d_const HASCONST
11159 #ifndef HASCONST
11160 #define const
11161 #endif
11162 #include <sys/types.h>
11163 #include <db.h>
11164
11165 #ifndef DB_VERSION_MAJOR
11166 size_t prefix_cb (key1, key2)
11167 const DBT *key1;
11168 const DBT *key2;
11169 {
11170 }
11171 BTREEINFO info;
11172 int main()
11173 {
11174         info.prefix = prefix_cb;
11175 }
11176 #endif
11177 EOCP
11178         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11179                 if $contains warning try.out >>/dev/null 2>&1 ; then
11180                         db_prefixtype='int'
11181                 else
11182                         db_prefixtype='size_t'
11183                 fi
11184         else
11185                 db_prefixtype='size_t'
11186                 : XXX Maybe we should just give up here.
11187                 $cat try.out >&4
11188                 echo "Help:  I can't seem to compile the db test program." >&4
11189                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11190         fi
11191         $rm -f try.*
11192         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11193         ;;
11194 *)      db_prefixtype='size_t'
11195         ;;
11196 esac
11197
11198 : check for void type
11199 echo " "
11200 echo "Checking to see how well your C compiler groks the void type..." >&4
11201 case "$voidflags" in
11202 '')
11203         $cat >try.c <<'EOCP'
11204 #if TRY & 1
11205 void sub() {
11206 #else
11207 sub() {
11208 #endif
11209         extern void moo();      /* function returning void */
11210         void (*goo)();          /* ptr to func returning void */
11211 #if TRY & 8
11212         void *hue;              /* generic ptr */
11213 #endif
11214 #if TRY & 2
11215         void (*foo[10])();
11216 #endif
11217
11218 #if TRY & 4
11219         if(goo == moo) {
11220                 exit(0);
11221         }
11222 #endif
11223         exit(0);
11224 }
11225 int main() { sub(); }
11226 EOCP
11227         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11228                 voidflags=$defvoidused
11229         echo "Good.  It appears to support void to the level $package wants.">&4
11230                 if $contains warning .out >/dev/null 2>&1; then
11231                         echo "However, you might get some warnings that look like this:"
11232                         $cat .out
11233                 fi
11234         else
11235 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11236                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11237                         echo "It supports 1..."
11238                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11239                                 echo "It also supports 2..."
11240                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11241                                         voidflags=7
11242                                         echo "And it supports 4 but not 8 definitely."
11243                                 else
11244                                         echo "It doesn't support 4..."
11245                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11246                                                 voidflags=11
11247                                                 echo "But it supports 8."
11248                                         else
11249                                                 voidflags=3
11250                                                 echo "Neither does it support 8."
11251                                         fi
11252                                 fi
11253                         else
11254                                 echo "It does not support 2..."
11255                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11256                                         voidflags=13
11257                                         echo "But it supports 4 and 8."
11258                                 else
11259                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11260                                                 voidflags=5
11261                                                 echo "And it supports 4 but has not heard about 8."
11262                                         else
11263                                                 echo "However it supports 8 but not 4."
11264                                         fi
11265                                 fi
11266                         fi
11267                 else
11268                         echo "There is no support at all for void."
11269                         voidflags=0
11270                 fi
11271         fi
11272 esac
11273 case "$voidflags" in
11274 "$defvoidused") ;;
11275 *)      $cat >&4 <<'EOM'
11276   Support flag bits are:
11277     1: basic void declarations.
11278     2: arrays of pointers to functions returning void.
11279     4: operations between pointers to and addresses of void functions.
11280     8: generic void pointers.
11281 EOM
11282         dflt="$voidflags";
11283         rp="Your void support flags add up to what?"
11284         . ./myread
11285         voidflags="$ans"
11286         ;;
11287 esac
11288 $rm -f try.* .out
11289
11290
11291 : How can we generate normalized random numbers ?
11292 echo " "
11293 echo "Looking for a random number function..." >&4
11294 case "$randfunc" in
11295 '')
11296         if set drand48 val -f; eval $csym; $val; then
11297                 dflt="drand48"
11298                 echo "Good, found drand48()." >&4
11299         elif set random val -f; eval $csym; $val; then
11300                 dflt="random"
11301                 echo "OK, found random()." >&4
11302         else
11303                 dflt="rand"
11304                 echo "Yick, looks like I have to use rand()." >&4
11305         fi
11306         echo " "
11307         ;;
11308 *)
11309         dflt="$randfunc"
11310         ;;
11311 esac
11312 cont=true
11313
11314 case "$ccflags" in
11315 *-Dmy_rand=*|*-Dmy_srand=*)
11316         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11317         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11318         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11319         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11320         ;;
11321 esac
11322
11323 while $test "$cont"; do
11324         rp="Use which function to generate random numbers?"
11325         . ./myread
11326         if $test "$ans" = "$dflt"; then
11327                 : null
11328         else
11329                 randbits=''
11330         fi
11331         randfunc="$ans"
11332         if set $ans val -f; eval $csym; $val; then
11333                 cont=''
11334         else
11335                 dflt=y
11336                 rp="I cannot find function $ans. Use that name anyway?"
11337                 . ./myread
11338                 dflt=rand
11339                 case "$ans" in
11340                         [yY]*) cont='';;
11341                 esac
11342         fi
11343         case "$cont" in
11344         '')
11345                 case "$randfunc" in
11346                 drand48)
11347                         drand01="drand48()"
11348                         seedfunc="srand48"
11349                         randbits=48
11350                         randseedtype=long
11351                         ;;
11352                 rand|random)
11353                         case "$randbits" in
11354                         '')
11355 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11356                                 $cat >try.c <<EOCP
11357 #$i_unistd I_UNISTD
11358 #$i_stdlib I_STDLIB
11359 #include <stdio.h>
11360 #ifdef I_UNISTD
11361 #  include <unistd.h>
11362 #endif
11363 #ifdef I_STDLIB
11364 #  include <stdlib.h>
11365 #endif
11366 int main()
11367 {
11368         register int i;
11369         register unsigned long tmp;
11370         register unsigned long max = 0L;
11371
11372         for (i = 1000; i; i--) {
11373                 tmp = (unsigned long) $randfunc();
11374                 if (tmp > max) max = tmp;
11375         }
11376         for (i = 0; max; i++)
11377                 max /= 2;
11378         printf("%d\n",i);
11379 }
11380 EOCP
11381                                 set try
11382                                 if eval $compile_ok; then
11383                                         dflt=`try`
11384                                 else
11385                                         dflt='?'
11386                                         echo "(I can't seem to compile the test program...)"
11387                                 fi
11388                                 ;;
11389                         *)
11390                                 dflt="$randbits"
11391                                 ;;
11392                         esac
11393                         rp="How many bits does your $randfunc() function produce?"
11394                         . ./myread
11395                         randbits="$ans"
11396                         $rm -f try.c try
11397                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11398                         seedfunc="s$randfunc"
11399                         randseedtype=unsigned
11400                         ;;
11401                 *)
11402                         dflt="31"
11403                         rp="How many bits does your $randfunc() function produce?"
11404                         . ./myread
11405                         randbits="$ans"
11406                         seedfunc="s$randfunc"
11407                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11408                         if set $seedfunc val -f; eval $csym; $val; then
11409                                 echo "(Using $seedfunc() to seed random generator)"
11410                         else
11411                                 echo "(Warning: no $seedfunc() to seed random generator)"
11412                                 seedfunc=rand
11413                         fi
11414                         randseedtype=unsigned
11415                         ;;
11416                 esac
11417                 ;;
11418         esac
11419 done
11420
11421 echo " "
11422 echo "Determining whether or not we are on an EBCDIC system..." >&4
11423 $cat >tebcdic.c <<'EOM'
11424 int main()
11425 {
11426   if ('M'==0xd4) return 0;
11427   return 1;
11428 }
11429 EOM
11430
11431 val=$undef
11432 set tebcdic
11433 if eval $compile_ok; then
11434         if ./tebcdic; then
11435                 echo "You have EBCDIC." >&4
11436                 val="$define"
11437         else
11438                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
11439         fi
11440 else
11441         echo "I'm unable to compile the test program." >&4
11442         echo "I'll assume ASCII or some ISO Latin." >&4
11443 fi
11444 $rm -f tebcdic.c tebcdic
11445 set ebcdic
11446 eval $setvar
11447
11448 echo " "
11449 $cat >&4 <<EOM
11450 Checking how to flush all pending stdio output...
11451 EOM
11452 # I only know how to find the first 32 possibly open files on SunOS.
11453 # See also hints/sunos_4_1.sh and util.c  --AD
11454 case "$osname" in
11455 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11456 esac
11457 $cat >>try.c <<EOCP
11458 #include <stdio.h>
11459 #$i_unistd I_UNISTD
11460 #ifdef I_UNISTD
11461 # include <unistd.h>
11462 #endif
11463 #$d_sysconf HAS_SYSCONF
11464 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11465 #ifdef HAS_STDIO_STREAM_ARRAY
11466 # define STDIO_STREAM_ARRAY $stdio_stream_array
11467 #endif
11468 int main() {
11469   FILE* p = fopen("try.out", "w");
11470 #ifdef TRY_FPUTC
11471   fputc('x', p);
11472 #else
11473 # ifdef TRY_FPRINTF
11474   fprintf(p, "x");
11475 # endif
11476 #endif
11477 #ifdef TRY_FFLUSH_NULL
11478   fflush(NULL);
11479 #endif
11480 #ifdef TRY_FFLUSH_ALL
11481   {
11482     long open_max = -1;
11483 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11484     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11485 # else
11486 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11487     open_max = sysconf(_SC_OPEN_MAX);
11488 #  else
11489 #   ifdef FOPEN_MAX
11490     open_max = FOPEN_MAX;
11491 #   else
11492 #    ifdef OPEN_MAX
11493     open_max = OPEN_MAX;
11494 #    else
11495 #     ifdef _NFILE
11496     open_max = _NFILE;
11497 #     endif
11498 #    endif
11499 #   endif
11500 #  endif
11501 # endif 
11502 # ifdef HAS_STDIO_STREAM_ARRAY
11503     if (open_max > 0) {
11504       long i;
11505       for (i = 0; i < open_max; i++)
11506             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11507                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11508                 STDIO_STREAM_ARRAY[i]._flag)
11509                 fflush(&STDIO_STREAM_ARRAY[i]);
11510     }   
11511   }
11512 # endif
11513 #endif
11514   _exit(42);
11515 }
11516 EOCP
11517 : first we have to find out how _not_ to flush
11518 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11519     output=''
11520     set try -DTRY_FPUTC
11521     if eval $compile; then
11522             $rm -f try.out
11523             ./try$exe_ext 2>/dev/null
11524             if $test ! -s try.out -a "X$?" = X42; then
11525                 output=-DTRY_FPUTC
11526             fi
11527     fi
11528     case "$output" in
11529     '')
11530             set try -DTRY_FPRINTF
11531             $rm -f try.out
11532             if eval $compile; then
11533                     $rm -f try.out
11534                     ./try$exe_ext 2>/dev/null
11535                     if $test ! -s try.out -a "X$?" = X42; then
11536                         output=-DTRY_FPRINTF
11537                     fi
11538             fi
11539         ;;
11540     esac
11541 fi
11542 : check for fflush NULL behaviour
11543 case "$fflushNULL" in
11544 '')     set try -DTRY_FFLUSH_NULL $output
11545         if eval $compile; then
11546                 $rm -f try.out
11547                 ./try$exe_ext 2>/dev/null
11548                 code="$?"
11549                 if $test -s try.out -a "X$code" = X42; then
11550                         fflushNULL="`$cat try.out`"
11551                 else
11552                         if $test "X$code" != X42; then
11553                                 $cat >&4 <<EOM
11554 (If this test failed, don't worry, we'll try another method shortly.)
11555 EOM
11556                         fi
11557                 fi
11558         fi
11559         $rm -f core try.core core.try.*
11560         case "$fflushNULL" in
11561         x)      $cat >&4 <<EOM
11562 Your fflush(NULL) works okay.
11563 EOM
11564                 fflushNULL="$define"
11565                 ;;
11566         '')     $cat >&4 <<EOM
11567 Your fflush(NULL) isn't working (contrary to ANSI C).
11568 EOM
11569                 fflushNULL="$undef"
11570                 ;;
11571         *)      $cat >&4 <<EOM
11572 Cannot figure out whether your fflush(NULL) works or not.
11573 I'm assuming it doesn't (contrary to ANSI C).
11574 EOM
11575                 fflushNULL="$undef"
11576                 ;;
11577         esac
11578         ;;
11579 $define|true|[yY]*)
11580         fflushNULL="$define"
11581         ;;
11582 *)
11583         fflushNULL="$undef"
11584         ;;
11585 esac
11586 : check explicit looping only if NULL did not work
11587 case "$fflushNULL" in
11588 "$undef")
11589         : check for fflush all behaviour
11590         case "$fflushall" in
11591         '')     set try -DTRY_FFLUSH_ALL $output
11592                 if eval $compile; then
11593                         $cat >&4 <<EOM
11594 (Now testing the other method--but note that also this may fail.)
11595 EOM
11596                         $rm -f try.out
11597                         ./try$exe_ext 2>/dev/null
11598                         if $test -s try.out -a "X$?" = X42; then
11599                                 fflushall="`$cat try.out`"
11600                         fi
11601                 fi
11602                 $rm -f core try.core core.try.*
11603                 case "$fflushall" in
11604                 x)      $cat >&4 <<EOM
11605 Whew. Flushing explicitly all the stdio streams works.
11606 EOM
11607                         fflushall="$define"
11608                         ;;
11609                 '')     $cat >&4 <<EOM
11610 Sigh. Flushing explicitly all the stdio streams doesn't work.
11611 EOM
11612                         fflushall="$undef"
11613                         ;;
11614                 *)      $cat >&4 <<EOM
11615 Cannot figure out whether flushing stdio streams explicitly works or not.
11616 I'm assuming it doesn't.
11617 EOM
11618                         fflushall="$undef"
11619                         ;;
11620                 esac
11621                 ;;
11622         "$define"|true|[yY]*)
11623                 fflushall="$define"
11624                 ;;
11625         *)
11626                 fflushall="$undef"
11627                 ;;
11628         esac
11629         ;;
11630 *)      fflushall="$undef"      
11631         ;;
11632 esac
11633 case "$fflushNULL$fflushall" in
11634 undefundef)
11635         $cat <<EOM
11636 I cannot figure out how to flush pending stdio output.
11637 EOM
11638         ;;
11639 esac
11640 $rm -f try.* try$exe_ext
11641
11642 : Store the full pathname to the ar program for use in the C program
11643 : Respect a hint or command line value for full_ar.
11644 case "$full_ar" in
11645 '') full_ar=$ar ;;
11646 esac
11647
11648 : Store the full pathname to the sed program for use in the C program
11649 full_sed=$sed
11650
11651 : see what type gids are declared as in the kernel
11652 echo " "
11653 echo "Looking for the type for group ids returned by getgid()."
11654 set gid_t gidtype xxx stdio.h sys/types.h
11655 eval $typedef
11656 case "$gidtype" in
11657 xxx)
11658         xxx=`./findhdr sys/user.h`
11659         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11660         case $1 in
11661         unsigned) dflt="$1 $2" ;;
11662         *) dflt="$1" ;;
11663         esac
11664         ;;
11665 *) dflt="$gidtype";;
11666 esac
11667 case "$gidtype" in
11668 gid_t) echo "gid_t found." ;;
11669 *)      rp="What is the type for group ids returned by getgid()?"
11670         . ./myread
11671         gidtype="$ans"
11672         ;;
11673 esac
11674
11675 echo " "
11676 case "$gidtype" in
11677 *_t) zzz="$gidtype"     ;;
11678 *)   zzz="gid"          ;;
11679 esac
11680 echo "Checking the size of $zzz..." >&4 
11681 cat > try.c <<EOCP
11682 #include <sys/types.h>
11683 #include <stdio.h>
11684 int main() {
11685     printf("%d\n", sizeof($gidtype));
11686 }
11687 EOCP
11688 set try
11689 if eval $compile_ok; then
11690         yyy=`./try`
11691         case "$yyy" in
11692         '')     gidsize=4
11693                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
11694                 ;;
11695         *)      gidsize=$yyy
11696                 echo "Your $zzz size is $gidsize bytes."
11697                 ;;
11698         esac
11699 else
11700         gidsize=4
11701         echo "(I can't compile the test program--guessing $gidsize.)" >&4
11702 fi
11703
11704
11705 echo " "
11706 case "$gidtype" in
11707 *_t) zzz="$gidtype"     ;;
11708 *)   zzz="gid"          ;;
11709 esac
11710 echo "Checking the sign of $zzz..." >&4 
11711 cat > try.c <<EOCP
11712 #include <sys/types.h>
11713 #include <stdio.h>
11714 int main() {
11715         $gidtype foo = -1;
11716         if (foo < 0)
11717                 printf("-1\n");
11718         else
11719                 printf("1\n");
11720 }
11721 EOCP
11722 set try
11723 if eval $compile; then
11724         yyy=`./try`
11725         case "$yyy" in
11726         '')     gidsign=1
11727                 echo "(I can't execute the test program--guessing unsigned.)" >&4
11728                 ;;
11729         *)      gidsign=$yyy
11730                 case "$gidsign" in
11731                  1) echo "Your $zzz is unsigned." ;;
11732                 -1) echo "Your $zzz is signed."   ;;
11733                 esac
11734                 ;;
11735         esac
11736 else
11737         gidsign=1
11738         echo "(I can't compile the test program--guessing unsigned.)" >&4
11739 fi
11740
11741
11742
11743 echo " "
11744 echo "Checking which 64-bit integer type to use..." >&4
11745
11746 case "$intsize" in
11747 8) val=int
11748    set quadtype
11749    eval $setvar
11750    val='"unsigned int"'
11751    set uquadtype
11752    eval $setvar
11753    quadcase=1
11754    ;;
11755 *) case "$longsize" in
11756    8) val=long
11757       set quadtype
11758       eval $setvar
11759       val='"unsigned long"'
11760       set uquadtype
11761       eval $setvar
11762       quadcase=2
11763       ;;
11764    *) case "$uselonglong:$d_longlong:$longlongsize" in
11765       define:define:8)
11766         val='"long long"'
11767         set quadtype
11768         eval $setvar
11769         val='"unsigned long long"'
11770         set uquadtype
11771         eval $setvar
11772         quadcase=3
11773         ;;
11774       *) case "$d_int64t" in
11775          define)
11776            val=int64_t
11777            set quadtype
11778            eval $setvar
11779            val=uint64_t
11780            set uquadtype
11781            eval $setvar
11782            quadcase=4
11783            ;;
11784          esac
11785          ;;
11786       esac
11787       ;;
11788    esac
11789    ;;
11790 esac
11791
11792 case "$quadtype" in
11793 '') echo "Alas, no 64-bit integer types in sight."    >&4 ;;
11794 *)  echo "Using '$quadtype' for 64-bit integers." >&4 ;;
11795 esac
11796
11797 : check for length of character
11798 echo " "
11799 case "$charsize" in
11800 '')
11801         echo "Checking to see how big your characters are..." >&4
11802         $cat >try.c <<'EOCP'
11803 #include <stdio.h>
11804 int main()
11805 {
11806         printf("%d\n", sizeof(char));
11807 }
11808 EOCP
11809         set try
11810         if eval $compile_ok; then
11811                 dflt=`./try`
11812         else
11813                 dflt='1'
11814                 echo "(I can't seem to compile the test program.  Guessing...)"
11815         fi
11816         ;;
11817 *)
11818         dflt="$charsize"
11819         ;;
11820 esac
11821 rp="What is the size of a character (in bytes)?"
11822 . ./myread
11823 charsize="$ans"
11824 $rm -f try.c try
11825
11826
11827 echo " "
11828 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11829
11830 case "$use64bits:$quadtype" in
11831 define:?*)
11832         ivtype="$quadtype"
11833         uvtype="$uquadtype"
11834         ivsize=8
11835         uvsize=8
11836         ;;
11837 *)      ivtype="long"
11838         uvtype="unsigned long"
11839         ivsize=$longsize
11840         uvsize=$longsize
11841         ;;
11842 esac
11843
11844 case "$uselongdouble:$d_longdbl" in
11845 define:define)
11846         nvtype="long double"
11847         nvsize=$longdblsize
11848         ;;
11849 *)      nvtype=double
11850         nvsize=$doublesize
11851         ;;
11852 esac
11853
11854 echo "(IV will be "$ivtype", $ivsize bytes)"
11855 echo "(UV will be "$uvtype", $uvsize bytes)"
11856 echo "(NV will be "$nvtype", $nvsize bytes)"
11857
11858 $cat >try.c <<EOCP
11859 #$i_inttypes I_INTTYPES
11860 #ifdef I_INTTYPES
11861 #include <inttypes.h>
11862 #endif
11863 #include <stdio.h>
11864 int main() {
11865 #ifdef INT8
11866    int8_t i =  INT8_MAX;
11867   uint8_t u = UINT8_MAX;
11868   printf("int8_t\n");
11869 #endif
11870 #ifdef INT16
11871    int16_t i =  INT16_MAX;
11872   uint16_t i = UINT16_MAX;
11873   printf("int16_t\n");
11874 #endif
11875 #ifdef INT32
11876    int32_t i =  INT32_MAX;
11877   uint32_t u = UINT32_MAX;
11878   printf("int32_t\n");
11879 #endif
11880 }
11881 EOCP
11882
11883 case "$i8type" in
11884 '')     case "$charsize" in
11885         1)      i8type=char
11886                 u8type="unsigned char"
11887                 i8size=$charsize
11888                 u8size=$charsize
11889                 ;;
11890         esac
11891         ;;
11892 esac
11893 case "$i8type" in
11894 '')     set try -DINT8
11895         if eval $compile; then
11896                 case "`./try$exe_ext`" in
11897                 int8_t) i8type=int8_t
11898                         u8type=uint8_t
11899                         i8size=1
11900                         u8size=1
11901                         ;;
11902                 esac
11903         fi
11904         ;;
11905 esac
11906 case "$i8type" in
11907 '')     if $test $charsize -ge 1; then
11908                 i8type=char
11909                 u8type="unsigned char"
11910                 i8size=$charsize
11911                 u8size=$charsize
11912         fi
11913         ;;
11914 esac
11915
11916 case "$i16type" in
11917 '')     case "$shortsize" in
11918         2)      i16type=short
11919                 u16type="unsigned short"
11920                 i16size=$shortsize
11921                 u16size=$shortsize
11922                 ;;
11923         esac
11924         ;;
11925 esac
11926 case "$i16type" in
11927 '')     set try -DINT16
11928         if eval $compile; then
11929                 case "`./try$exe_ext`" in
11930                 int16_t)
11931                         i16type=int16_t
11932                         u16type=uint16_t
11933                         i16size=2
11934                         u16size=2
11935                         ;;
11936                 esac
11937         fi
11938         ;;
11939 esac
11940 case "$i16type" in
11941 '')     if $test $shortsize -ge 2; then
11942                 i16type=short
11943                 u16type="unsigned short"
11944                 i16size=$shortsize
11945                 u16size=$shortsize
11946         fi
11947         ;;
11948 esac
11949
11950 case "$i32type" in
11951 '')     case "$longsize" in
11952         4)      i32type=long
11953                 u32type="unsigned long"
11954                 i32size=$longsize
11955                 u32size=$longsize
11956                 ;;
11957         *)      case "$intsize" in
11958                 4)      i32type=int
11959                         u32type="unsigned int"
11960                         i32size=$intsize
11961                         u32size=$intsize
11962                         ;;
11963                 esac
11964                 ;;
11965         esac
11966         ;;
11967 esac
11968 case "$i32type" in
11969 '')     set try -DINT32
11970         if eval $compile; then
11971                 case "`./try$exe_ext`" in
11972                 int32_t)
11973                         i32type=int32_t
11974                         u32type=uint32_t
11975                         i32size=4
11976                         u32size=4
11977                         ;;
11978                 esac
11979         fi
11980         ;;
11981 esac
11982 case "$i32type" in
11983 '')     if $test $intsize -ge 4; then
11984                 i32type=int
11985                 u32type="unsigned int"
11986                 i32size=$intsize
11987                 u32size=$intsize
11988         fi
11989         ;;
11990 esac
11991
11992 case "$i64type" in
11993 '')     case "$quadtype" in
11994         '')     ;;
11995         *)      i64type="$quadtype"
11996                 u64type="$uquadtype"
11997                 i64size=8
11998                 u64size=8
11999                 ;;
12000         esac
12001         ;;
12002 esac
12003
12004 $rm -f try.* try
12005
12006 echo " "
12007
12008 if $test X"$quadtype" != X; then
12009
12010 echo "Checking how to print 64-bit integers..." >&4
12011
12012 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12013         $cat >try.c <<'EOCP'
12014 #include <sys/types.h>
12015 #include <stdio.h>
12016 int main() {
12017   int q = 12345678901;
12018   printf("%ld\n", q);
12019 }
12020 EOCP
12021         set try
12022         if eval $compile; then
12023                 yyy=`./try$exe_ext`
12024                 case "$yyy" in
12025                 12345678901)
12026                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12027                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12028                         echo "We will use %d."
12029                         ;;
12030                 esac
12031         fi
12032 fi
12033
12034 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12035         $cat >try.c <<'EOCP'
12036 #include <sys/types.h>
12037 #include <stdio.h>
12038 int main() {
12039   long q = 12345678901;
12040   printf("%ld\n", q);
12041 }
12042 EOCP
12043         set try
12044         if eval $compile; then
12045                 yyy=`./try$exe_ext`
12046                 case "$yyy" in
12047                 12345678901)
12048                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12049                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12050                         echo "We will use %ld."
12051                         ;;
12052                 esac
12053         fi
12054 fi
12055
12056 if $test X"$sPRId64" = X -a X"$i_inttypes.h" = X"$define" -a X"$quadtype" = Xint64_t; then
12057         $cat >try.c <<'EOCP'
12058 #include <sys/types.h>
12059 #include <inttypes.h>
12060 #include <stdio.h>
12061 int main() {
12062   int64_t q = 12345678901;
12063   printf("%" PRId64 "\n", q);
12064 }
12065 EOCP
12066         set try
12067         if eval $compile; then
12068                 yyy=`./try$exe_ext`
12069                 case "$yyy" in
12070                 12345678901)
12071                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12072                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12073                         echo "We will use the C9X style."
12074                         ;;
12075                 esac
12076         fi
12077 fi
12078
12079 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12080         $cat >try.c <<'EOCP'
12081 #include <sys/types.h>
12082 #include <stdio.h>
12083 int main() {
12084   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12085   printf("%lld\n", q);
12086 }
12087 EOCP
12088         set try
12089         if eval $compile; then
12090                 yyy=`./try$exe_ext`
12091                 case "$yyy" in
12092                 12345678901)
12093                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12094                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12095                         echo "We will use the %lld style."
12096                         ;;
12097                 esac
12098         fi
12099 fi
12100
12101 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12102         $cat >try.c <<EOCP
12103 #include <sys/types.h>
12104 #include <stdio.h>
12105 int main() {
12106   $quadtype q = 12345678901;
12107   printf("%Ld\n", q);
12108 }
12109 EOCP
12110         set try
12111         if eval $compile; then
12112                 yyy=`./try$exe_ext`
12113                 case "$yyy" in
12114                 12345678901)
12115                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12116                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12117                         echo "We will use %Ld."
12118                         ;;
12119                 esac
12120         fi
12121 fi
12122
12123 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12124         $cat >try.c <<EOCP
12125 #include <sys/types.h>
12126 #include <stdio.h>
12127 int main() {
12128   $quadtype q = 12345678901;
12129   printf("%qd\n", q);
12130 }
12131 EOCP
12132         set try
12133         if eval $compile; then
12134                 yyy=`./try$exe_ext`
12135                 case "$yyy" in
12136                 12345678901)
12137                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12138                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12139                         echo "We will use %qd."
12140                         ;;
12141                 esac
12142         fi
12143 fi
12144
12145 if $test X"$sPRId64" = X; then
12146         echo "Cannot figure out how to print 64-bit integers." >&4
12147 fi
12148
12149 $rm -f try try.*
12150
12151 fi
12152
12153 case "$sPRId64" in
12154 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12155         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12156         ;;
12157 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12158         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12159         ;;
12160 esac
12161
12162
12163 echo " "
12164 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12165
12166 if $test X"$ivsize" = X8; then
12167         ivdformat="$sPRId64"
12168         uvuformat="$sPRIu64"
12169         uvoformat="$sPRIo64"
12170         uvxformat="$sPRIx64"
12171 else
12172         if $test X"$ivsize" = X"$longsize"; then
12173                 ivdformat='"ld"'
12174                 uvuformat='"lu"'
12175                 uvoformat='"lo"'
12176                 uvxformat='"lx"'
12177         else
12178                 if $test X"$ivsize" = X"$intsize"; then
12179                         ivdformat='"d"'
12180                         uvuformat='"u"'
12181                         uvoformat='"o"'
12182                         uvxformat='"x"'
12183                 else
12184                         : far out
12185                         if $test X"$ivsize" = X"$shortsize"; then
12186                                 ivdformat='"hd"'
12187                                 uvuformat='"hu"'
12188                                 uvoformat='"ho"'
12189                                 uvxformat='"hx"'
12190                         fi
12191                 fi
12192         fi
12193 fi
12194
12195 case "$ivdformat" in
12196 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12197     exit 1
12198     ;;
12199 esac
12200
12201
12202 echo " "
12203 $echo "Checking the format string to be used for gids..." >&4
12204
12205 case "$gidsign" in
12206 -1)     if $test X"$gidsize" = X"$ivsize"; then
12207                 gidformat="$ivdformat"
12208         else
12209                 if $test X"$gidsize" = X"$longsize"; then
12210                         gidformat='"ld"'
12211                 else
12212                         if $test X"$gidsize" = X"$intsize"; then
12213                                 gidformat='"d"'
12214                         else
12215                                 if $test X"$gidsize" = X"$shortsize"; then
12216                                         gidformat='"hd"'
12217                                 fi
12218                         fi
12219                 fi
12220         fi
12221         ;;
12222 *)      if $test X"$gidsize" = X"$uvsize"; then
12223                 gidformat="$uvuformat"
12224         else
12225                 if $test X"$gidsize" = X"$longsize"; then
12226                         gidformat='"lu"'
12227                 else
12228                         if $test X"$gidsize" = X"$intsize"; then
12229                                 gidformat='"u"'
12230                         else
12231                                 if $test X"$gidsize" = X"$shortsize"; then
12232                                         gidformat='"hu"'
12233                                 fi
12234                         fi
12235                 fi
12236         fi
12237         ;;
12238 esac
12239
12240 : see if getgroups exists
12241 set getgroups d_getgrps
12242 eval $inlibc
12243
12244 : see if setgroups exists
12245 set setgroups d_setgrps
12246 eval $inlibc
12247
12248
12249 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12250 echo " "
12251 case "$d_getgrps$d_setgrps" in
12252 *define*)
12253         case "$groupstype" in
12254         '') dflt="$gidtype" ;;
12255         *)  dflt="$groupstype" ;;
12256         esac
12257         $cat <<EOM
12258 What type of pointer is the second argument to getgroups() and setgroups()?
12259 Usually this is the same as group ids, $gidtype, but not always.
12260
12261 EOM
12262         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12263         . ./myread
12264         groupstype="$ans"
12265         ;;
12266 *)  groupstype="$gidtype";;
12267 esac
12268
12269 echo " "
12270 echo "Checking if your $make program sets \$(MAKE)..." >&4
12271 case "$make_set_make" in
12272 '')
12273         $sed 's/^X //' > testmake.mak << 'EOF'
12274 Xall:
12275 X       @echo 'maketemp="$(MAKE)"'
12276 EOF
12277         case "`$make -f testmake.mak 2>/dev/null`" in
12278         *maketemp=*) make_set_make='#' ;;
12279         *)      make_set_make="MAKE=$make" ;;
12280         esac
12281         $rm -f testmake.mak
12282         ;;
12283 esac
12284 case "$make_set_make" in
12285 '#') echo "Yup, it does.";;
12286 *) echo "Nope, it doesn't.";;
12287 esac
12288
12289 : see what type is used for mode_t
12290 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12291 set mode_t modetype int stdio.h sys/types.h
12292 eval $typedef_ask
12293
12294 : define a fucntion to check prototypes
12295 $cat > protochk <<EOSH
12296 $startsh
12297 cc="$cc"
12298 optimize="$optimize"
12299 ccflags="$ccflags"
12300 prototype="$prototype"
12301 define="$define"
12302 rm=$rm
12303 EOSH
12304
12305 $cat >> protochk <<'EOSH'
12306
12307 $rm -f try.c
12308 foo="$1"
12309 shift
12310 while test $# -ge 2; do
12311         case "$1" in
12312                 $define) echo "#include <$2>" >> try.c ;;
12313                 literal) echo "$2" >> try.c ;;
12314         esac
12315     shift 2
12316 done
12317 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12318 cat >> try.c <<'EOCP'
12319 #ifdef CAN_PROTOTYPE
12320 #define _(args) args
12321 #else
12322 #define _(args) ()
12323 #endif
12324 EOCP
12325 echo "$foo" >> try.c
12326 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12327 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12328 status=$?
12329 $rm -f try.[co]
12330 exit $status
12331 EOSH
12332 chmod +x protochk
12333 $eunicefix protochk
12334
12335 : see what type is used for size_t
12336 rp="What is the type used for the length parameter for string functions?"
12337 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12338 eval $typedef_ask
12339
12340 : check for type of arguments to gethostbyaddr. 
12341 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12342         case "$d_gethbyaddr" in
12343         $define)
12344                 $cat <<EOM
12345
12346 Checking to see what type of arguments are accepted by gethostbyaddr().
12347 EOM
12348                 hdrs="$define sys/types.h
12349                         $d_socket sys/socket.h 
12350                         $i_niin netinet/in.h 
12351                         $i_netdb netdb.h
12352                         $i_unistd unistd.h"
12353                 : The first arg can 'char *' or 'void *'
12354                 : The second arg is some of integral type
12355                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12356                         for yyy in size_t long int; do
12357                                 case "$netdb_host_type" in
12358                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12359                                         if ./protochk "$try" $hdrs; then
12360                                                 echo "Your system accepts $xxx for the first arg."
12361                                                 echo "...and $yyy for the second arg."
12362                                                 netdb_host_type="$xxx"
12363                                                 netdb_hlen_type="$yyy"
12364                                         fi
12365                                         ;;
12366                                 esac
12367                         done
12368                 done
12369                 : In case none of those worked, prompt the user.
12370                 case "$netdb_host_type" in
12371                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12372                         dflt='char *'
12373                         . ./myread
12374                         netdb_host_type=$ans
12375                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12376                         dflt="$sizetype"
12377                         . ./myread
12378                         netdb_hlen_type=$ans
12379                         ;;
12380                 esac
12381                 ;;
12382         *)      : no gethostbyaddr, so pick harmless defaults
12383                 netdb_host_type='char *'
12384                 netdb_hlen_type="$sizetype"
12385                 ;;
12386         esac
12387         # Remove the "const" if needed. -- but then we'll have a 
12388         # prototype clash!
12389         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12390 fi
12391
12392 : check for type of argument to gethostbyname. 
12393 if test "X$netdb_name_type" = X ; then
12394         case "$d_gethbyname" in
12395         $define)
12396                 $cat <<EOM
12397
12398 Checking to see what type of argument is accepted by gethostbyname().
12399 EOM
12400                 hdrs="$define sys/types.h
12401                         $d_socket sys/socket.h 
12402                         $i_niin netinet/in.h 
12403                         $i_netdb netdb.h
12404                         $i_unistd unistd.h"
12405                 for xxx in "const char *" "char *"; do
12406                         case "$netdb_name_type" in
12407                         '')     try="extern struct hostent *gethostbyname($xxx);"
12408                                 if ./protochk "$try" $hdrs; then
12409                                         echo "Your system accepts $xxx."
12410                                         netdb_name_type="$xxx"
12411                                 fi
12412                                 ;;
12413                         esac
12414                 done
12415                 : In case none of those worked, prompt the user.
12416                 case "$netdb_name_type" in
12417                 '')     rp='What is the type for the 1st argument to gethostbyname?'
12418                         dflt='char *'
12419                         . ./myread
12420                         netdb_name_type=$ans
12421                         ;;
12422                 esac
12423                 ;;
12424         *)      : no gethostbyname, so pick harmless default
12425                 netdb_name_type='char *'
12426                 ;;
12427         esac
12428 fi
12429
12430 : check for type of 1st argument to getnetbyaddr. 
12431 if test "X$netdb_net_type" = X ; then
12432         case "$d_getnbyaddr" in
12433         $define)
12434                 $cat <<EOM
12435
12436 Checking to see what type of 1st argument is accepted by getnetbyaddr().
12437 EOM
12438                 hdrs="$define sys/types.h
12439                         $d_socket sys/socket.h 
12440                         $i_niin netinet/in.h 
12441                         $i_netdb netdb.h
12442                         $i_unistd unistd.h"
12443                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12444                         case "$netdb_net_type" in
12445                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
12446                                 if ./protochk "$try" $hdrs; then
12447                                         echo "Your system accepts $xxx."
12448                                         netdb_net_type="$xxx"
12449                                 fi
12450                                 ;;
12451                         esac
12452                 done
12453                 : In case none of those worked, prompt the user.
12454                 case "$netdb_net_type" in
12455                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
12456                         dflt='long'
12457                         . ./myread
12458                         netdb_net_type=$ans
12459                         ;;
12460                 esac
12461                 ;;
12462         *)      : no getnetbyaddr, so pick harmless default
12463                 netdb_net_type='long'
12464                 ;;
12465         esac
12466 fi
12467 : locate the preferred pager for this system
12468 case "$pager" in
12469 '')
12470         dflt=''
12471         case "$pg" in
12472         /*) dflt=$pg;;
12473         esac
12474         case "$more" in
12475         /*) dflt=$more;;
12476         esac
12477         case "$less" in
12478         /*) dflt=$less;;
12479         esac
12480         case "$dflt" in
12481         '') dflt=/usr/ucb/more;;
12482         esac
12483         ;;
12484 *) dflt="$pager";;
12485 esac
12486 echo " "
12487 fn=f/
12488 rp='What pager is used on your system?'
12489 . ./getfile
12490 pager="$ans"
12491
12492 : see what type pids are declared as in the kernel
12493 rp="What is the type of process ids on this system?"
12494 set pid_t pidtype int stdio.h sys/types.h
12495 eval $typedef_ask
12496
12497 : Find earliest binary compatible site_perl subdirectory perl can use.
12498 case "$bincompat5005" in
12499 "$define") xs_apiversion='5.005' ;;
12500 *) xs_apiversion=$apiversion ;;   # The current site_perl version.
12501 esac
12502 : Find earliest pure perl site_perl subdirectory perl can use.
12503 : The versioned directories started at 5.005.
12504 pm_apiversion='5.005'
12505
12506 : check for length of pointer
12507 echo " "
12508 case "$ptrsize" in
12509 '')
12510         $echo $n "Checking to see how big your pointers are...$c" >&4
12511         if test "$voidflags" -gt 7; then
12512                 echo '#define VOID_PTR char *' > try.c
12513         else
12514                 echo '#define VOID_PTR void *' > try.c
12515         fi
12516         $cat >>try.c <<'EOCP'
12517 #include <stdio.h>
12518 int main()
12519 {
12520         printf("%d\n", sizeof(VOID_PTR));
12521         exit(0);
12522 }
12523 EOCP
12524         set try
12525         if eval $compile_ok; then
12526                 ptrsize=`./try`
12527                 $echo " $ptrsize bytes." >&4
12528         else
12529                 dflt='4'
12530                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
12531                 rp="What is the size of a pointer (in bytes)?"
12532                 . ./myread
12533                 ptrsize="$ans"
12534         fi
12535         ;;
12536 esac
12537 $rm -f try.c try
12538
12539 : see if ar generates random libraries by itself
12540 echo " "
12541 echo "Checking how to generate random libraries on your machine..." >&4
12542 echo 'int bar1() { return bar2(); }' > bar1.c
12543 echo 'int bar2() { return 2; }' > bar2.c
12544 $cat > foo.c <<'EOP'
12545 int main() { printf("%d\n", bar1()); exit(0); }
12546 EOP
12547 $cc $ccflags -c bar1.c >/dev/null 2>&1
12548 $cc $ccflags -c bar2.c >/dev/null 2>&1
12549 $cc $ccflags -c foo.c >/dev/null 2>&1
12550 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12551 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12552         ./foobar >/dev/null 2>&1; then
12553         echo "$ar appears to generate random libraries itself."
12554         orderlib=false
12555         ranlib=":"
12556 elif $ar ts bar$_a >/dev/null 2>&1 &&
12557         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12558         ./foobar >/dev/null 2>&1; then
12559                 echo "a table of contents needs to be added with '$ar ts'."
12560                 orderlib=false
12561                 ranlib="$ar ts"
12562 else
12563         case "$ranlib" in
12564         :) ranlib='';;
12565         '')
12566                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12567                 $test -f $ranlib || ranlib=''
12568                 ;;
12569         esac
12570         if $test -n "$ranlib"; then
12571                 echo "your system has '$ranlib'; we'll use that."
12572                 orderlib=false
12573         else
12574                 echo "your system doesn't seem to support random libraries"
12575                 echo "so we'll use lorder and tsort to order the libraries."
12576                 orderlib=true
12577                 ranlib=":"
12578         fi
12579 fi
12580 $rm -f foo* bar* 
12581
12582 : check for type of arguments to select. 
12583 case "$selecttype" in
12584 '') case "$d_select" in
12585         $define)
12586                 $cat <<EOM
12587 Checking to see what type of arguments are accepted by select().
12588 EOM
12589                 hdrs="$define sys/types.h
12590                         $i_systime sys/time.h 
12591                         $i_sysselct sys/select.h
12592                         $d_socket sys/socket.h"
12593                 : The first arg can be int, unsigned, or size_t
12594                 : The last arg may or may not be 'const'
12595                 val=''
12596                 : void pointer has been seen but using that
12597                 : breaks the selectminbits test
12598                 for xxx in 'fd_set *' 'int *'; do
12599                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12600                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
12601                                         case "$val" in
12602                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12603                                                 if ./protochk "$try" $hdrs; then
12604                                                         echo "Your system accepts $xxx."
12605                                                         val="$xxx"
12606                                                 fi
12607                                                 ;;
12608                                         esac
12609                                 done
12610                         done
12611                 done
12612                 case "$val" in
12613                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12614                         case "$d_fd_set" in
12615                                 $define) dflt="fd_set *" ;;
12616                                 *)              dflt="int *" ;;
12617                         esac
12618                         . ./myread
12619                         val=$ans
12620                         ;;
12621                 esac
12622                 selecttype="$val"
12623                 ;;
12624         *)      : no select, so pick a harmless default
12625                 selecttype='int *'
12626                 ;;
12627         esac
12628         ;;
12629 esac
12630
12631 : check for the select 'width'
12632 case "$selectminbits" in
12633 '') case "$d_select" in
12634         $define)
12635                 $cat <<EOM
12636
12637 Checking to see on how many bits at a time your select() operates...
12638 EOM
12639                 $cat >try.c <<EOCP
12640 #include <sys/types.h>
12641 #$i_time I_TIME
12642 #$i_systime I_SYS_TIME
12643 #$i_systimek I_SYS_TIME_KERNEL
12644 #ifdef I_TIME
12645 #   include <time.h>
12646 #endif
12647 #ifdef I_SYS_TIME
12648 #   ifdef I_SYS_TIME_KERNEL
12649 #       define KERNEL
12650 #   endif
12651 #   include <sys/time.h>
12652 #   ifdef I_SYS_TIME_KERNEL
12653 #       undef KERNEL
12654 #   endif
12655 #endif
12656 #$i_sysselct I_SYS_SELECT
12657 #ifdef I_SYS_SELECT
12658 #include <sys/select.h>
12659 #endif
12660 #$d_socket HAS_SOCKET
12661 #ifdef HAS_SOCKET
12662 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
12663 #endif
12664 #include <stdio.h>
12665 $selecttype b;
12666 #define S sizeof(*(b))
12667 #define MINBITS 64
12668 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
12669 #define NBITS  (NBYTES * 8)
12670 int main() {
12671     char s[NBYTES];
12672     struct timeval t;
12673     int i;
12674     FILE* fp;
12675     int fd;
12676
12677     fclose(stdin);
12678     fp = fopen("try.c", "r");
12679     if (fp == 0)
12680       exit(1);
12681     fd = fileno(fp);
12682     if (fd < 0)
12683       exit(2);
12684     b = ($selecttype)s;
12685     for (i = 0; i < NBITS; i++)
12686         FD_SET(i, b);
12687     t.tv_sec  = 0;
12688     t.tv_usec = 0;
12689     select(fd + 1, b, 0, 0, &t);
12690     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
12691     printf("%d\n", i + 1);
12692     return 0;
12693 }
12694 EOCP
12695                 set try
12696                 if eval $compile_ok; then
12697                         selectminbits=`./try`
12698                         case "$selectminbits" in
12699                         '')     cat >&4 <<EOM
12700 Cannot figure out on how many bits at a time your select() operates.
12701 I'll play safe and guess it is 32 bits.
12702 EOM
12703                                 selectminbits=32
12704                                 bits="32 bits"
12705                                 ;;
12706                         1)      bits="1 bit" ;;
12707                         *)      bits="$selectminbits bits" ;;
12708                         esac
12709                         echo "Your select() operates on $bits at a time." >&4
12710                 else
12711                         rp='What is the minimum number of bits your select() operates on?'
12712                         case "$byteorder" in
12713                         1234|12345678)  dflt=32 ;;
12714                         *)              dflt=1  ;;
12715                         esac
12716                         . ./myread
12717                         val=$ans
12718                         selectminbits="$val"
12719                 fi
12720                 $rm -f try.* try
12721                 ;;
12722         *)      : no select, so pick a harmless default
12723                 selectminbits='32'
12724                 ;;
12725         esac
12726         ;;
12727 esac
12728
12729 : Trace out the files included by signal.h, then look for SIGxxx names.
12730 : Remove SIGARRAYSIZE used by HPUX.
12731 : Remove SIGSTKSIZE used by Linux.
12732 : Remove SIGSTKSZ used by Posix.
12733 : Remove SIGTYP void lines used by OS2.
12734 xxx=`echo '#include <signal.h>' |
12735         $cppstdin $cppminus $cppflags 2>/dev/null |
12736         $grep '^[       ]*#.*include' | 
12737         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
12738 : Check this list of files to be sure we have parsed the cpp output ok.
12739 : This will also avoid potentially non-existent files, such 
12740 : as ../foo/bar.h
12741 xxxfiles=''
12742 for xx in $xxx /dev/null ; do
12743         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
12744 done
12745 : If we have found no files, at least try signal.h
12746 case "$xxxfiles" in
12747 '')     xxxfiles=`./findhdr signal.h` ;;
12748 esac
12749 xxx=`awk '
12750 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
12751         print substr($2, 4, 20)
12752 }
12753 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
12754         print substr($3, 4, 20)
12755 }' $xxxfiles`
12756 : Append some common names just in case the awk scan failed.
12757 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
12758 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
12759 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
12760 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
12761 : generate a few handy files for later
12762 $cat > signal.c <<'EOCP'
12763 #include <sys/types.h>
12764 #include <signal.h>
12765 #include <stdio.h>
12766 int main() {
12767
12768 /* Strange style to avoid deeply-nested #if/#else/#endif */
12769 #ifndef NSIG
12770 #  ifdef _NSIG
12771 #    define NSIG (_NSIG)
12772 #  endif
12773 #endif
12774
12775 #ifndef NSIG
12776 #  ifdef SIGMAX
12777 #    define NSIG (SIGMAX+1)
12778 #  endif
12779 #endif
12780
12781 #ifndef NSIG
12782 #  ifdef SIG_MAX
12783 #    define NSIG (SIG_MAX+1)
12784 #  endif
12785 #endif
12786
12787 #ifndef NSIG
12788 #  ifdef MAXSIG
12789 #    define NSIG (MAXSIG+1)
12790 #  endif
12791 #endif
12792
12793 #ifndef NSIG
12794 #  ifdef MAX_SIG
12795 #    define NSIG (MAX_SIG+1)
12796 #  endif
12797 #endif
12798
12799 #ifndef NSIG
12800 #  ifdef SIGARRAYSIZE
12801 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
12802 #  endif
12803 #endif
12804
12805 #ifndef NSIG
12806 #  ifdef _sys_nsig
12807 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
12808 #  endif
12809 #endif
12810
12811 /* Default to some arbitrary number that's big enough to get most
12812    of the common signals.
12813 */
12814 #ifndef NSIG
12815 #    define NSIG 50
12816 #endif
12817
12818 printf("NSIG %d\n", NSIG);
12819
12820 #ifndef JUST_NSIG
12821
12822 EOCP
12823
12824 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
12825 {
12826         printf "#ifdef SIG"; printf $1; printf "\n"
12827         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
12828         printf $1; printf ");\n"
12829         printf "#endif\n"
12830 }
12831 END {
12832         printf "#endif /* JUST_NSIG */\n";
12833         printf "}\n";
12834 }
12835 ' >>signal.c
12836 $cat >signal.awk <<'EOP'
12837 BEGIN { ndups = 0 }
12838 $1 ~ /^NSIG$/ { nsig = $2 }
12839 ($1 !~ /^NSIG$/) && (NF == 2) {
12840     if ($2 > maxsig) { maxsig = $2 }
12841     if (sig_name[$2]) {
12842         dup_name[ndups] = $1
12843         dup_num[ndups] = $2
12844         ndups++ 
12845     }
12846     else {
12847         sig_name[$2] = $1
12848         sig_num[$2] = $2
12849     }
12850 }
12851 END { 
12852     if (nsig == 0) {
12853         nsig = maxsig + 1
12854     }
12855     printf("NSIG %d\n", nsig);
12856     for (n = 1; n < nsig; n++) {
12857         if (sig_name[n]) {
12858             printf("%s %d\n", sig_name[n], sig_num[n])
12859         }
12860         else {
12861             printf("NUM%d %d\n", n, n) 
12862         }
12863     }
12864     for (n = 0; n < ndups; n++) {
12865         printf("%s %d\n", dup_name[n], dup_num[n])
12866     }
12867 }
12868 EOP
12869 $cat >signal_cmd <<EOS
12870 $startsh
12871 if $test -s signal.lst; then
12872     echo "Using your existing signal.lst file"
12873         exit 0
12874 fi
12875 xxx="$xxx"
12876 EOS
12877 $cat >>signal_cmd <<'EOS'
12878
12879 set signal
12880 if eval $compile_ok; then
12881         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12882 else
12883         echo "(I can't seem be able to compile the whole test program)" >&4
12884         echo "(I'll try it in little pieces.)" >&4
12885         set signal -DJUST_NSIG
12886         if eval $compile_ok; then
12887                 ./signal$_exe > signal.nsg
12888                 $cat signal.nsg
12889         else
12890                 echo "I can't seem to figure out how many signals you have." >&4
12891                 echo "Guessing 50." >&4
12892                 echo 'NSIG 50' > signal.nsg
12893         fi
12894         : Now look at all the signal names, one at a time.
12895         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12896                 $cat > signal.c <<EOCP
12897 #include <sys/types.h>
12898 #include <signal.h>
12899 #include <stdio.h>
12900 int main() {
12901 printf("$xx %d\n", SIG${xx});
12902 return 0;
12903 }
12904 EOCP
12905                 set signal
12906                 if eval $compile; then
12907                         echo "SIG${xx} found."
12908                         ./signal$_exe  >> signal.ls1
12909                 else
12910                         echo "SIG${xx} NOT found."
12911                 fi
12912         done
12913         if $test -s signal.ls1; then
12914                 $cat signal.nsg signal.ls1 |
12915                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12916         fi
12917
12918 fi
12919 if $test -s signal.lst; then
12920         :
12921 else
12922         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12923         echo 'kill -l' >signal
12924         set X `csh -f <signal`
12925         $rm -f signal
12926         shift
12927         case $# in
12928         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12929         esac
12930         echo $@ | $tr ' ' $trnl | \
12931             $awk '{ printf "%s %d\n", $1, ++s; }
12932                   END { printf "NSIG %d\n", ++s }' >signal.lst
12933 fi
12934 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12935 EOS
12936 chmod a+x signal_cmd
12937 $eunicefix signal_cmd
12938
12939 : generate list of signal names
12940 echo " "
12941 case "$sig_name_init" in
12942 '') doinit=yes ;;
12943 *)  case "$sig_num_init" in
12944     ''|*,*) doinit=yes ;;
12945     esac ;;
12946 esac
12947 case "$doinit" in
12948 yes)
12949         echo "Generating a list of signal names and numbers..." >&4
12950         . ./signal_cmd
12951         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12952         sig_name=`$awk 'BEGIN { printf "ZERO " }
12953                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12954         sig_num=`$awk  'BEGIN { printf "0 " }
12955                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12956         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12957                              !/^NSIG/   { printf "\"%s\", ", $1 }
12958                              END        { printf "0\n" }' signal.lst`
12959         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12960                              !/^NSIG/   { printf "%d, ", $2}
12961                              END        { printf "0\n"}' signal.lst`
12962         ;;
12963 esac
12964 echo "The following $sig_count signals are available:"
12965 echo " "
12966 echo $sig_name | $awk \
12967 'BEGIN { linelen = 0 }
12968 {
12969         for (i = 1; i <= NF; i++) {
12970                 name = "SIG" $i " "
12971                 linelen = linelen + length(name)
12972                 if (linelen > 70) {
12973                         printf "\n"
12974                         linelen = length(name)
12975                 }
12976                 printf "%s", name
12977         }
12978         printf "\n"
12979 }'
12980 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12981
12982 : see what type is used for signed size_t
12983 set ssize_t ssizetype int stdio.h sys/types.h
12984 eval $typedef
12985 dflt="$ssizetype"
12986 $cat > ssize.c <<EOM
12987 #include <stdio.h>
12988 #include <sys/types.h>
12989 #define Size_t $sizetype
12990 #define SSize_t $dflt
12991 int main()
12992 {
12993         if (sizeof(Size_t) == sizeof(SSize_t))
12994                 printf("$dflt\n");
12995         else if (sizeof(Size_t) == sizeof(int))
12996                 printf("int\n");
12997         else 
12998                 printf("long\n");
12999         exit(0);
13000 }
13001 EOM
13002 echo " "
13003 set ssize
13004 if eval $compile_ok && ./ssize > /dev/null; then
13005         ssizetype=`./ssize`
13006         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13007 else
13008         $cat >&4 <<EOM
13009 Help! I can't compile and run the ssize_t test program: please enlighten me!
13010 (This is probably a misconfiguration in your system or libraries, and
13011 you really ought to fix it.  Still, I'll try anyway.)
13012
13013 I need a type that is the same size as $sizetype, but is guaranteed to
13014 be signed.  Common values are ssize_t, int and long.
13015
13016 EOM
13017         rp="What signed type is the same size as $sizetype?"
13018         . ./myread
13019         ssizetype="$ans"
13020 fi
13021 $rm -f ssize ssize.*
13022
13023 : see what type of char stdio uses.
13024 echo " "
13025 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13026         echo "Your stdio uses unsigned chars." >&4
13027         stdchar="unsigned char"
13028 else
13029         echo "Your stdio uses signed chars." >&4
13030         stdchar="char"
13031 fi
13032
13033 : see if time exists
13034 echo " "
13035 if test "X$d_time" = X -o X"$timetype" = X; then
13036     if set time val -f d_time; eval $csym; $val; then
13037                 echo 'time() found.' >&4
13038                 val="$define"
13039                 rp="What is the type returned by time() on this system?"
13040                 set time_t timetype long stdio.h sys/types.h
13041                 eval $typedef_ask
13042     else
13043                 echo 'time() not found, hope that will do.' >&4
13044                 val="$undef"
13045                 timetype='int';
13046     fi
13047     set d_time
13048     eval $setvar
13049 fi
13050
13051 : see what type uids are declared as in the kernel
13052 echo " "
13053 echo "Looking for the type for user ids returned by getuid()."
13054 set uid_t uidtype xxx stdio.h sys/types.h
13055 eval $typedef
13056 case "$uidtype" in
13057 xxx)
13058         xxx=`./findhdr sys/user.h`
13059         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13060         case $1 in
13061         unsigned) dflt="$1 $2" ;;
13062         *) dflt="$1" ;;
13063         esac
13064         ;;
13065 *) dflt="$uidtype";;
13066 esac
13067 case "$uidtype" in
13068 uid_t)  echo "uid_t found." ;;
13069 *)      rp="What is the type for user ids returned by getuid()?"
13070         . ./myread
13071         uidtype="$ans"
13072         ;;
13073 esac
13074
13075 echo " "
13076 case "$uidtype" in
13077 *_t) zzz="$uidtype"     ;;
13078 *)   zzz="uid"          ;;
13079 esac
13080 echo "Checking the size of $zzz..." >&4 
13081 cat > try.c <<EOCP
13082 #include <sys/types.h>
13083 #include <stdio.h>
13084 int main() {
13085     printf("%d\n", sizeof($uidtype));
13086 }
13087 EOCP
13088 set try
13089 if eval $compile_ok; then
13090         yyy=`./try`
13091         case "$yyy" in
13092         '')     uidsize=4
13093                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13094                 ;;
13095         *)      uidsize=$yyy
13096                 echo "Your $zzz size is $uidsize bytes."
13097                 ;;
13098         esac
13099 else
13100         uidsize=4
13101         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13102 fi
13103
13104 echo " "
13105 case "$uidtype" in
13106 *_t) zzz="$uidtype"     ;;
13107 *)   zzz="uid"          ;;
13108 esac
13109 echo "Checking the sign of $zzz..." >&4
13110 cat > try.c <<EOCP
13111 #include <sys/types.h>
13112 #include <stdio.h>
13113 int main() {
13114         $uidtype foo = -1;
13115         if (foo < 0)
13116                 printf("-1\n");
13117         else
13118                 printf("1\n");
13119 }
13120 EOCP
13121 set try
13122 if eval $compile; then
13123         yyy=`./try`
13124         case "$yyy" in
13125         '')     uidsign=1
13126                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13127                 ;;
13128         *)      uidsign=$yyy
13129                 case "$uidsign" in
13130                  1) echo "Your $zzz is unsigned." ;;
13131                 -1) echo "Your $zzz is signed."   ;;
13132                 esac
13133                 ;;
13134         esac
13135 else
13136         uidsign=1
13137         echo "(I can't compile the test program--guessing unsigned.)" >&4
13138 fi
13139
13140
13141
13142 echo " "
13143 $echo "Checking the format string to be used for uids..." >&4
13144
13145 case "$uidsign" in
13146 -1)     if $test X"$uidsize" = X"$ivsize"; then
13147                 uidformat="$ivdformat"
13148         else
13149                 if $test X"$uidsize" = X"$longsize"; then
13150                         uidformat='"ld"'
13151                 else
13152                         if $test X"$uidsize" = X"$intsize"; then
13153                                 uidformat='"d"'
13154                         else
13155                                 if $test X"$uidsize" = X"$shortsize"; then
13156                                         uidformat='"hd"'
13157                                 fi
13158                         fi
13159                 fi
13160         fi
13161         ;;
13162 *)      if $test X"$uidsize" = X"$uvsize"; then
13163                 uidformat="$uvuformat"
13164         else
13165                 if $test X"$uidsize" = X"$longsize"; then
13166                         uidformat='"lu"'
13167                 else
13168                         if $test X"$uidsize" = X"$intsize"; then
13169                                 uidformat='"u"'
13170                         else
13171                                 if $test X"$uidsize" = X"$shortsize"; then
13172                                         uidformat='"hu"'
13173                                 fi
13174                         fi
13175                 fi
13176         fi
13177         ;;
13178 esac
13179
13180 : see if dbm.h is available
13181 : see if dbmclose exists
13182 set dbmclose d_dbmclose
13183 eval $inlibc
13184
13185 case "$d_dbmclose" in
13186 $define)
13187         set dbm.h i_dbm
13188         eval $inhdr
13189         case "$i_dbm" in
13190         $define)
13191                 val="$undef"
13192                 set i_rpcsvcdbm
13193                 eval $setvar
13194                 ;;
13195         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13196                 eval $inhdr
13197                 ;;
13198         esac
13199         ;;
13200 *)      echo "We won't be including <dbm.h>"
13201         val="$undef"
13202         set i_dbm
13203         eval $setvar
13204         val="$undef"
13205         set i_rpcsvcdbm
13206         eval $setvar
13207         ;;
13208 esac
13209
13210 : see if this is a sys/file.h system
13211 val=''
13212 set sys/file.h val
13213 eval $inhdr
13214
13215 : do we need to include sys/file.h ?
13216 case "$val" in
13217 "$define")
13218         echo " "
13219         if $h_sysfile; then
13220                 val="$define"
13221                 echo "We'll be including <sys/file.h>." >&4
13222         else
13223                 val="$undef"
13224                 echo "We won't be including <sys/file.h>." >&4
13225         fi
13226         ;;
13227 *)
13228         h_sysfile=false
13229         ;;
13230 esac
13231 set i_sysfile
13232 eval $setvar
13233
13234 : see if fcntl.h is there
13235 val=''
13236 set fcntl.h val
13237 eval $inhdr
13238
13239 : see if we can include fcntl.h
13240 case "$val" in
13241 "$define")
13242         echo " "
13243         if $h_fcntl; then
13244                 val="$define"
13245                 echo "We'll be including <fcntl.h>." >&4
13246         else
13247                 val="$undef"
13248                 if $h_sysfile; then
13249         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13250                 else
13251                         echo "We won't be including <fcntl.h>." >&4
13252                 fi
13253         fi
13254         ;;
13255 *)
13256         h_fcntl=false
13257         val="$undef"
13258         ;;
13259 esac
13260 set i_fcntl
13261 eval $setvar
13262
13263 : see if locale.h is available
13264 set locale.h i_locale
13265 eval $inhdr
13266
13267 : see if mach cthreads are available
13268 if test "X$usethreads" = "X$define"; then
13269         set mach/cthreads.h i_machcthr
13270         eval $inhdr
13271 else
13272         i_machcthr="$undef"
13273 fi
13274
13275
13276
13277 : see if this is a math.h system
13278 set math.h i_math
13279 eval $inhdr
13280
13281 : see if this is a mntent.h system
13282 set mntent.h i_mntent
13283 eval $inhdr
13284
13285 : see if ndbm.h is available
13286 set ndbm.h t_ndbm
13287 eval $inhdr
13288 case "$t_ndbm" in
13289 $define)
13290         : see if dbm_open exists
13291         set dbm_open d_dbm_open
13292         eval $inlibc
13293         case "$d_dbm_open" in
13294         $undef)
13295                 t_ndbm="$undef"
13296                 echo "We won't be including <ndbm.h>"
13297                 ;;
13298         esac
13299         ;;
13300 esac
13301 val="$t_ndbm"
13302 set i_ndbm
13303 eval $setvar
13304
13305 : see if net/errno.h is available
13306 val=''
13307 set net/errno.h val
13308 eval $inhdr
13309
13310 : Unfortunately, it causes problems on some systems.  Arrgh.
13311 case "$val" in
13312 $define)
13313         cat > try.c <<'EOM'
13314 #include <stdio.h>
13315 #include <errno.h>
13316 #include <net/errno.h>
13317 int func()
13318 {
13319         return ENOTSOCK;
13320 }
13321 EOM
13322         if $cc $ccflags -c try.c >/dev/null 2>&1; then
13323                 echo "We'll be including <net/errno.h>." >&4
13324         else
13325                 echo "We won't be including <net/errno.h>." >&4
13326                 val="$undef"
13327         fi
13328         $rm -f try.* try
13329         ;;
13330 esac
13331 set i_neterrno
13332 eval $setvar
13333
13334 : see if netinet/tcp.h is available
13335 set netinet/tcp.h i_netinettcp
13336 eval $inhdr
13337
13338 : see if this is a poll.h system
13339 set poll.h i_poll
13340 eval $inhdr
13341
13342 : get C preprocessor symbols handy
13343 echo " "
13344 $echo $n "Hmm... $c"
13345 echo $al | $tr ' ' $trnl >Cppsym.know
13346 $cat <<EOSS >Cppsym
13347 $startsh
13348 case "\$1" in
13349 -l) list=true
13350         shift
13351         ;;
13352 esac
13353 unknown=''
13354 case "\$list\$#" in
13355 1|2)
13356         for sym do
13357                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
13358                         exit 0
13359                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
13360                         :
13361                 else
13362                         unknown="\$unknown \$sym"
13363                 fi
13364         done
13365         set X \$unknown
13366         shift
13367         ;;
13368 esac
13369 case \$# in
13370 0) exit 1;;
13371 esac
13372 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
13373 #ifdef \1\\
13374 exit 0; _ _ _ _\1\\      \1\\
13375 #endif\\
13376 /' >Cppsym\$\$
13377 echo "exit 1; _ _ _" >>Cppsym\$\$
13378 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
13379 case "\$list" in
13380 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
13381 *)
13382         sh Cppsym2\$\$
13383         status=\$?
13384         ;;
13385 esac
13386 $rm -f Cppsym\$\$ Cppsym2\$\$
13387 exit \$status
13388 EOSS
13389 chmod +x Cppsym
13390 $eunicefix Cppsym
13391 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
13392
13393 : now check the C compiler for additional symbols
13394 postprocess_cc_v=''
13395 case "$osname" in
13396 aix) postprocess_cc_v="|$tr , ' '" ;;
13397 esac
13398 $cat >ccsym <<EOS
13399 $startsh
13400 $cat >tmp.c <<EOF
13401 extern int foo;
13402 EOF
13403 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
13404 do
13405         case "\$i" in
13406         -D*) echo "\$i" | $sed 's/^-D//';;
13407         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
13408         esac
13409 done
13410 $rm -f try.c
13411 EOS
13412 postprocess_cc_v=''
13413 chmod +x ccsym
13414 $eunicefix ccsym
13415 ./ccsym > ccsym1.raw
13416 if $test -s ccsym1.raw; then
13417        $sort ccsym1.raw | $uniq >ccsym.raw
13418 else
13419        mv ccsym1.raw ccsym.raw
13420 fi
13421
13422 $awk '/\=/ { print $0; next }
13423         { print $0"=1" }' ccsym.raw >ccsym.list
13424 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
13425 $comm -13 ccsym.true ccsym.list >ccsym.own
13426 $comm -12 ccsym.true ccsym.list >ccsym.com
13427 $comm -23 ccsym.true ccsym.list >ccsym.cpp
13428 also=''
13429 if $test -z ccsym.raw; then
13430         echo "Your C compiler doesn't seem to define any symbols!" >&4
13431         echo " "
13432         echo "However, your C preprocessor defines the following symbols:"
13433         $cat Cppsym.true
13434         ccsymbols=''
13435         cppsymbols=`$cat Cppsym.true`
13436         cppsymbols=`echo $cppsymbols`
13437         cppccsymbols="$cppsymbols"
13438 else
13439         if $test -s ccsym.com; then
13440                 echo "Your C compiler and pre-processor define these symbols:"
13441                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
13442                 also='also '
13443                 symbols='ones'
13444                 cppccsymbols=`$cat ccsym.com`
13445                 cppccsymbols=`echo $cppccsymbols`
13446                 $test "$silent" || sleep 1
13447         fi
13448         if $test -s ccsym.cpp; then
13449                 $test "$also" && echo " "
13450                 echo "Your C pre-processor ${also}defines the following symbols:"
13451                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
13452                 also='further '
13453                 cppsymbols=`$cat ccsym.cpp`
13454                 cppsymbols=`echo $cppsymbols`
13455                 $test "$silent" || sleep 1
13456         fi
13457         if $test -s ccsym.own; then
13458                 $test "$also" && echo " "
13459                 echo "Your C compiler ${also}defines the following cpp symbols:"
13460                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
13461                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
13462                 ccsymbols=`$cat ccsym.own`
13463                 ccsymbols=`echo $ccsymbols`
13464                 $test "$silent" || sleep 1
13465         fi
13466 fi
13467 $rm -f ccsym*
13468
13469 : see if this is a termio system
13470 val="$undef"
13471 val2="$undef"
13472 val3="$undef"
13473 if $test `./findhdr termios.h`; then
13474         set tcsetattr i_termios
13475         eval $inlibc
13476         val3="$i_termios"
13477 fi
13478 echo " "
13479 case "$val3" in
13480 "$define") echo "You have POSIX termios.h... good!" >&4;;
13481 *) if ./Cppsym pyr; then
13482                 case "`/bin/universe`" in
13483                 ucb) if $test `./findhdr sgtty.h`; then
13484                                 val2="$define"
13485                                 echo "<sgtty.h> found." >&4
13486                         else
13487                                 echo "System is pyramid with BSD universe."
13488                                 echo "<sgtty.h> not found--you could have problems." >&4
13489                         fi;;
13490                 *) if $test `./findhdr termio.h`; then
13491                                 val="$define"
13492                                 echo "<termio.h> found." >&4
13493                         else
13494                                 echo "System is pyramid with USG universe."
13495                                 echo "<termio.h> not found--you could have problems." >&4
13496                         fi;;
13497                 esac
13498         elif ./usg; then
13499                 if $test `./findhdr termio.h`; then
13500                         echo "<termio.h> found." >&4
13501                         val="$define"
13502                 elif $test `./findhdr sgtty.h`; then
13503                         echo "<sgtty.h> found." >&4
13504                         val2="$define"
13505                 else
13506 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
13507                 fi
13508         else
13509                 if $test `./findhdr sgtty.h`; then
13510                         echo "<sgtty.h> found." >&4
13511                         val2="$define"
13512                 elif $test `./findhdr termio.h`; then
13513                         echo "<termio.h> found." >&4
13514                         val="$define"
13515                 else
13516 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
13517                 fi
13518         fi;;
13519 esac
13520 set i_termio; eval $setvar
13521 val=$val2; set i_sgtty; eval $setvar
13522 val=$val3; set i_termios; eval $setvar
13523
13524 : see if this is a shadow.h system
13525 set shadow.h i_shadow
13526 eval $inhdr
13527
13528 : see if this is a socks.h system
13529 set socks.h i_socks
13530 eval $inhdr
13531
13532 : see if stdarg is available
13533 echo " "
13534 if $test `./findhdr stdarg.h`; then
13535         echo "<stdarg.h> found." >&4
13536         valstd="$define"
13537 else
13538         echo "<stdarg.h> NOT found." >&4
13539         valstd="$undef"
13540 fi
13541
13542 : see if varags is available
13543 echo " "
13544 if $test `./findhdr varargs.h`; then
13545         echo "<varargs.h> found." >&4
13546 else
13547         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13548 fi
13549
13550 : set up the varargs testing programs
13551 $cat > varargs.c <<EOP
13552 #ifdef I_STDARG
13553 #include <stdarg.h>
13554 #endif
13555 #ifdef I_VARARGS
13556 #include <varargs.h>
13557 #endif
13558
13559 #ifdef I_STDARG
13560 int f(char *p, ...)
13561 #else
13562 int f(va_alist)
13563 va_dcl
13564 #endif
13565 {
13566         va_list ap;
13567 #ifndef I_STDARG
13568         char *p;
13569 #endif
13570 #ifdef I_STDARG
13571         va_start(ap,p);
13572 #else
13573         va_start(ap);
13574         p = va_arg(ap, char *);
13575 #endif
13576         va_end(ap);
13577 }
13578 EOP
13579 $cat > varargs <<EOP
13580 $startsh
13581 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13582         echo "true"
13583 else
13584         echo "false"
13585 fi
13586 $rm -f varargs$_o
13587 EOP
13588 chmod +x varargs
13589
13590 : now check which varargs header should be included
13591 echo " "
13592 i_varhdr=''
13593 case "$valstd" in
13594 "$define")
13595         if `./varargs I_STDARG`; then
13596                 val='stdarg.h'
13597         elif `./varargs I_VARARGS`; then
13598                 val='varargs.h'
13599         fi
13600         ;;
13601 *)
13602         if `./varargs I_VARARGS`; then
13603                 val='varargs.h'
13604         fi
13605         ;;
13606 esac
13607 case "$val" in
13608 '')
13609 echo "I could not find the definition for va_dcl... You have problems..." >&4
13610         val="$undef"; set i_stdarg; eval $setvar
13611         val="$undef"; set i_varargs; eval $setvar
13612         ;;
13613 *) 
13614         set i_varhdr
13615         eval $setvar
13616         case "$i_varhdr" in
13617         stdarg.h)
13618                 val="$define"; set i_stdarg; eval $setvar
13619                 val="$undef"; set i_varargs; eval $setvar
13620                 ;;
13621         varargs.h)
13622                 val="$undef"; set i_stdarg; eval $setvar
13623                 val="$define"; set i_varargs; eval $setvar
13624                 ;;
13625         esac
13626         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13627 esac
13628 $rm -f varargs*
13629
13630 : see if stddef is available
13631 set stddef.h i_stddef
13632 eval $inhdr
13633
13634 : see if sys/access.h is available
13635 set sys/access.h i_sysaccess
13636 eval $inhdr
13637
13638 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
13639 set sys/filio.h i_sysfilio
13640 eval $inhdr
13641 echo " "
13642 if $test `./findhdr sys/ioctl.h`; then
13643         val="$define"
13644         echo '<sys/ioctl.h> found.' >&4
13645 else
13646         val="$undef"
13647         if $test $i_sysfilio = "$define"; then
13648             echo '<sys/ioctl.h> NOT found.' >&4
13649         else
13650                 $test $i_sgtty = "$define" && xxx="sgtty.h"
13651                 $test $i_termio = "$define" && xxx="termio.h"
13652                 $test $i_termios = "$define" && xxx="termios.h"
13653 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
13654         fi
13655 fi
13656 set i_sysioctl
13657 eval $setvar
13658
13659 : see if sys/resource.h has to be included
13660 set sys/resource.h i_sysresrc
13661 eval $inhdr
13662
13663 : see if sys/security.h is available
13664 set sys/security.h i_syssecrt
13665 eval $inhdr
13666
13667 : see if this is a sys/statvfs.h system
13668 set sys/statvfs.h i_sysstatvfs
13669 eval $inhdr
13670
13671 : see if this is a sys/uio.h system
13672 set sys/uio.h i_sysuio
13673 eval $inhdr
13674
13675 : see if this is a sys/un.h system
13676 set sys/un.h i_sysun
13677 eval $inhdr
13678
13679 : see if this is a syswait system
13680 set sys/wait.h i_syswait
13681 eval $inhdr
13682
13683 : see if this is a ustat.h system
13684 set ustat.h i_ustat
13685 eval $inhdr
13686
13687 : see if this is an utime system
13688 set utime.h i_utime
13689 eval $inhdr
13690
13691 : see if this is a values.h system
13692 set values.h i_values
13693 eval $inhdr
13694
13695 : see if this is a vfork system
13696 case "$d_vfork" in
13697 "$define")
13698         set vfork.h i_vfork
13699         eval $inhdr
13700         ;;
13701 *)
13702         i_vfork="$undef"
13703         ;;
13704 esac
13705
13706 : see if gdbm.h is available
13707 set gdbm.h t_gdbm
13708 eval $inhdr
13709 case "$t_gdbm" in
13710 $define)
13711         : see if gdbm_open exists
13712         set gdbm_open d_gdbm_open
13713         eval $inlibc
13714         case "$d_gdbm_open" in
13715         $undef)
13716                 t_gdbm="$undef"
13717                 echo "We won't be including <gdbm.h>"
13718                 ;;
13719         esac
13720         ;;
13721 esac
13722 val="$t_gdbm"
13723 set i_gdbm
13724 eval $setvar
13725
13726 echo " "
13727 echo "Looking for extensions..." >&4
13728 : If we are using the old config.sh, known_extensions may contain
13729 : old or inaccurate or duplicate values.
13730 known_extensions=''
13731 nonxs_extensions=''
13732 : We do not use find because it might not be available.
13733 : We do not just use MANIFEST because the user may have dropped
13734 : some additional extensions into the source tree and expect them
13735 : to be built.
13736
13737 : Function to recursively find available extensions, ignoring DynaLoader
13738 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
13739 find_extensions='
13740     for xxx in *; do
13741        case "$xxx" in
13742            DynaLoader|dynaload) ;;
13743            *)
13744            if $test -f $xxx/$xxx.xs; then
13745                known_extensions="$known_extensions $1$xxx";
13746            elif $test -f $xxx/Makefile.PL; then
13747                nonxs_extensions="$nonxs_extensions $1$xxx";
13748            else
13749                if $test -d $xxx -a $# -lt 10; then
13750                    set $1$xxx/ $*;
13751                    cd $xxx;
13752                    eval $find_extensions;
13753                    cd ..;
13754                    shift;
13755                fi;
13756            fi
13757            ;;
13758        esac;
13759     done'
13760 tdir=`pwd`
13761 cd $rsrc/ext
13762 set X
13763 shift
13764 eval $find_extensions
13765 set X $nonxs_extensions
13766 shift
13767 nonxs_extensions="$*"
13768 set X $known_extensions
13769 shift
13770 known_extensions="$*"
13771 cd $tdir
13772
13773 : Now see which are supported on this system.
13774 avail_ext=''
13775 for xxx in $known_extensions ; do
13776         case "$xxx" in
13777         DB_File|db_file)
13778                 case "$i_db" in
13779                 $define) avail_ext="$avail_ext $xxx" ;;
13780                 esac
13781                 ;;
13782         GDBM_File|gdbm_fil)
13783                 case "$i_gdbm" in 
13784                 $define) avail_ext="$avail_ext $xxx" ;;
13785                 esac
13786                 ;;
13787         NDBM_File|ndbm_fil)
13788                 case "$i_ndbm" in
13789                 $define) avail_ext="$avail_ext $xxx" ;;
13790                 esac
13791                 ;;
13792         ODBM_File|odbm_fil) 
13793                 case "${i_dbm}${i_rpcsvcdbm}" in
13794                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13795                 esac
13796                 ;;
13797         POSIX|posix)
13798                 case "$useposix" in
13799                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13800                 esac
13801                 ;;
13802         Opcode|opcode)
13803                 case "$useopcode" in
13804                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13805                 esac
13806                 ;;
13807         Socket|socket)
13808                 case "$d_socket" in 
13809                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13810                 esac
13811                 ;;
13812         Thread|thread)
13813                 case "$usethreads" in 
13814                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13815                 esac
13816                 ;;
13817         IPC/SysV|ipc/sysv)
13818                 : XXX Do we need a useipcsysv variable here
13819                 case "${d_msg}${d_sem}${d_shm}" in 
13820                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13821                 esac
13822                 ;;
13823         *)      avail_ext="$avail_ext $xxx"
13824                 ;;
13825         esac
13826 done
13827
13828 set X $avail_ext
13829 shift
13830 avail_ext="$*"
13831
13832 : Now see which nonxs extensions are supported on this system.
13833 : For now assume all are.
13834 nonxs_ext=''
13835 for xxx in $nonxs_extensions ; do
13836         case "$xxx" in
13837         *)      nonxs_ext="$nonxs_ext $xxx"
13838                 ;;
13839         esac
13840 done
13841
13842 set X $nonxs_ext
13843 shift
13844 nonxs_ext="$*"
13845
13846 case $usedl in
13847 $define)
13848         $cat <<EOM
13849 A number of extensions are supplied with $package.  You may choose to
13850 compile these extensions for dynamic loading (the default), compile
13851 them into the $package executable (static loading), or not include
13852 them at all.  Answer "none" to include no extensions.
13853 Note that DynaLoader is always built and need not be mentioned here.
13854
13855 EOM
13856         case "$dynamic_ext" in
13857         '') dflt="$avail_ext" ;;
13858         *)      dflt="$dynamic_ext"
13859                 # Perhaps we are reusing an old out-of-date config.sh.
13860                 case "$hint" in
13861                 previous)
13862                         if test X"$dynamic_ext" != X"$avail_ext"; then
13863                                 $cat <<EOM
13864 NOTICE:  Your previous config.sh list may be incorrect. 
13865 The extensions now available to you are 
13866         ${avail_ext}
13867 but the default list from your previous config.sh is
13868         ${dynamic_ext} 
13869
13870 EOM
13871                         fi
13872                         ;;
13873                 esac
13874                 ;;
13875         esac
13876         case "$dflt" in
13877         '')     dflt=none;;
13878         esac
13879         rp="What extensions do you wish to load dynamically?"
13880         . ./myread
13881         case "$ans" in
13882         none) dynamic_ext=' ' ;;
13883         *) dynamic_ext="$ans" ;;
13884         esac
13885
13886         case "$static_ext" in
13887         '')
13888                 : Exclude those already listed in dynamic linking
13889                 dflt=''
13890                 for xxx in $avail_ext; do
13891                         case " $dynamic_ext " in
13892                         *" $xxx "*) ;;
13893                         *) dflt="$dflt $xxx" ;;
13894                         esac
13895                 done
13896                 set X $dflt
13897                 shift
13898                 dflt="$*"
13899                 ;;
13900         *)  dflt="$static_ext" 
13901                 ;;
13902         esac
13903
13904         case "$dflt" in
13905         '')     dflt=none;;
13906         esac
13907         rp="What extensions do you wish to load statically?"
13908         . ./myread
13909         case "$ans" in
13910         none) static_ext=' ' ;;
13911         *) static_ext="$ans" ;;
13912         esac
13913         ;;
13914 *)
13915         $cat <<EOM
13916 A number of extensions are supplied with $package.  Answer "none" 
13917 to include no extensions. 
13918 Note that DynaLoader is always built and need not be mentioned here.
13919
13920 EOM
13921         case "$static_ext" in
13922         '') dflt="$avail_ext" ;;
13923         *)      dflt="$static_ext"
13924                 # Perhaps we are reusing an old out-of-date config.sh.
13925                 case "$hint" in
13926                 previous)
13927                         if test X"$static_ext" != X"$avail_ext"; then
13928                                 $cat <<EOM
13929 NOTICE:  Your previous config.sh list may be incorrect. 
13930 The extensions now available to you are 
13931         ${avail_ext}
13932 but the default list from your previous config.sh is
13933         ${static_ext} 
13934
13935 EOM
13936                         fi
13937                         ;;
13938                 esac
13939                 ;;
13940         esac
13941         : Exclude those that are not xs extensions
13942         case "$dflt" in
13943         '')     dflt=none;;
13944         esac
13945         rp="What extensions do you wish to include?"
13946         . ./myread
13947         case "$ans" in
13948         none) static_ext=' ' ;;
13949         *) static_ext="$ans" ;;
13950         esac
13951         ;;
13952 esac
13953
13954 set X $dynamic_ext $static_ext $nonxs_ext
13955 shift
13956 extensions="$*"
13957
13958 : Remove build directory name from cppstdin so it can be used from
13959 : either the present location or the final installed location.
13960 echo " "
13961 : Get out of the UU directory to get correct path name.
13962 cd ..
13963 case "$cppstdin" in
13964 `pwd`/cppstdin)
13965         echo "Stripping down cppstdin path name"
13966         cppstdin=cppstdin
13967         ;;
13968 esac
13969 cd UU
13970
13971 : end of configuration questions
13972 echo " "
13973 echo "End of configuration questions."
13974 echo " "
13975
13976 : back to where it started
13977 if test -d ../UU; then
13978         cd ..
13979 fi
13980
13981 : configuration may be patched via a 'config.over' file
13982 if $test -f config.over; then
13983         echo " "
13984         dflt=y
13985         rp='I see a config.over file.  Do you wish to load it?'
13986         . UU/myread
13987         case "$ans" in
13988         n*) echo "OK, I'll ignore it.";;
13989         *)      . ./config.over
13990                 echo "Configuration override changes have been loaded."
13991                 ;;
13992         esac
13993 fi
13994
13995 : in case they want portability, strip down executable paths
13996 case "$d_portable" in
13997 "$define")
13998         echo " "
13999         echo "Stripping down executable paths..." >&4
14000         for file in $loclist $trylist; do
14001                 eval temp=\$$file
14002                 eval $file=`basename $temp`
14003         done
14004         ;;
14005 esac
14006
14007 : create config.sh file
14008 echo " "
14009 echo "Creating config.sh..." >&4
14010 $spitshell <<EOT >config.sh
14011 $startsh
14012 #
14013 # This file was produced by running the Configure script. It holds all the
14014 # definitions figured out by Configure. Should you modify one of these values,
14015 # do not forget to propagate your changes by running "Configure -der". You may
14016 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14017 #
14018
14019 # Package name      : $package
14020 # Source directory  : $src
14021 # Configuration time: $cf_time
14022 # Configured by     : $cf_by
14023 # Target system     : $myuname
14024
14025 Author='$Author'
14026 Date='$Date'
14027 Header='$Header'
14028 Id='$Id'
14029 Locker='$Locker'
14030 Log='$Log'
14031 Mcc='$Mcc'
14032 RCSfile='$RCSfile'
14033 Revision='$Revision'
14034 Source='$Source'
14035 State='$State'
14036 _a='$_a'
14037 _exe='$_exe'
14038 _o='$_o'
14039 afs='$afs'
14040 alignbytes='$alignbytes'
14041 ansi2knr='$ansi2knr'
14042 aphostname='$aphostname'
14043 apiversion='$apiversion'
14044 ar='$ar'
14045 archlib='$archlib'
14046 archlibexp='$archlibexp'
14047 archname64='$archname64'
14048 archname='$archname'
14049 archobjs='$archobjs'
14050 awk='$awk'
14051 baserev='$baserev'
14052 bash='$bash'
14053 bin='$bin'
14054 bincompat5005='$bincompat5005'
14055 binexp='$binexp'
14056 bison='$bison'
14057 byacc='$byacc'
14058 byteorder='$byteorder'
14059 c='$c'
14060 castflags='$castflags'
14061 cat='$cat'
14062 cc='$cc'
14063 cccdlflags='$cccdlflags'
14064 ccdlflags='$ccdlflags'
14065 ccflags='$ccflags'
14066 ccsymbols='$ccsymbols'
14067 cf_by='$cf_by'
14068 cf_email='$cf_email'
14069 cf_time='$cf_time'
14070 charsize='$charsize'
14071 chgrp='$chgrp'
14072 chmod='$chmod'
14073 chown='$chown'
14074 clocktype='$clocktype'
14075 comm='$comm'
14076 compress='$compress'
14077 contains='$contains'
14078 cp='$cp'
14079 cpio='$cpio'
14080 cpp='$cpp'
14081 cpp_stuff='$cpp_stuff'
14082 cppccsymbols='$cppccsymbols'
14083 cppflags='$cppflags'
14084 cpplast='$cpplast'
14085 cppminus='$cppminus'
14086 cpprun='$cpprun'
14087 cppstdin='$cppstdin'
14088 cppsymbols='$cppsymbols'
14089 crosscompile='$crosscompile'
14090 cryptlib='$cryptlib'
14091 csh='$csh'
14092 d_Gconvert='$d_Gconvert'
14093 d_PRIEldbl='$d_PRIEldbl'
14094 d_PRIFldbl='$d_PRIFldbl'
14095 d_PRIGldbl='$d_PRIGldbl'
14096 d_PRIX64='$d_PRIX64'
14097 d_PRId64='$d_PRId64'
14098 d_PRIeldbl='$d_PRIeldbl'
14099 d_PRIfldbl='$d_PRIfldbl'
14100 d_PRIgldbl='$d_PRIgldbl'
14101 d_PRIi64='$d_PRIi64'
14102 d_PRIo64='$d_PRIo64'
14103 d_PRIu64='$d_PRIu64'
14104 d_PRIx64='$d_PRIx64'
14105 d_access='$d_access'
14106 d_accessx='$d_accessx'
14107 d_alarm='$d_alarm'
14108 d_archlib='$d_archlib'
14109 d_atolf='$d_atolf'
14110 d_atoll='$d_atoll'
14111 d_attribut='$d_attribut'
14112 d_bcmp='$d_bcmp'
14113 d_bcopy='$d_bcopy'
14114 d_bincompat5005='$d_bincompat5005'
14115 d_bsd='$d_bsd'
14116 d_bsdgetpgrp='$d_bsdgetpgrp'
14117 d_bsdsetpgrp='$d_bsdsetpgrp'
14118 d_bzero='$d_bzero'
14119 d_casti32='$d_casti32'
14120 d_castneg='$d_castneg'
14121 d_charvspr='$d_charvspr'
14122 d_chown='$d_chown'
14123 d_chroot='$d_chroot'
14124 d_chsize='$d_chsize'
14125 d_closedir='$d_closedir'
14126 d_const='$d_const'
14127 d_crypt='$d_crypt'
14128 d_csh='$d_csh'
14129 d_cuserid='$d_cuserid'
14130 d_dbl_dig='$d_dbl_dig'
14131 d_difftime='$d_difftime'
14132 d_dirnamlen='$d_dirnamlen'
14133 d_dlerror='$d_dlerror'
14134 d_dlopen='$d_dlopen'
14135 d_dlsymun='$d_dlsymun'
14136 d_dosuid='$d_dosuid'
14137 d_drand48proto='$d_drand48proto'
14138 d_dup2='$d_dup2'
14139 d_eaccess='$d_eaccess'
14140 d_endgrent='$d_endgrent'
14141 d_endhent='$d_endhent'
14142 d_endnent='$d_endnent'
14143 d_endpent='$d_endpent'
14144 d_endpwent='$d_endpwent'
14145 d_endsent='$d_endsent'
14146 d_endspent='$d_endspent'
14147 d_eofnblk='$d_eofnblk'
14148 d_eunice='$d_eunice'
14149 d_fchmod='$d_fchmod'
14150 d_fchown='$d_fchown'
14151 d_fcntl='$d_fcntl'
14152 d_fd_macros='$d_fd_macros'
14153 d_fd_set='$d_fd_set'
14154 d_fds_bits='$d_fds_bits'
14155 d_fgetpos='$d_fgetpos'
14156 d_flexfnam='$d_flexfnam'
14157 d_flock='$d_flock'
14158 d_fork='$d_fork'
14159 d_fpathconf='$d_fpathconf'
14160 d_fpos64_t='$d_fpos64_t'
14161 d_fs_data_s='$d_fs_data_s'
14162 d_fseeko='$d_fseeko'
14163 d_fsetpos='$d_fsetpos'
14164 d_fstatfs='$d_fstatfs'
14165 d_fstatvfs='$d_fstatvfs'
14166 d_ftello='$d_ftello'
14167 d_ftime='$d_ftime'
14168 d_getgrent='$d_getgrent'
14169 d_getgrps='$d_getgrps'
14170 d_gethbyaddr='$d_gethbyaddr'
14171 d_gethbyname='$d_gethbyname'
14172 d_gethent='$d_gethent'
14173 d_gethname='$d_gethname'
14174 d_gethostprotos='$d_gethostprotos'
14175 d_getlogin='$d_getlogin'
14176 d_getmnt='$d_getmnt'
14177 d_getmntent='$d_getmntent'
14178 d_getnbyaddr='$d_getnbyaddr'
14179 d_getnbyname='$d_getnbyname'
14180 d_getnent='$d_getnent'
14181 d_getnetprotos='$d_getnetprotos'
14182 d_getpbyname='$d_getpbyname'
14183 d_getpbynumber='$d_getpbynumber'
14184 d_getpent='$d_getpent'
14185 d_getpgid='$d_getpgid'
14186 d_getpgrp2='$d_getpgrp2'
14187 d_getpgrp='$d_getpgrp'
14188 d_getppid='$d_getppid'
14189 d_getprior='$d_getprior'
14190 d_getprotoprotos='$d_getprotoprotos'
14191 d_getpwent='$d_getpwent'
14192 d_getsbyname='$d_getsbyname'
14193 d_getsbyport='$d_getsbyport'
14194 d_getsent='$d_getsent'
14195 d_getservprotos='$d_getservprotos'
14196 d_getspent='$d_getspent'
14197 d_getspnam='$d_getspnam'
14198 d_gettimeod='$d_gettimeod'
14199 d_gnulibc='$d_gnulibc'
14200 d_grpasswd='$d_grpasswd'
14201 d_hasmntopt='$d_hasmntopt'
14202 d_htonl='$d_htonl'
14203 d_index='$d_index'
14204 d_inetaton='$d_inetaton'
14205 d_int64t='$d_int64t'
14206 d_isascii='$d_isascii'
14207 d_killpg='$d_killpg'
14208 d_lchown='$d_lchown'
14209 d_ldbl_dig='$d_ldbl_dig'
14210 d_link='$d_link'
14211 d_locconv='$d_locconv'
14212 d_lockf='$d_lockf'
14213 d_longdbl='$d_longdbl'
14214 d_longlong='$d_longlong'
14215 d_lstat='$d_lstat'
14216 d_mblen='$d_mblen'
14217 d_mbstowcs='$d_mbstowcs'
14218 d_mbtowc='$d_mbtowc'
14219 d_memchr='$d_memchr'
14220 d_memcmp='$d_memcmp'
14221 d_memcpy='$d_memcpy'
14222 d_memmove='$d_memmove'
14223 d_memset='$d_memset'
14224 d_mkdir='$d_mkdir'
14225 d_mkfifo='$d_mkfifo'
14226 d_mktime='$d_mktime'
14227 d_msg='$d_msg'
14228 d_msg_ctrunc='$d_msg_ctrunc'
14229 d_msg_dontroute='$d_msg_dontroute'
14230 d_msg_oob='$d_msg_oob'
14231 d_msg_peek='$d_msg_peek'
14232 d_msg_proxy='$d_msg_proxy'
14233 d_msgctl='$d_msgctl'
14234 d_msgget='$d_msgget'
14235 d_msgrcv='$d_msgrcv'
14236 d_msgsnd='$d_msgsnd'
14237 d_mymalloc='$d_mymalloc'
14238 d_nice='$d_nice'
14239 d_off64_t='$d_off64_t'
14240 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
14241 d_oldpthreads='$d_oldpthreads'
14242 d_oldsock='$d_oldsock'
14243 d_open3='$d_open3'
14244 d_pathconf='$d_pathconf'
14245 d_pause='$d_pause'
14246 d_phostname='$d_phostname'
14247 d_pipe='$d_pipe'
14248 d_poll='$d_poll'
14249 d_portable='$d_portable'
14250 d_pthread_yield='$d_pthread_yield'
14251 d_pwage='$d_pwage'
14252 d_pwchange='$d_pwchange'
14253 d_pwclass='$d_pwclass'
14254 d_pwcomment='$d_pwcomment'
14255 d_pwexpire='$d_pwexpire'
14256 d_pwgecos='$d_pwgecos'
14257 d_pwpasswd='$d_pwpasswd'
14258 d_pwquota='$d_pwquota'
14259 d_readdir='$d_readdir'
14260 d_readlink='$d_readlink'
14261 d_rename='$d_rename'
14262 d_rewinddir='$d_rewinddir'
14263 d_rmdir='$d_rmdir'
14264 d_safebcpy='$d_safebcpy'
14265 d_safemcpy='$d_safemcpy'
14266 d_sanemcmp='$d_sanemcmp'
14267 d_sched_yield='$d_sched_yield'
14268 d_scm_rights='$d_scm_rights'
14269 d_seekdir='$d_seekdir'
14270 d_select='$d_select'
14271 d_sem='$d_sem'
14272 d_semctl='$d_semctl'
14273 d_semctl_semid_ds='$d_semctl_semid_ds'
14274 d_semctl_semun='$d_semctl_semun'
14275 d_semget='$d_semget'
14276 d_semop='$d_semop'
14277 d_setegid='$d_setegid'
14278 d_seteuid='$d_seteuid'
14279 d_setgrent='$d_setgrent'
14280 d_setgrps='$d_setgrps'
14281 d_sethent='$d_sethent'
14282 d_setlinebuf='$d_setlinebuf'
14283 d_setlocale='$d_setlocale'
14284 d_setnent='$d_setnent'
14285 d_setpent='$d_setpent'
14286 d_setpgid='$d_setpgid'
14287 d_setpgrp2='$d_setpgrp2'
14288 d_setpgrp='$d_setpgrp'
14289 d_setprior='$d_setprior'
14290 d_setpwent='$d_setpwent'
14291 d_setregid='$d_setregid'
14292 d_setresgid='$d_setresgid'
14293 d_setresuid='$d_setresuid'
14294 d_setreuid='$d_setreuid'
14295 d_setrgid='$d_setrgid'
14296 d_setruid='$d_setruid'
14297 d_setsent='$d_setsent'
14298 d_setsid='$d_setsid'
14299 d_setspent='$d_setspent'
14300 d_setvbuf='$d_setvbuf'
14301 d_sfio='$d_sfio'
14302 d_shm='$d_shm'
14303 d_shmat='$d_shmat'
14304 d_shmatprototype='$d_shmatprototype'
14305 d_shmctl='$d_shmctl'
14306 d_shmdt='$d_shmdt'
14307 d_shmget='$d_shmget'
14308 d_sigaction='$d_sigaction'
14309 d_sigsetjmp='$d_sigsetjmp'
14310 d_socket='$d_socket'
14311 d_sockpair='$d_sockpair'
14312 d_sqrtl='$d_sqrtl'
14313 d_statblks='$d_statblks'
14314 d_statfs_f_flags='$d_statfs_f_flags'
14315 d_statfs_s='$d_statfs_s'
14316 d_statvfs='$d_statvfs'
14317 d_stdio_cnt_lval='$d_stdio_cnt_lval'
14318 d_stdio_ptr_lval='$d_stdio_ptr_lval'
14319 d_stdio_stream_array='$d_stdio_stream_array'
14320 d_stdiobase='$d_stdiobase'
14321 d_stdstdio='$d_stdstdio'
14322 d_strchr='$d_strchr'
14323 d_strcoll='$d_strcoll'
14324 d_strctcpy='$d_strctcpy'
14325 d_strerrm='$d_strerrm'
14326 d_strerror='$d_strerror'
14327 d_strtod='$d_strtod'
14328 d_strtol='$d_strtol'
14329 d_strtoul='$d_strtoul'
14330 d_strtoull='$d_strtoull'
14331 d_strxfrm='$d_strxfrm'
14332 d_suidsafe='$d_suidsafe'
14333 d_symlink='$d_symlink'
14334 d_syscall='$d_syscall'
14335 d_sysconf='$d_sysconf'
14336 d_sysernlst='$d_sysernlst'
14337 d_syserrlst='$d_syserrlst'
14338 d_system='$d_system'
14339 d_tcgetpgrp='$d_tcgetpgrp'
14340 d_tcsetpgrp='$d_tcsetpgrp'
14341 d_telldir='$d_telldir'
14342 d_telldirproto='$d_telldirproto'
14343 d_time='$d_time'
14344 d_times='$d_times'
14345 d_truncate='$d_truncate'
14346 d_tzname='$d_tzname'
14347 d_umask='$d_umask'
14348 d_uname='$d_uname'
14349 d_union_semun='$d_union_semun'
14350 d_ustat='$d_ustat'
14351 d_vendorbin='$d_vendorbin'
14352 d_vendorlib='$d_vendorlib'
14353 d_vfork='$d_vfork'
14354 d_void_closedir='$d_void_closedir'
14355 d_voidsig='$d_voidsig'
14356 d_voidtty='$d_voidtty'
14357 d_volatile='$d_volatile'
14358 d_vprintf='$d_vprintf'
14359 d_wait4='$d_wait4'
14360 d_waitpid='$d_waitpid'
14361 d_wcstombs='$d_wcstombs'
14362 d_wctomb='$d_wctomb'
14363 d_xenix='$d_xenix'
14364 date='$date'
14365 db_hashtype='$db_hashtype'
14366 db_prefixtype='$db_prefixtype'
14367 defvoidused='$defvoidused'
14368 direntrytype='$direntrytype'
14369 dlext='$dlext'
14370 dlsrc='$dlsrc'
14371 doublesize='$doublesize'
14372 drand01='$drand01'
14373 dynamic_ext='$dynamic_ext'
14374 eagain='$eagain'
14375 ebcdic='$ebcdic'
14376 echo='$echo'
14377 egrep='$egrep'
14378 emacs='$emacs'
14379 eunicefix='$eunicefix'
14380 exe_ext='$exe_ext'
14381 expr='$expr'
14382 extensions='$extensions'
14383 fflushNULL='$fflushNULL'
14384 fflushall='$fflushall'
14385 find='$find'
14386 firstmakefile='$firstmakefile'
14387 flex='$flex'
14388 fpossize='$fpossize'
14389 fpostype='$fpostype'
14390 freetype='$freetype'
14391 full_ar='$full_ar'
14392 full_csh='$full_csh'
14393 full_sed='$full_sed'
14394 gccversion='$gccversion'
14395 gidformat='$gidformat'
14396 gidsign='$gidsign'
14397 gidsize='$gidsize'
14398 gidtype='$gidtype'
14399 glibpth='$glibpth'
14400 grep='$grep'
14401 groupcat='$groupcat'
14402 groupstype='$groupstype'
14403 gzip='$gzip'
14404 h_fcntl='$h_fcntl'
14405 h_sysfile='$h_sysfile'
14406 hint='$hint'
14407 hostcat='$hostcat'
14408 huge='$huge'
14409 i16size='$i16size'
14410 i16type='$i16type'
14411 i32size='$i32size'
14412 i32type='$i32type'
14413 i64size='$i64size'
14414 i64type='$i64type'
14415 i8size='$i8size'
14416 i8type='$i8type'
14417 i_arpainet='$i_arpainet'
14418 i_bsdioctl='$i_bsdioctl'
14419 i_db='$i_db'
14420 i_dbm='$i_dbm'
14421 i_dirent='$i_dirent'
14422 i_dld='$i_dld'
14423 i_dlfcn='$i_dlfcn'
14424 i_fcntl='$i_fcntl'
14425 i_float='$i_float'
14426 i_gdbm='$i_gdbm'
14427 i_grp='$i_grp'
14428 i_inttypes='$i_inttypes'
14429 i_limits='$i_limits'
14430 i_locale='$i_locale'
14431 i_machcthr='$i_machcthr'
14432 i_malloc='$i_malloc'
14433 i_math='$i_math'
14434 i_memory='$i_memory'
14435 i_mntent='$i_mntent'
14436 i_ndbm='$i_ndbm'
14437 i_netdb='$i_netdb'
14438 i_neterrno='$i_neterrno'
14439 i_netinettcp='$i_netinettcp'
14440 i_niin='$i_niin'
14441 i_poll='$i_poll'
14442 i_pthread='$i_pthread'
14443 i_pwd='$i_pwd'
14444 i_rpcsvcdbm='$i_rpcsvcdbm'
14445 i_sfio='$i_sfio'
14446 i_sgtty='$i_sgtty'
14447 i_shadow='$i_shadow'
14448 i_socks='$i_socks'
14449 i_stdarg='$i_stdarg'
14450 i_stddef='$i_stddef'
14451 i_stdlib='$i_stdlib'
14452 i_string='$i_string'
14453 i_sysaccess='$i_sysaccess'
14454 i_sysdir='$i_sysdir'
14455 i_sysfile='$i_sysfile'
14456 i_sysfilio='$i_sysfilio'
14457 i_sysin='$i_sysin'
14458 i_sysioctl='$i_sysioctl'
14459 i_sysmount='$i_sysmount'
14460 i_sysndir='$i_sysndir'
14461 i_sysparam='$i_sysparam'
14462 i_sysresrc='$i_sysresrc'
14463 i_syssecrt='$i_syssecrt'
14464 i_sysselct='$i_sysselct'
14465 i_syssockio='$i_syssockio'
14466 i_sysstat='$i_sysstat'
14467 i_sysstatfs='$i_sysstatfs'
14468 i_sysstatvfs='$i_sysstatvfs'
14469 i_systime='$i_systime'
14470 i_systimek='$i_systimek'
14471 i_systimes='$i_systimes'
14472 i_systypes='$i_systypes'
14473 i_sysuio='$i_sysuio'
14474 i_sysun='$i_sysun'
14475 i_sysvfs='$i_sysvfs'
14476 i_syswait='$i_syswait'
14477 i_termio='$i_termio'
14478 i_termios='$i_termios'
14479 i_time='$i_time'
14480 i_unistd='$i_unistd'
14481 i_ustat='$i_ustat'
14482 i_utime='$i_utime'
14483 i_values='$i_values'
14484 i_varargs='$i_varargs'
14485 i_varhdr='$i_varhdr'
14486 i_vfork='$i_vfork'
14487 ignore_versioned_solibs='$ignore_versioned_solibs'
14488 incpath='$incpath'
14489 inews='$inews'
14490 installarchlib='$installarchlib'
14491 installbin='$installbin'
14492 installman1dir='$installman1dir'
14493 installman3dir='$installman3dir'
14494 installprefix='$installprefix'
14495 installprefixexp='$installprefixexp'
14496 installprivlib='$installprivlib'
14497 installscript='$installscript'
14498 installsitearch='$installsitearch'
14499 installsitebin='$installsitebin'
14500 installsitelib='$installsitelib'
14501 installstyle='$installstyle'
14502 installusrbinperl='$installusrbinperl'
14503 installvendorbin='$installvendorbin'
14504 installvendorlib='$installvendorlib'
14505 intsize='$intsize'
14506 ivdformat='$ivdformat'
14507 ivsize='$ivsize'
14508 ivtype='$ivtype'
14509 known_extensions='$known_extensions'
14510 ksh='$ksh'
14511 large='$large'
14512 ld='$ld'
14513 lddlflags='$lddlflags'
14514 ldflags='$ldflags'
14515 ldlibpthname='$ldlibpthname'
14516 less='$less'
14517 lib_ext='$lib_ext'
14518 libc='$libc'
14519 libperl='$libperl'
14520 libpth='$libpth'
14521 libs='$libs'
14522 libswanted='$libswanted'
14523 line='$line'
14524 lint='$lint'
14525 lkflags='$lkflags'
14526 ln='$ln'
14527 lns='$lns'
14528 locincpth='$locincpth'
14529 loclibpth='$loclibpth'
14530 longdblsize='$longdblsize'
14531 longlongsize='$longlongsize'
14532 longsize='$longsize'
14533 lp='$lp'
14534 lpr='$lpr'
14535 ls='$ls'
14536 lseeksize='$lseeksize'
14537 lseektype='$lseektype'
14538 mail='$mail'
14539 mailx='$mailx'
14540 make='$make'
14541 make_set_make='$make_set_make'
14542 mallocobj='$mallocobj'
14543 mallocsrc='$mallocsrc'
14544 malloctype='$malloctype'
14545 man1dir='$man1dir'
14546 man1direxp='$man1direxp'
14547 man1ext='$man1ext'
14548 man3dir='$man3dir'
14549 man3direxp='$man3direxp'
14550 man3ext='$man3ext'
14551 medium='$medium'
14552 mips_type='$mips_type'
14553 mkdir='$mkdir'
14554 models='$models'
14555 modetype='$modetype'
14556 more='$more'
14557 multiarch='$multiarch'
14558 mv='$mv'
14559 myarchname='$myarchname'
14560 mydomain='$mydomain'
14561 myhostname='$myhostname'
14562 myuname='$myuname'
14563 n='$n'
14564 netdb_hlen_type='$netdb_hlen_type'
14565 netdb_host_type='$netdb_host_type'
14566 netdb_name_type='$netdb_name_type'
14567 netdb_net_type='$netdb_net_type'
14568 nm='$nm'
14569 nm_opt='$nm_opt'
14570 nm_so_opt='$nm_so_opt'
14571 nonxs_ext='$nonxs_ext'
14572 nroff='$nroff'
14573 nvsize='$nvsize'
14574 nvtype='$nvtype'
14575 o_nonblock='$o_nonblock'
14576 obj_ext='$obj_ext'
14577 old_pthread_create_joinable='$old_pthread_create_joinable'
14578 optimize='$optimize'
14579 orderlib='$orderlib'
14580 osname='$osname'
14581 osvers='$osvers'
14582 package='$package'
14583 pager='$pager'
14584 passcat='$passcat'
14585 patchlevel='$patchlevel'
14586 path_sep='$path_sep'
14587 perl='$perl'
14588 perladmin='$perladmin'
14589 perlpath='$perlpath'
14590 pg='$pg'
14591 phostname='$phostname'
14592 pidtype='$pidtype'
14593 plibpth='$plibpth'
14594 pm_apiversion='$pm_apiversion'
14595 pmake='$pmake'
14596 pr='$pr'
14597 prefix='$prefix'
14598 prefixexp='$prefixexp'
14599 privlib='$privlib'
14600 privlibexp='$privlibexp'
14601 prototype='$prototype'
14602 ptrsize='$ptrsize'
14603 quadcase='$quadcase'
14604 quadtype='$quadtype'
14605 randbits='$randbits'
14606 randfunc='$randfunc'
14607 randseedtype='$randseedtype'
14608 ranlib='$ranlib'
14609 rd_nodata='$rd_nodata'
14610 rm='$rm'
14611 rmail='$rmail'
14612 runnm='$runnm'
14613 sPRIEldbl='$sPRIEldbl'
14614 sPRIFldbl='$sPRIFldbl'
14615 sPRIGldbl='$sPRIGldbl'
14616 sPRIX64='$sPRIX64'
14617 sPRId64='$sPRId64'
14618 sPRIeldbl='$sPRIeldbl'
14619 sPRIfldbl='$sPRIfldbl'
14620 sPRIgldbl='$sPRIgldbl'
14621 sPRIi64='$sPRIi64'
14622 sPRIo64='$sPRIo64'
14623 sPRIu64='$sPRIu64'
14624 sPRIx64='$sPRIx64'
14625 sched_yield='$sched_yield'
14626 scriptdir='$scriptdir'
14627 scriptdirexp='$scriptdirexp'
14628 sed='$sed'
14629 seedfunc='$seedfunc'
14630 selectminbits='$selectminbits'
14631 selecttype='$selecttype'
14632 sendmail='$sendmail'
14633 sh='$sh'
14634 shar='$shar'
14635 sharpbang='$sharpbang'
14636 shmattype='$shmattype'
14637 shortsize='$shortsize'
14638 shrpenv='$shrpenv'
14639 shsharp='$shsharp'
14640 sig_count='$sig_count'
14641 sig_name='$sig_name'
14642 sig_name_init='$sig_name_init'
14643 sig_num='$sig_num'
14644 sig_num_init='$sig_num_init'
14645 signal_t='$signal_t'
14646 sitearch='$sitearch'
14647 sitearchexp='$sitearchexp'
14648 sitebin='$sitebin'
14649 sitebinexp='$sitebinexp'
14650 sitelib='$sitelib'
14651 sitelibexp='$sitelibexp'
14652 siteprefix='$siteprefix'
14653 siteprefixexp='$siteprefixexp'
14654 sizetype='$sizetype'
14655 sleep='$sleep'
14656 smail='$smail'
14657 small='$small'
14658 so='$so'
14659 sockethdr='$sockethdr'
14660 socketlib='$socketlib'
14661 sort='$sort'
14662 spackage='$spackage'
14663 spitshell='$spitshell'
14664 split='$split'
14665 src='$src'
14666 ssizetype='$ssizetype'
14667 startperl='$startperl'
14668 startsh='$startsh'
14669 static_ext='$static_ext'
14670 stdchar='$stdchar'
14671 stdio_base='$stdio_base'
14672 stdio_bufsiz='$stdio_bufsiz'
14673 stdio_cnt='$stdio_cnt'
14674 stdio_filbuf='$stdio_filbuf'
14675 stdio_ptr='$stdio_ptr'
14676 stdio_stream_array='$stdio_stream_array'
14677 strings='$strings'
14678 submit='$submit'
14679 subversion='$subversion'
14680 sysman='$sysman'
14681 tail='$tail'
14682 tar='$tar'
14683 tbl='$tbl'
14684 tee='$tee'
14685 test='$test'
14686 timeincl='$timeincl'
14687 timetype='$timetype'
14688 touch='$touch'
14689 tr='$tr'
14690 trnl='$trnl'
14691 troff='$troff'
14692 u16size='$u16size'
14693 u16type='$u16type'
14694 u32size='$u32size'
14695 u32type='$u32type'
14696 u64size='$u64size'
14697 u64type='$u64type'
14698 u8size='$u8size'
14699 u8type='$u8type'
14700 uidformat='$uidformat'
14701 uidsign='$uidsign'
14702 uidsize='$uidsize'
14703 uidtype='$uidtype'
14704 uname='$uname'
14705 uniq='$uniq'
14706 uquadtype='$uquadtype'
14707 use64bits='$use64bits'
14708 usedl='$usedl'
14709 uselargefiles='$uselargefiles'
14710 uselongdouble='$uselongdouble'
14711 uselonglong='$uselonglong'
14712 usemorebits='$usemorebits'
14713 usemultiplicity='$usemultiplicity'
14714 usemymalloc='$usemymalloc'
14715 usenm='$usenm'
14716 useopcode='$useopcode'
14717 useperlio='$useperlio'
14718 useposix='$useposix'
14719 usesfio='$usesfio'
14720 useshrplib='$useshrplib'
14721 usesocks='$usesocks'
14722 usethreads='$usethreads'
14723 usevendorprefix='$usevendorprefix'
14724 usevfork='$usevfork'
14725 usrinc='$usrinc'
14726 uuname='$uuname'
14727 uvoformat='$uvoformat'
14728 uvsize='$uvsize'
14729 uvtype='$uvtype'
14730 uvuformat='$uvuformat'
14731 uvxformat='$uvxformat'
14732 vendorbin='$vendorbin'
14733 vendorbinexp='$vendorbinexp'
14734 vendorlib='$vendorlib'
14735 vendorlibexp='$vendorlibexp'
14736 vendorprefix='$vendorprefix'
14737 vendorprefixexp='$vendorprefixexp'
14738 version='$version'
14739 vi='$vi'
14740 voidflags='$voidflags'
14741 xlibpth='$xlibpth'
14742 xs_apiversion='$xs_apiversion'
14743 zcat='$zcat'
14744 zip='$zip'
14745 EOT
14746
14747 : Add in command line options if available
14748 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
14749
14750 : add special variables
14751 $test -f $src/patchlevel.h && \
14752 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
14753 echo "CONFIGDOTSH=true" >>config.sh
14754
14755 : propagate old symbols
14756 if $test -f UU/config.sh; then
14757         <UU/config.sh sort | uniq >UU/oldconfig.sh
14758         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
14759         sort | uniq -u >UU/oldsyms
14760         set X `cat UU/oldsyms`
14761         shift
14762         case $# in
14763         0) ;;
14764         *)
14765                 cat <<EOM
14766 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
14767 EOM
14768                 echo "# Variables propagated from previous config.sh file." >>config.sh
14769                 for sym in `cat UU/oldsyms`; do
14770                         echo "    Propagating $hint variable "'$'"$sym..."
14771                         eval 'tmp="$'"${sym}"'"'
14772                         echo "$tmp" | \
14773                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
14774                 done
14775                 ;;
14776         esac
14777 fi
14778
14779 : Finish up by extracting the .SH files
14780 case "$alldone" in
14781 exit)
14782         $rm -rf UU
14783         echo "Done."
14784         exit 0
14785         ;;
14786 cont)
14787         ;;
14788 '')
14789         dflt=''
14790         nostick=true
14791         $cat <<EOM
14792
14793 If you'd like to make any changes to the config.sh file before I begin
14794 to configure things, do it as a shell escape now (e.g. !vi config.sh).
14795
14796 EOM
14797         rp="Press return or use a shell escape to edit config.sh:"
14798         . UU/myread
14799         nostick=''
14800         case "$ans" in
14801         '') ;;
14802         *) : in case they cannot read
14803                 sh 1>&4 -c "$ans";;
14804         esac
14805         ;;
14806 esac
14807
14808 : if this fails, just run all the .SH files by hand
14809 . ./config.sh
14810
14811 echo " "
14812 exec 1>&4
14813 . ./UU/extract
14814
14815 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
14816         dflt=y
14817         case "$silent" in
14818         true) ;;
14819         *)
14820                 $cat <<EOM
14821
14822 Now you need to generate make dependencies by running "$make depend".
14823 You might prefer to run it in background: "$make depend > makedepend.out &"
14824 It can take a while, so you might not want to run it right now.
14825
14826 EOM
14827                 ;;
14828         esac
14829         rp="Run $make depend now?"
14830         . UU/myread
14831         case "$ans" in
14832         y*)
14833                 $make depend && echo "Now you must run a $make."
14834                 ;;
14835         *)
14836                 echo "You must run '$make depend' then '$make'."
14837                 ;;
14838         esac
14839 elif test -f [Mm]akefile; then
14840         echo " "
14841         echo "Now you must run a $make."
14842 else
14843         echo "Done."
14844 fi
14845
14846 if $test -f Policy.sh; then
14847     $cat <<EOM
14848
14849 If you compile $package on a different machine or from a different object
14850 directory, copy the Policy.sh file from this object directory to the
14851 new one before you run Configure -- this will help you with most of
14852 the policy defaults.
14853
14854 EOM
14855 fi
14856 if $test -f config.msg; then
14857     echo "Hmm.  I also noted the following information while running:"
14858     echo " "
14859     $cat config.msg >&4
14860     $rm -f config.msg
14861 fi
14862 $rm -f kit*isdone ark*isdone
14863 $rm -rf UU
14864
14865 : End of Configure
14866