This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use vendorprefixlib.
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Sun Jul 25 17:05:01 EET DST 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_endspent=''
342 d_fchmod=''
343 d_fchown=''
344 d_fcntl=''
345 d_fd_macros=''
346 d_fd_set=''
347 d_fds_bits=''
348 d_fgetpos=''
349 d_flexfnam=''
350 d_flock=''
351 d_fork=''
352 d_fseeko=''
353 d_fsetpos=''
354 d_ftello=''
355 d_ftime=''
356 d_gettimeod=''
357 d_Gconvert=''
358 d_getgrent=''
359 d_getgrps=''
360 d_gethbyaddr=''
361 d_gethbyname=''
362 d_gethent=''
363 aphostname=''
364 d_gethname=''
365 d_phostname=''
366 d_uname=''
367 d_gethostprotos=''
368 d_getlogin=''
369 d_getmntent=''
370 d_getnbyaddr=''
371 d_getnbyname=''
372 d_getnent=''
373 d_getnetprotos=''
374 d_getpent=''
375 d_getpgid=''
376 d_getpgrp2=''
377 d_bsdgetpgrp=''
378 d_getpgrp=''
379 d_getppid=''
380 d_getprior=''
381 d_getpbyname=''
382 d_getpbynumber=''
383 d_getprotoprotos=''
384 d_getpwent=''
385 d_getsent=''
386 d_getservprotos=''
387 d_getspent=''
388 d_getspnam=''
389 d_getsbyname=''
390 d_getsbyport=''
391 d_gnulibc=''
392 d_hasmntopt=''
393 d_htonl=''
394 d_inetaton=''
395 d_isascii=''
396 d_killpg=''
397 d_lchown=''
398 d_link=''
399 d_locconv=''
400 d_lockf=''
401 d_longdbl=''
402 longdblsize=''
403 d_longlong=''
404 longlongsize=''
405 d_lstat=''
406 d_madvise=''
407 d_mblen=''
408 d_mbstowcs=''
409 d_mbtowc=''
410 d_memchr=''
411 d_memcmp=''
412 d_memcpy=''
413 d_memmove=''
414 d_memset=''
415 d_mkdir=''
416 d_mkfifo=''
417 d_mktime=''
418 d_mmap=''
419 mmaptype=''
420 d_mprotect=''
421 d_msg=''
422 d_msgctl=''
423 d_msgget=''
424 d_msgrcv=''
425 d_msgsnd=''
426 d_msync=''
427 d_munmap=''
428 d_nice=''
429 d_open3=''
430 d_fpathconf=''
431 d_pathconf=''
432 d_pause=''
433 d_pipe=''
434 d_poll=''
435 d_portable=''
436 d_old_pthread_create_joinable=''
437 old_pthread_create_joinable=''
438 d_pthread_yield=''
439 d_sched_yield=''
440 sched_yield=''
441 d_readdir=''
442 d_rewinddir=''
443 d_seekdir=''
444 d_telldir=''
445 d_readlink=''
446 d_readv=''
447 d_rename=''
448 d_rmdir=''
449 d_safebcpy=''
450 d_safemcpy=''
451 d_sanemcmp=''
452 d_select=''
453 d_sem=''
454 d_semctl=''
455 d_semget=''
456 d_semop=''
457 d_setegid=''
458 d_seteuid=''
459 d_setgrent=''
460 d_setgrps=''
461 d_sethent=''
462 d_setlinebuf=''
463 d_setlocale=''
464 d_setnent=''
465 d_setpent=''
466 d_setpgid=''
467 d_setpgrp2=''
468 d_bsdsetpgrp=''
469 d_setpgrp=''
470 d_setprior=''
471 d_setpwent=''
472 d_setregid=''
473 d_setresgid=''
474 d_setresuid=''
475 d_setreuid=''
476 d_setrgid=''
477 d_setruid=''
478 d_setsent=''
479 d_setsid=''
480 d_setspent=''
481 d_setvbuf=''
482 d_sfio=''
483 usesfio=''
484 d_shm=''
485 d_shmat=''
486 d_shmatprototype=''
487 shmattype=''
488 d_shmctl=''
489 d_shmdt=''
490 d_shmget=''
491 d_sigaction=''
492 d_sigsetjmp=''
493 d_cmsghdr_s=''
494 d_msg_ctrunc=''
495 d_msg_dontroute=''
496 d_msg_oob=''
497 d_msg_peek=''
498 d_msg_proxy=''
499 d_msghdr_s=''
500 d_oldsock=''
501 d_recvmsg=''
502 d_scm_rights=''
503 d_sendmsg=''
504 d_socket=''
505 d_sockpair=''
506 sockethdr=''
507 socketlib=''
508 d_statblks=''
509 d_fstatfs=''
510 d_statfs=''
511 d_statfsflags=''
512 d_fstatvfs=''
513 d_statvfs=''
514 d_stdio_cnt_lval=''
515 d_stdio_ptr_lval=''
516 d_stdiobase=''
517 d_stdstdio=''
518 stdio_base=''
519 stdio_bufsiz=''
520 stdio_cnt=''
521 stdio_filbuf=''
522 stdio_ptr=''
523 d_index=''
524 d_strchr=''
525 d_strcoll=''
526 d_strctcpy=''
527 d_strerrm=''
528 d_strerror=''
529 d_sysernlst=''
530 d_syserrlst=''
531 d_strtod=''
532 d_strtol=''
533 d_strtoul=''
534 d_strxfrm=''
535 d_symlink=''
536 d_syscall=''
537 d_sysconf=''
538 d_system=''
539 d_tcgetpgrp=''
540 d_tcsetpgrp=''
541 d_telldirproto=''
542 d_time=''
543 timetype=''
544 clocktype=''
545 d_times=''
546 d_truncate=''
547 d_tzname=''
548 d_umask=''
549 d_semctl_semid_ds=''
550 d_semctl_semun=''
551 d_union_semun=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 d_writev=''
564 d_dbmclose64=''
565 d_dbminit64=''
566 d_delete64=''
567 d_fetch64=''
568 d_firstkey64=''
569 d_nextkey64=''
570 d_store64=''
571 dlext=''
572 cccdlflags=''
573 ccdlflags=''
574 dlsrc=''
575 ld=''
576 lddlflags=''
577 usedl=''
578 doublesize=''
579 ebcdic=''
580 fflushNULL=''
581 fflushall=''
582 fpostype=''
583 gidtype=''
584 groupstype=''
585 h_fcntl=''
586 h_sysfile=''
587 i_arpainet=''
588 db_hashtype=''
589 db_prefixtype=''
590 i_db=''
591 i_dbm=''
592 i_rpcsvcdbm=''
593 d_dirnamlen=''
594 direntrytype=''
595 i_dirent=''
596 i_dld=''
597 i_dlfcn=''
598 i_fcntl=''
599 i_float=''
600 i_gdbm=''
601 d_grpasswd=''
602 i_grp=''
603 d_int64t=''
604 i_inttypes=''
605 i_limits=''
606 i_locale=''
607 i_machcthr=''
608 i_malloc=''
609 i_math=''
610 i_memory=''
611 i_mntent=''
612 i_ndbm=''
613 i_netdb=''
614 i_neterrno=''
615 i_netinettcp=''
616 i_niin=''
617 i_sysin=''
618 i_poll=''
619 i_pthread=''
620 d_pwage=''
621 d_pwchange=''
622 d_pwclass=''
623 d_pwcomment=''
624 d_pwexpire=''
625 d_pwgecos=''
626 d_pwpasswd=''
627 d_pwquota=''
628 i_pwd=''
629 i_sfio=''
630 i_shadow=''
631 i_socks=''
632 i_stddef=''
633 i_stdlib=''
634 i_string=''
635 strings=''
636 i_sysaccess=''
637 i_sysdir=''
638 i_sysfile=''
639 d_voidtty=''
640 i_bsdioctl=''
641 i_sysfilio=''
642 i_sysioctl=''
643 i_syssockio=''
644 i_sysmman=''
645 i_sysmount=''
646 i_sysndir=''
647 i_sysparam=''
648 i_sysresrc=''
649 i_syssecrt=''
650 i_sysselct=''
651 i_sysstat=''
652 i_sysstatvfs=''
653 i_systimes=''
654 i_systypes=''
655 d_iovec_s=''
656 i_sysuio=''
657 i_sysun=''
658 i_syswait=''
659 i_sgtty=''
660 i_termio=''
661 i_termios=''
662 i_systime=''
663 i_systimek=''
664 i_time=''
665 timeincl=''
666 i_unistd=''
667 i_utime=''
668 i_values=''
669 i_stdarg=''
670 i_varargs=''
671 i_varhdr=''
672 i_vfork=''
673 installprefix=''
674 installprefixexp=''
675 installstyle=''
676 installusrbinperl=''
677 intsize=''
678 longsize=''
679 shortsize=''
680 d_dirent64_s=''
681 d_flock64_s=''
682 d_fstat64=''
683 d_ftruncate64=''
684 d_ino64_t=''
685 d_llseek=''
686 d_lockf64=''
687 d_lseek64=''
688 d_lstat64=''
689 d_off64_t=''
690 d_offset_t=''
691 d_open64=''
692 d_opendir64=''
693 d_readdir64=''
694 d_seekdir64=''
695 d_stat64=''
696 d_telldir64=''
697 d_truncate64=''
698 libc=''
699 ldlibpthname=''
700 libperl=''
701 shrpenv=''
702 useshrplib=''
703 glibpth=''
704 libpth=''
705 loclibpth=''
706 plibpth=''
707 xlibpth=''
708 ignore_versioned_solibs=''
709 libs=''
710 lns=''
711 lseeksize=''
712 lseektype=''
713 make_set_make=''
714 d_mymalloc=''
715 freetype=''
716 mallocobj=''
717 mallocsrc=''
718 malloctype=''
719 usemymalloc=''
720 installman1dir=''
721 man1dir=''
722 man1direxp=''
723 man1ext=''
724 installman3dir=''
725 man3dir=''
726 man3direxp=''
727 man3ext=''
728 huge=''
729 large=''
730 medium=''
731 models=''
732 small=''
733 split=''
734 modetype=''
735 multiarch=''
736 mydomain=''
737 myhostname=''
738 phostname=''
739 c=''
740 n=''
741 d_eofnblk=''
742 eagain=''
743 o_nonblock=''
744 rd_nodata=''
745 netdb_hlen_type=''
746 netdb_host_type=''
747 netdb_name_type=''
748 netdb_net_type=''
749 groupcat=''
750 hostcat=''
751 passcat=''
752 orderlib=''
753 ranlib=''
754 package=''
755 spackage=''
756 pager=''
757 apiversion=''
758 patchlevel=''
759 subversion=''
760 version=''
761 perladmin=''
762 perlpath=''
763 pidtype=''
764 prefix=''
765 prefixexp=''
766 installprivlib=''
767 privlib=''
768 privlibexp=''
769 prototype=''
770 ptrsize=''
771 drand01=''
772 randbits=''
773 randfunc=''
774 randseedtype=''
775 seedfunc=''
776 installscript=''
777 scriptdir=''
778 scriptdirexp=''
779 selectminbits=''
780 selecttype=''
781 sh=''
782 sig_count=''
783 sig_name=''
784 sig_name_init=''
785 sig_num=''
786 sig_num_init=''
787 installsitearch=''
788 sitearch=''
789 sitearchexp=''
790 installsitelib=''
791 sitelib=''
792 sitelibexp=''
793 siteprefix=''
794 siteprefixexp=''
795 sizetype=''
796 so=''
797 sharpbang=''
798 shsharp=''
799 spitshell=''
800 src=''
801 ssizetype=''
802 startperl=''
803 startsh=''
804 stdchar=''
805 d_fgetpos64=''
806 d_fopen64=''
807 d_freopen64=''
808 d_fseek64=''
809 d_fseeko64=''
810 d_fsetpos64=''
811 d_ftell64=''
812 d_ftello64=''
813 d_tmpfile64=''
814 d_stdio_stream_array=''
815 stdio_stream_array=''
816 sysman=''
817 trnl=''
818 uidtype=''
819 archname64=''
820 use64bits=''
821 usemultiplicity=''
822 nm_opt=''
823 nm_so_opt=''
824 runnm=''
825 usenm=''
826 useperlio=''
827 usesocks=''
828 d_oldpthreads=''
829 usethreads=''
830 incpath=''
831 mips=''
832 mips_type=''
833 usrinc=''
834 d_vendorlib=''
835 installvendorlib=''
836 vendorlib=''
837 vendorlibexp=''
838 usevendorprefix=''
839 vendorprefix=''
840 vendorprefixexp=''
841 defvoidused=''
842 voidflags=''
843 CONFIG=''
844
845 define='define'
846 undef='undef'
847 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
848 rmlist=''
849
850 : We must find out about Eunice early
851 eunicefix=':'
852 if test -f /etc/unixtovms; then
853         eunicefix=/etc/unixtovms
854 fi
855 if test -f /etc/unixtovms.exe; then
856         eunicefix=/etc/unixtovms.exe
857 fi
858
859 i_whoami=''
860 : Possible local include directories to search.
861 : Set locincpth to "" in a hint file to defeat local include searches.
862 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
863 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
864 :
865 : no include file wanted by default
866 inclwanted=''
867
868 : list of known cpp symbols, sorted alphabetically
869 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
870 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
871 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
872 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
873 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
874 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
875 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
876 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
877 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
878 al="$al VMS Xenix286"
879 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
880 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
881 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
882 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
883 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
884 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
885 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
886 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
887 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
888 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
889 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
890 al="$al __SVR4_2__ __UMAXV__"
891 al="$al ____386BSD____ __alpha __alpha__ __amiga"
892 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
893 al="$al __host_mips__"
894 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
895 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
896 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
897 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
898 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
899 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
900 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
901 al="$al __mc88100 __mc88100__ __mips __mips__"
902 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
903 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
904 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
905 al="$al _host_mips _mips _unix"
906 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
907 al="$al apollo ardent att386 att3b"
908 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
909 al="$al cadmus clipper concurrent convex cray ctix"
910 al="$al dmert encore gcos gcx gimpel gould"
911 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
912 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
913 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
914 al="$al i186 i286 i386 i486 i8086"
915 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
916 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
917 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
918 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
919 al="$al mc88000 mc88100 merlin mert mips mvs n16"
920 al="$al ncl_el ncl_mr"
921 al="$al news1500 news1700 news1800 news1900 news3700"
922 al="$al news700 news800 news900 ns16000 ns32000"
923 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
924 al="$al parisc pc532 pdp11 plexus posix pyr"
925 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
926 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
927 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
928 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
929 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
930 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
931 al="$al xenix z8000"
932
933 : Trailing extension.  Override this in a hint file, if needed.
934 _exe=''
935 : Extra object files, if any, needed on this platform.
936 archobjs=''
937 groupstype=''
938 : change the next line if compiling for Xenix/286 on Xenix/386
939 xlibpth='/usr/lib/386 /lib/386'
940
941 : Possible local library directories to search.
942 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
943 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
944
945 : general looking path for locating libraries
946 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
947 glibpth="$glibpth /lib /usr/lib $xlibpth"
948 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
949 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
950
951 : Private path used by Configure to find libraries.  Its value
952 : is prepended to libpth. This variable takes care of special
953 : machines, like the mips.  Usually, it should be empty.
954 plibpth=''
955
956 : default library list
957 libswanted=''
958 : some systems want to use only the non-versioned libso:s
959 ignore_versioned_solibs=''
960 : full support for void wanted by default
961 defvoidused=15
962
963 : set useposix=false in your hint file to disable the POSIX extension.
964 useposix=true
965 : set useopcode=false in your hint file to disable the Opcode extension.
966 useopcode=true
967 : set usemultiplicity on the Configure command line to enable multiplicity.
968 : set usesocks on the Configure command line to enable socks.
969 : set usethreads on the Configure command line to enable threads.
970 : List of libraries we want.
971 : If anyone needs -lnet, put it in a hint file.
972 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
973 libswanted="$libswanted dld ld sun m rt c cposix posix"
974 libswanted="$libswanted ndir dir crypt sec"
975 libswanted="$libswanted ucb bsd BSD PW x"
976 : We probably want to search /usr/shlib before most other libraries.
977 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
978 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
979 glibpth="/usr/shlib $glibpth"
980 : Do not use vfork unless overridden by a hint file.
981 usevfork=false
982
983 : Find the basic shell for Bourne shell scripts
984 case "$sh" in
985 '')
986         case "$SYSTYPE" in
987         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
988         *) xxx='/bin/sh';;
989         esac
990         if test -f "$xxx"; then
991                 sh="$xxx"
992         else
993                 : Build up a list and do a single loop so we can 'break' out.
994                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
995                 for xxx in sh bash ksh pdksh ash; do
996                         for p in $pth; do
997                                 try="$try ${p}/${xxx}"
998                         done
999                 done
1000                 for xxx in $try; do
1001                         if test -f "$xxx"; then
1002                                 sh="$xxx";
1003                                 break
1004                         elif test -f "$xxx.exe"; then
1005                                 sh="$xxx";
1006                                 break
1007                         fi
1008                 done
1009         fi
1010         ;;
1011 esac
1012
1013 case "$sh" in
1014 '')     cat <<EOM >&2
1015 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1016
1017 Usually it's in /bin/sh.  How did you even get this far?
1018 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1019 we'll try to straighten this all out.
1020 EOM
1021         exit 1
1022         ;;
1023 esac
1024
1025 : see if sh knows # comments
1026 if `$sh -c '#' >/dev/null 2>&1`; then
1027         shsharp=true
1028         spitshell=cat
1029         xcat=/bin/cat
1030         test -f $xcat || xcat=/usr/bin/cat
1031         echo "#!$xcat" >try
1032         $eunicefix try
1033         chmod +x try
1034         ./try > today
1035         if test -s today; then
1036                 sharpbang='#!'
1037         else
1038                 echo "#! $xcat" > try
1039                 $eunicefix try
1040                 chmod +x try
1041                 ./try > today
1042                 if test -s today; then
1043                         sharpbang='#! '
1044                 else
1045                         sharpbang=': use '
1046                 fi
1047         fi
1048 else
1049         echo " "
1050         echo "Your $sh doesn't grok # comments--I will strip them later on."
1051         shsharp=false
1052         cd ..
1053         echo "exec grep -v '^[  ]*#'" >spitshell
1054         chmod +x spitshell
1055         $eunicefix spitshell
1056         spitshell=`pwd`/spitshell
1057         cd UU
1058         echo "I presume that if # doesn't work, #! won't work either!"
1059         sharpbang=': use '
1060 fi
1061 rm -f try today
1062
1063 : figure out how to guarantee sh startup
1064 case "$startsh" in
1065 '') startsh=${sharpbang}${sh} ;;
1066 *)
1067 esac
1068 cat >try <<EOSS
1069 $startsh
1070 set abc
1071 test "$?abc" != 1
1072 EOSS
1073
1074 chmod +x try
1075 $eunicefix try
1076 if ./try; then
1077         : echo "Yup, it does."
1078 else
1079         echo "Hmm... '$startsh' does not guarantee sh startup..."
1080         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1081 fi
1082 rm -f try
1083
1084
1085 : Save command line options in file UU/cmdline.opt for later use in
1086 : generating config.sh.
1087 cat > cmdline.opt <<EOSH
1088 # Configure command line arguments.
1089 config_arg0='$0'
1090 config_args='$*'
1091 config_argc=$#
1092 EOSH
1093 argn=1
1094 for arg in "$@"; do
1095         cat >>cmdline.opt <<EOSH
1096 config_arg$argn='$arg'
1097 EOSH
1098         argn=`expr $argn + 1`
1099 done
1100
1101 : produce awk script to parse command line options
1102 cat >options.awk <<'EOF'
1103 BEGIN {
1104         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1105
1106         len = length(optstr);
1107         for (i = 1; i <= len; i++) {
1108                 c = substr(optstr, i, 1);
1109                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1110                 if (a == ":") {
1111                         arg[c] = 1;
1112                         i++;
1113                 }
1114                 opt[c] = 1;
1115         }
1116 }
1117 {
1118         expect = 0;
1119         str = $0;
1120         if (substr(str, 1, 1) != "-") {
1121                 printf("'%s'\n", str);
1122                 next;
1123         }
1124         len = length($0);
1125         for (i = 2; i <= len; i++) {
1126                 c = substr(str, i, 1);
1127                 if (!opt[c]) {
1128                         printf("-%s\n", substr(str, i));
1129                         next;
1130                 }
1131                 printf("-%s\n", c);
1132                 if (arg[c]) {
1133                         if (i < len)
1134                                 printf("'%s'\n", substr(str, i + 1));
1135                         else
1136                                 expect = 1;
1137                         next;
1138                 }
1139         }
1140 }
1141 END {
1142         if (expect)
1143                 print "?";
1144 }
1145 EOF
1146
1147 : process the command line options
1148 set X `for arg in "$@"; do echo "X$arg"; done |
1149         sed -e s/X// | awk -f options.awk`
1150 eval "set $*"
1151 shift
1152 rm -f options.awk
1153
1154 : set up default values
1155 fastread=''
1156 reuseval=false
1157 config_sh=''
1158 alldone=''
1159 error=''
1160 silent=''
1161 extractsh=''
1162 override=''
1163 knowitall=''
1164 rm -f optdef.sh
1165 cat >optdef.sh <<EOS
1166 $startsh
1167 EOS
1168
1169
1170 : option parsing
1171 while test $# -gt 0; do
1172         case "$1" in
1173         -d) shift; fastread=yes;;
1174         -e) shift; alldone=cont;;
1175         -f)
1176                 shift
1177                 cd ..
1178                 if test -r "$1"; then
1179                         config_sh="$1"
1180                 else
1181                         echo "$me: cannot read config file $1." >&2
1182                         error=true
1183                 fi
1184                 cd UU
1185                 shift;;
1186         -h) shift; error=true;;
1187         -r) shift; reuseval=true;;
1188         -s) shift; silent=true; realsilent=true;;
1189         -E) shift; alldone=exit;;
1190         -K) shift; knowitall=true;;
1191         -O) shift; override=true;;
1192         -S) shift; silent=true; extractsh=true;;
1193         -D)
1194                 shift
1195                 case "$1" in
1196                 *=)
1197                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1198                         echo "$me: ignoring -D $1" >&2
1199                         ;;
1200                 *=*) echo "$1" | \
1201                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1202                 *) echo "$1='define'" >> optdef.sh;;
1203                 esac
1204                 shift
1205                 ;;
1206         -U)
1207                 shift
1208                 case "$1" in
1209                 *=) echo "$1" >> optdef.sh;;
1210                 *=*)
1211                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1212                         echo "$me: ignoring -U $1" >&2
1213                         ;;
1214                 *) echo "$1='undef'" >> optdef.sh;;
1215                 esac
1216                 shift
1217                 ;;
1218         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1219                 exit 0;;
1220         --) break;;
1221         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1222         *) break;;
1223         esac
1224 done
1225
1226 case "$error" in
1227 true)
1228         cat >&2 <<EOM
1229 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1230                  [-U symbol] [-U symbol=]
1231   -d : use defaults for all answers.
1232   -e : go on without questioning past the production of config.sh.
1233   -f : specify an alternate default configuration file.
1234   -h : print this help message and exit (with an error status).
1235   -r : reuse C symbols value if possible (skips costly nm extraction).
1236   -s : silent mode, only echoes questions and essential information.
1237   -D : define symbol to have some value:
1238          -D symbol         symbol gets the value 'define'
1239          -D symbol=value   symbol gets the value 'value'
1240   -E : stop at the end of questions, after having produced config.sh.
1241   -K : do not use unless you know what you are doing.
1242   -O : let -D and -U override definitions from loaded configuration file.
1243   -S : perform variable substitutions on all .SH files (can mix with -f)
1244   -U : undefine symbol:
1245          -U symbol    symbol gets the value 'undef'
1246          -U symbol=   symbol gets completely empty
1247   -V : print version number and exit (with a zero status).
1248 EOM
1249         exit 1
1250         ;;
1251 esac
1252
1253 : Sanity checks
1254 case "$fastread$alldone" in
1255 yescont|yesexit) ;;
1256 *)
1257         if test ! -t 0; then
1258                 echo "Say 'sh Configure', not 'sh <Configure'"
1259                 exit 1
1260         fi
1261         ;;
1262 esac
1263
1264 exec 4>&1
1265 case "$silent" in
1266 true) exec 1>/dev/null;;
1267 esac
1268
1269 : run the defines and the undefines, if any, but leave the file out there...
1270 touch optdef.sh
1271 . ./optdef.sh
1272
1273 : set package name
1274 package=perl5
1275 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1276 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1277 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1278 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1279 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1280 esac
1281
1282 : Some greps do not return status, grrr.
1283 echo "grimblepritz" >grimble
1284 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1285         contains=contains
1286 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1287         contains=grep
1288 else
1289         contains=contains
1290 fi
1291 rm -f grimble
1292 : the following should work in any shell
1293 case "$contains" in
1294 contains*)
1295         echo " "
1296         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1297         cat >contains <<'EOSS'
1298 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1299 EOSS
1300 chmod +x contains
1301 esac
1302
1303 : Find the path to the source tree
1304 case "$src" in
1305 '') case "$0" in
1306     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1307          case "$src" in
1308          /*)    ;;
1309          *)     src=`cd ../$src && pwd` ;;
1310          esac
1311          ;;
1312     *)   src='.';;
1313     esac;;
1314 esac
1315 case "$src" in
1316 '')     src=/
1317         rsrc=/
1318         ;;
1319 /*) rsrc="$src";;
1320 *) rsrc="../$src";;
1321 esac
1322 if test -f $rsrc/Configure && \
1323         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1324 then
1325    : found it, so we are ok.
1326 else
1327         rsrc=''
1328         for src in . .. ../.. ../../.. ../../../..; do
1329                 if test -f ../$src/Configure && \
1330                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1331                 then
1332                         rsrc=../$src
1333                         break
1334                 fi
1335         done
1336 fi
1337 case "$rsrc" in
1338 '')
1339         cat <<EOM >&4
1340
1341 Sorry, I can't seem to locate the source dir for $package.  Please start
1342 Configure with an explicit path -- i.e. /some/path/Configure.
1343
1344 EOM
1345         exit 1
1346         ;;
1347 ../.)   rsrc='..';;
1348 *)
1349         echo " "
1350         echo "Sources for $package found in \"$src\"." >&4
1351         ;;
1352 esac
1353
1354 : script used to extract .SH files with variable substitutions
1355 cat >extract <<'EOS'
1356 CONFIGDOTSH=true
1357 echo "Doing variable substitutions on .SH files..."
1358 if test -f $src/MANIFEST; then
1359         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1360 else
1361         echo "(Looking for .SH files under the source directory.)"
1362         set x `(cd $src; find . -name "*.SH" -print)`
1363 fi
1364 shift
1365 case $# in
1366 0) set x `(cd $src; echo *.SH)`; shift;;
1367 esac
1368 if test ! -f $src/$1; then
1369         shift
1370 fi
1371 mkdir_p='
1372 name=$1;
1373 create="";
1374 while test $name; do
1375         if test ! -d "$name"; then
1376                 create="$name $create";
1377                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1378                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1379         else
1380                 name="";
1381         fi;
1382 done;
1383 for file in $create; do
1384         mkdir $file;
1385 done
1386 '
1387 for file in $*; do
1388         case "$src" in
1389         ".")
1390                 case "$file" in
1391                 */*)
1392                         dir=`expr X$file : 'X\(.*\)/'`
1393                         file=`expr X$file : 'X.*/\(.*\)'`
1394                         (cd $dir && . ./$file)
1395                         ;;
1396                 *)
1397                         . ./$file
1398                         ;;
1399                 esac
1400                 ;;
1401         *)
1402                 case "$file" in
1403                 */*)
1404                         dir=`expr X$file : 'X\(.*\)/'`
1405                         file=`expr X$file : 'X.*/\(.*\)'`
1406                         (set x $dir; shift; eval $mkdir_p)
1407                         sh <$src/$dir/$file
1408                         ;;
1409                 *)
1410                         sh <$src/$file
1411                         ;;
1412                 esac
1413                 ;;
1414         esac
1415 done
1416 if test -f $src/config_h.SH; then
1417         if test ! -f config.h; then
1418         : oops, they left it out of MANIFEST, probably, so do it anyway.
1419         . $src/config_h.SH
1420         fi
1421 fi
1422 EOS
1423
1424 : extract files and exit if asked to do so
1425 case "$extractsh" in
1426 true)
1427         case "$realsilent" in
1428         true) ;;
1429         *) exec 1>&4;;
1430         esac
1431         case "$config_sh" in
1432         '') config_sh='config.sh';;
1433         esac
1434         echo " "
1435         echo "Fetching answers from $config_sh..."
1436         cd ..
1437         . $config_sh
1438         test "$override" && . ./optdef.sh
1439         echo " "
1440         . UU/extract
1441         rm -rf UU
1442         echo "Done."
1443         exit 0
1444         ;;
1445 esac
1446
1447 : Eunice requires " " instead of "", can you believe it
1448 echo " "
1449 : Here we go...
1450 echo "Beginning of configuration questions for $package."
1451
1452 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1453
1454 : first determine how to suppress newline on echo command
1455 echo " "
1456 echo "Checking echo to see how to suppress newlines..."
1457 (echo "hi there\c" ; echo " ") >.echotmp
1458 if $contains c .echotmp >/dev/null 2>&1 ; then
1459         echo "...using -n."
1460         n='-n'
1461         c=''
1462 else
1463         cat <<'EOM'
1464 ...using \c
1465 EOM
1466         n=''
1467         c='\c'
1468 fi
1469 echo $n "The star should be here-->$c"
1470 echo '*'
1471 rm -f .echotmp
1472
1473 : Now test for existence of everything in MANIFEST
1474 echo " "
1475 if test -f $rsrc/MANIFEST; then
1476         echo "First let's make sure your kit is complete.  Checking..." >&4
1477         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1478         rm -f missing
1479         tmppwd=`pwd`
1480         for filelist in x??; do
1481                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1482         done
1483         if test -s missing; then
1484                 cat missing >&4
1485                 cat >&4 <<'EOM'
1486
1487 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1488
1489 You have the option of continuing the configuration process, despite the
1490 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1491 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1492 and contact the author (perlbug@perl.com).
1493
1494 EOM
1495                 echo $n "Continue? [n] $c" >&4
1496                 read ans
1497                 case "$ans" in
1498                 y*)
1499                         echo "Continuing..." >&4
1500                         rm -f missing
1501                         ;;
1502                 *)
1503                         echo "ABORTING..." >&4
1504                         kill $$
1505                         ;;
1506                 esac
1507         else
1508                 echo "Looks good..."
1509         fi
1510 else
1511         echo "There is no MANIFEST file.  I hope your kit is complete !"
1512 fi
1513 rm -f missing x??
1514
1515 echo " "
1516 : Find the appropriate value for a newline for tr
1517 if test -n "$DJGPP"; then
1518        trnl='\012'
1519 fi
1520 if test X"$trnl" = X; then
1521         case "`echo foo|tr '\n' x 2>/dev/null`" in
1522         foox) trnl='\n' ;;
1523         esac
1524 fi
1525 if test X"$trnl" = X; then
1526         case "`echo foo|tr '\012' x 2>/dev/null`" in
1527         foox) trnl='\012' ;;
1528         esac
1529 fi
1530 if test X"$trnl" = X; then
1531         cat <<EOM >&2
1532
1533 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1534
1535 EOM
1536         exit 1
1537 fi
1538
1539 : compute the number of columns on the terminal for proper question formatting
1540 case "$COLUMNS" in
1541 '') COLUMNS='80';;
1542 esac
1543
1544 : set up the echo used in my read
1545 myecho="case \"\$xxxm\" in
1546 '') echo $n \"\$rp $c\" >&4;;
1547 *) case \"\$rp\" in
1548         '') echo $n \"[\$xxxm] $c\";;
1549         *)
1550                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1551                         echo \"\$rp\" >&4
1552                         echo $n \"[\$xxxm] $c\" >&4
1553                 else
1554                         echo $n \"\$rp [\$xxxm] $c\" >&4
1555                 fi
1556                 ;;
1557         esac;;
1558 esac"
1559
1560 : now set up to do reads with possible shell escape and default assignment
1561 cat <<EOSC >myread
1562 $startsh
1563 xxxm=\$dflt
1564 $myecho
1565 ans='!'
1566 case "\$fastread" in
1567 yes) case "\$dflt" in
1568         '') ;;
1569         *) ans='';
1570                 case "\$silent-\$rp" in
1571                 true-) ;;
1572                 *) echo " " >&4;;
1573                 esac;;
1574         esac;;
1575 *) case "\$silent" in
1576         true) case "\$rp" in
1577                 '') ans='';;
1578                 esac;;
1579         esac;;
1580 esac
1581 while expr "X\$ans" : "X!" >/dev/null; do
1582         read answ
1583         set x \$xxxm
1584         shift
1585         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1586         case  "\$answ" in
1587         "!")
1588                 sh 1>&4
1589                 echo " "
1590                 $myecho
1591                 ;;
1592         !*)
1593                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1594                 shift
1595                 sh 1>&4 -c "\$*"
1596                 echo " "
1597                 $myecho
1598                 ;;
1599         "\$ans")
1600                 case "\$ans" in
1601                 \\&*)
1602                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1603                         shift
1604                         case "\$1" in
1605                         -d)
1606                                 fastread=yes
1607                                 echo "(OK, I'll run with -d after this question.)" >&4
1608                                 ;;
1609                         -*)
1610                                 echo "*** Sorry, \$1 not supported yet." >&4
1611                                 ;;
1612                         esac
1613                         $myecho
1614                         ans=!
1615                         ;;
1616                 esac;;
1617         *)
1618                 case "\$aok" in
1619                 y)
1620                         echo "*** Substitution done -- please confirm."
1621                         xxxm="\$ans"
1622                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1623                         xxxm="\$ans"
1624                         ans=!
1625                         ;;
1626                 *)
1627                         echo "*** Error -- try again."
1628                         ans=!
1629                         ;;
1630                 esac
1631                 $myecho
1632                 ;;
1633         esac
1634         case "\$ans\$xxxm\$nostick" in
1635         '')
1636                 ans=!
1637                 $myecho
1638                 ;;
1639         esac
1640 done
1641 case "\$ans" in
1642 '') ans="\$xxxm";;
1643 esac
1644 EOSC
1645
1646 : create .config dir to save info across Configure sessions
1647 test -d ../.config || mkdir ../.config
1648 cat >../.config/README <<EOF
1649 This directory created by Configure to save information that should
1650 persist across sessions for $package.
1651
1652 You may safely delete it if you wish.
1653 EOF
1654
1655 : general instructions
1656 needman=true
1657 firsttime=true
1658 user=`(logname) 2>/dev/null`
1659 case "$user" in
1660 '') user=`whoami 2>&1`;;
1661 esac
1662 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1663         firsttime=false
1664         echo " "
1665         rp='Would you like to see the instructions?'
1666         dflt=n
1667         . ./myread
1668         case "$ans" in
1669         [yY]*) ;;
1670         *) needman=false;;
1671         esac
1672 fi
1673 if $needman; then
1674         cat <<EOH
1675
1676 This installation shell script will examine your system and ask you questions
1677 to determine how the perl5 package should be installed. If you get
1678 stuck on a question, you may use a ! shell escape to start a subshell or
1679 execute a command.  Many of the questions will have default answers in square
1680 brackets; typing carriage return will give you the default.
1681
1682 On some of the questions which ask for file or directory names you are allowed
1683 to use the ~name construct to specify the login directory belonging to "name",
1684 even if you don't have a shell which knows about that.  Questions where this is
1685 allowed will be marked "(~name ok)".
1686
1687 EOH
1688         rp=''
1689         dflt='Type carriage return to continue'
1690         . ./myread
1691         cat <<'EOH'
1692
1693 The prompter used in this script allows you to use shell variables and
1694 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1695 in the default answer, as if the default line was a set of arguments given to a
1696 script shell.  This means you may also use $* to repeat the whole default line,
1697 so you do not have to re-type everything to add something to the default.
1698
1699 Everytime there is a substitution, you will have to confirm.  If there is an
1700 error (e.g. an unmatched backtick), the default answer will remain unchanged
1701 and you will be prompted again.
1702
1703 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1704 the questions and use the computed defaults (or the previous answers if there
1705 was already a config.sh file). Type 'Configure -h' for a list of options.
1706 You may also start interactively and then answer '& -d' at any prompt to turn
1707 on the non-interactive behaviour for the remainder of the execution.
1708
1709 EOH
1710         . ./myread
1711         cat <<EOH
1712
1713 Much effort has been expended to ensure that this shell script will run on any
1714 Unix system.  If despite that it blows up on yours, your best bet is to edit
1715 Configure and run it again.  If you can't run Configure for some reason,
1716 you'll have to generate a config.sh file by hand.  Whatever problems you
1717 have, let me (perlbug@perl.com) know how I blew it.
1718
1719 This installation script affects things in two ways:
1720
1721 1) it may do direct variable substitutions on some of the files included
1722    in this kit.
1723 2) it builds a config.h file for inclusion in C programs.  You may edit
1724    any of these files as the need arises after running this script.
1725
1726 If you make a mistake on a question, there is no easy way to back up to it
1727 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1728 files.  Configure will offer to let you do this before it runs the SH files.
1729
1730 EOH
1731         dflt='Type carriage return to continue'
1732         . ./myread
1733         case "$firsttime" in
1734         true) echo $user >>../.config/instruct;;
1735         esac
1736 fi
1737
1738 : find out where common programs are
1739 echo " "
1740 echo "Locating common programs..." >&4
1741 cat <<EOSC >loc
1742 $startsh
1743 case \$# in
1744 0) exit 1;;
1745 esac
1746 thing=\$1
1747 shift
1748 dflt=\$1
1749 shift
1750 for dir in \$*; do
1751         case "\$thing" in
1752         .)
1753         if test -d \$dir/\$thing; then
1754                 echo \$dir
1755                 exit 0
1756         fi
1757         ;;
1758         *)
1759         for thisthing in \$dir/\$thing; do
1760                 : just loop through to pick last item
1761         done
1762         if test -f \$thisthing; then
1763                 echo \$thisthing
1764                 exit 0
1765         elif test -f \$dir/\$thing.exe; then
1766                 if test -n "$DJGPP"; then
1767                         echo \$dir/\$thing.exe
1768                 else
1769                         : on Eunice apparently
1770                         echo \$dir/\$thing
1771                 fi
1772                 exit 0
1773         fi
1774         ;;
1775         esac
1776 done
1777 echo \$dflt
1778 exit 1
1779 EOSC
1780 chmod +x loc
1781 $eunicefix loc
1782 loclist="
1783 awk
1784 cat
1785 comm
1786 cp
1787 echo
1788 expr
1789 grep
1790 ls
1791 make
1792 mkdir
1793 rm
1794 sed
1795 sort
1796 touch
1797 tr
1798 uniq
1799 "
1800 trylist="
1801 Mcc
1802 ar
1803 byacc
1804 cpp
1805 csh
1806 date
1807 egrep
1808 gzip
1809 less
1810 ln
1811 more
1812 nm
1813 nroff
1814 pg
1815 test
1816 uname
1817 zip
1818 "
1819 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1820 pth="$pth /lib /usr/lib"
1821 for file in $loclist; do
1822         eval xxx=\$$file
1823         case "$xxx" in
1824         /*|?:[\\/]*)
1825                 if test -f "$xxx"; then
1826                         : ok
1827                 else
1828                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1829                         xxx=`./loc $file $file $pth`
1830                 fi
1831                 ;;
1832         '') xxx=`./loc $file $file $pth`;;
1833         *) xxx=`./loc $xxx $xxx $pth`;;
1834         esac
1835         eval $file=$xxx
1836         eval _$file=$xxx
1837         case "$xxx" in
1838         /*)
1839                 echo $file is in $xxx.
1840                 ;;
1841         ?:[\\/]*)
1842                 echo $file is in $xxx.
1843                 ;;
1844         *)
1845                 echo "I don't know where '$file' is, and my life depends on it." >&4
1846                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1847                 exit 1
1848                 ;;
1849         esac
1850 done
1851 echo " "
1852 echo "Don't worry if any of the following aren't found..."
1853 say=offhand
1854 for file in $trylist; do
1855         eval xxx=\$$file
1856         case "$xxx" in
1857         /*|?:[\\/]*)
1858                 if test -f "$xxx"; then
1859                         : ok
1860                 else
1861                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1862                         xxx=`./loc $file $file $pth`
1863                 fi
1864                 ;;
1865         '') xxx=`./loc $file $file $pth`;;
1866         *) xxx=`./loc $xxx $xxx $pth`;;
1867         esac
1868         eval $file=$xxx
1869         eval _$file=$xxx
1870         case "$xxx" in
1871         /*)
1872                 echo $file is in $xxx.
1873                 ;;
1874         ?:[\\/]*)
1875                 echo $file is in $xxx.
1876                 ;;
1877         *)
1878                 echo "I don't see $file out there, $say."
1879                 say=either
1880                 ;;
1881         esac
1882 done
1883 case "$egrep" in
1884 egrep)
1885         echo "Substituting grep for egrep."
1886         egrep=$grep
1887         ;;
1888 esac
1889 case "$ln" in
1890 ln)
1891         echo "Substituting cp for ln."
1892         ln=$cp
1893         ;;
1894 esac
1895 case "$test" in
1896 test)
1897         echo "Hopefully test is built into your sh."
1898         ;;
1899 *)
1900         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1901                 echo "Using the test built into your sh."
1902                 test=test
1903                 _test=test
1904         fi
1905         ;;
1906 esac
1907 case "$echo" in
1908 echo)
1909         echo "Hopefully echo is built into your sh."
1910         ;;
1911 '') ;;
1912 *)
1913         echo " "
1914 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1915         $echo $n "hi there$c" >foo1
1916         echo $n "hi there$c" >foo2
1917         if cmp foo1 foo2 >/dev/null 2>&1; then
1918                 echo "They are compatible.  In fact, they may be identical."
1919         else
1920                 case "$n" in
1921                 '-n') n='' c='\c';;
1922                 *) n='-n' c='';;
1923                 esac
1924                 cat <<FOO
1925 They are not compatible!  You are probably running ksh on a non-USG system.
1926 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1927 have echo built in and we may have to run some Bourne shell scripts.  That
1928 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1929
1930 FOO
1931                 $echo $n "The star should be here-->$c"
1932                 $echo "*"
1933         fi
1934         $rm -f foo1 foo2
1935         ;;
1936 esac
1937
1938 : determine whether symbolic links are supported
1939 echo " "
1940 $touch blurfl
1941 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1942         echo "Symbolic links are supported." >&4
1943         lns="$ln -s"
1944 else
1945         echo "Symbolic links are NOT supported." >&4
1946         lns="$ln"
1947 fi
1948 $rm -f blurfl sym
1949
1950 : see whether [:lower:] and [:upper:] are supported character classes
1951 echo " "
1952 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1953 ABYZ)
1954         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1955         up='[:upper:]'
1956         low='[:lower:]'
1957         ;;
1958 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1959         # (0xc9 and 0xd1), therefore that is a nice testing point.
1960         if test "X$up" = X -o "X$low" = X; then
1961             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1962             ij) up='[A-Z]'
1963                 low='[a-z]'
1964                 ;;
1965             esac
1966         fi
1967         if test "X$up" = X -o "X$low" = X; then
1968             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1969             ij) up='A-Z'
1970                 low='a-z'
1971                 ;;
1972             esac
1973         fi
1974         if test "X$up" = X -o "X$low" = X; then
1975             case "`echo IJ | od -x 2>/dev/null`" in
1976             *C9D1*|*c9d1*)
1977                 echo "Hey, this might be EBCDIC." >&4
1978                 if test "X$up" = X -o "X$low" = X; then
1979                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1980                     ij) up='[A-IJ-RS-Z]'
1981                         low='[a-ij-rs-z]'
1982                         ;;
1983                     esac
1984                 fi
1985                 if test "X$up" = X -o "X$low" = X; then
1986                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1987                     ij) up='A-IJ-RS-Z'
1988                         low='a-ij-rs-z'
1989                         ;;
1990                     esac
1991                 fi
1992                 ;;
1993             esac
1994         fi
1995 esac
1996 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1997 ij)
1998     echo "Using $up and $low to convert case." >&4
1999     ;;
2000 *)
2001     echo "I don't know how to translate letters from upper to lower case." >&4
2002     echo "Your tr is not acting any way I know of." >&4
2003     exit 1
2004     ;;
2005 esac
2006 : set up the translation script tr, must be called with ./tr of course
2007 cat >tr <<EOSC
2008 $startsh
2009 case "\$1\$2" in
2010 '[A-Z][a-z]') exec $tr '$up' '$low';;
2011 '[a-z][A-Z]') exec $tr '$low' '$up';;
2012 esac
2013 exec $tr "\$@"
2014 EOSC
2015 chmod +x tr
2016 $eunicefix tr
2017
2018 : Try to determine whether config.sh was made on this system
2019 case "$config_sh" in
2020 '')
2021 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2022 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2023 # because the A-Z/a-z are not consecutive.
2024 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2025         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2026 newmyuname="$myuname"
2027 dflt=n
2028 case "$knowitall" in
2029 '')
2030         if test -f ../config.sh; then
2031                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2032                         eval "`grep myuname= ../config.sh`"
2033                 fi
2034                 if test "X$myuname" = "X$newmyuname"; then
2035                         dflt=y
2036                 fi
2037         fi
2038         ;;
2039 *) dflt=y;;
2040 esac
2041
2042 : Get old answers from old config file if Configure was run on the
2043 : same system, otherwise use the hints.
2044 hint=default
2045 cd ..
2046 if test -f config.sh; then
2047         echo " "
2048         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2049         . UU/myread
2050         case "$ans" in
2051         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2052         *)  echo "Fetching default answers from your old config.sh file..." >&4
2053                 tmp_n="$n"
2054                 tmp_c="$c"
2055                 tmp_sh="$sh"
2056                 . ./config.sh
2057                 cp config.sh UU
2058                 n="$tmp_n"
2059                 c="$tmp_c"
2060                 : Older versions did not always set $sh.  Catch re-use of such
2061                 : an old config.sh.
2062                 case "$sh" in
2063                 '') sh="$tmp_sh" ;;
2064                 esac
2065                 hint=previous
2066                 ;;
2067         esac
2068 fi
2069 if test ! -f config.sh; then
2070         $cat <<EOM
2071
2072 First time through, eh?  I have some defaults handy for some systems
2073 that need some extra help getting the Configure answers right:
2074
2075 EOM
2076         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2077         dflt=''
2078         : Half the following guesses are probably wrong... If you have better
2079         : tests or hints, please send them to perlbug@perl.com
2080         : The metaconfig authors would also appreciate a copy...
2081         $test -f /irix && osname=irix
2082         $test -f /xenix && osname=sco_xenix
2083         $test -f /dynix && osname=dynix
2084         $test -f /dnix && osname=dnix
2085         $test -f /lynx.os && osname=lynxos
2086         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2087         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2088         $test -f /bin/mips && /bin/mips && osname=mips
2089         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2090                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2091         $test -d /usr/apollo/bin && osname=apollo
2092         $test -f /etc/saf/_sactab && osname=svr4
2093         $test -d /usr/include/minix && osname=minix
2094         if $test -d /MachTen -o -d /MachTen_Folder; then
2095                 osname=machten
2096                 if $test -x /sbin/version; then
2097                         osvers=`/sbin/version | $awk '{print $2}' |
2098                         $sed -e 's/[A-Za-z]$//'`
2099                 elif $test -x /usr/etc/version; then
2100                         osvers=`/usr/etc/version | $awk '{print $2}' |
2101                         $sed -e 's/[A-Za-z]$//'`
2102                 else
2103                         osvers="$2.$3"
2104                 fi
2105         fi
2106        $test -f /sys/posix.dll &&
2107                $test -f /usr/bin/what &&
2108                set X `/usr/bin/what /sys/posix.dll` &&
2109                $test "$3" = UWIN &&
2110                osname=uwin &&
2111                osvers="$5"
2112         if $test -f $uname; then
2113                 set X $myuname
2114                 shift
2115
2116                 case "$5" in
2117                 fps*) osname=fps ;;
2118                 mips*)
2119                         case "$4" in
2120                         umips) osname=umips ;;
2121                         *) osname=mips ;;
2122                         esac;;
2123                 [23]100) osname=mips ;;
2124                 next*) osname=next ;;
2125                 i386*)
2126                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2127                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2128                                 osname='sco'
2129                                 osvers=$tmp
2130                         elif $test -f /etc/kconfig; then
2131                                 osname=isc
2132                                 if test "$lns" = "$ln -s"; then
2133                                         osvers=4
2134                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2135                                         osvers=3
2136                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2137                                         osvers=2
2138                                 fi
2139                         fi
2140                         tmp=''
2141                         ;;
2142                 pc*)
2143                         if test -n "$DJGPP"; then
2144                                 osname=dos
2145                                 osvers=djgpp
2146                         fi
2147                         ;;
2148                 esac
2149
2150                 case "$1" in
2151                 aix) osname=aix
2152                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2153                         case "$tmp" in
2154                         'not found') osvers="$4"."$3" ;;
2155                         '<3240'|'<>3240') osvers=3.2.0 ;;
2156                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2157                         '=3250'|'>3250') osvers=3.2.5 ;;
2158                         *) osvers=$tmp;;
2159                         esac
2160                         ;;
2161                 *dc.osx) osname=dcosx
2162                         osvers="$3"
2163                         ;;
2164                 dnix) osname=dnix
2165                         osvers="$3"
2166                         ;;
2167                 domainos) osname=apollo
2168                         osvers="$3"
2169                         ;;
2170                 dgux) osname=dgux 
2171                         osvers="$3"
2172                         ;;
2173                 dynixptx*) osname=dynixptx
2174                         osvers=`echo "$4"|sed 's/^v//'`
2175                         ;;
2176                 freebsd) osname=freebsd 
2177                         osvers="$3" ;;
2178                 genix) osname=genix ;;
2179                 hp*) osname=hpux 
2180                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2181                         ;;
2182                 irix*) osname=irix
2183                         case "$3" in
2184                         4*) osvers=4 ;;
2185                         5*) osvers=5 ;;
2186                         *)      osvers="$3" ;;
2187                         esac
2188                         ;;
2189                 linux) osname=linux
2190                         case "$3" in
2191                         *)      osvers="$3" ;;
2192                         esac
2193                         ;;
2194                 MiNT) osname=mint
2195                         ;;
2196                 netbsd*) osname=netbsd
2197                         osvers="$3"
2198                         ;;
2199                 news-os) osvers="$3"
2200                         case "$3" in
2201                         4*) osname=newsos4 ;;
2202                         *) osname=newsos ;;
2203                         esac
2204                         ;;
2205                 bsd386) osname=bsd386
2206                         osvers=`$uname -r`
2207                         ;;
2208                 POSIX-BC | posix-bc ) osname=posix-bc
2209                         osvers="$3"
2210                         ;;
2211                 powerux | power_ux | powermax_os | powermaxos | \
2212                 powerunix | power_unix) osname=powerux
2213                         osvers="$3"
2214                         ;;
2215                 next*) osname=next ;;
2216                 solaris) osname=solaris
2217                         case "$3" in
2218                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2219                         *)      osvers="$3" ;;
2220                         esac
2221                         ;;
2222                 sunos) osname=sunos
2223                         case "$3" in
2224                         5*) osname=solaris
2225                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2226                         *)      osvers="$3" ;;
2227                         esac
2228                         ;;
2229                 titanos) osname=titanos
2230                         case "$3" in
2231                         1*) osvers=1 ;;
2232                         2*) osvers=2 ;;
2233                         3*) osvers=3 ;;
2234                         4*) osvers=4 ;;
2235                         *)      osvers="$3" ;;
2236                         esac
2237                         ;;
2238                 ultrix) osname=ultrix
2239                         osvers="$3"
2240                         ;;
2241                 osf1|mls+)      case "$5" in
2242                                 alpha)
2243                                         osname=dec_osf
2244                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2245                                         ;;
2246                         hp*)    osname=hp_osf1  ;;
2247                         mips)   osname=mips_osf1 ;;
2248                         esac
2249                         ;;
2250                 uts) osname=uts 
2251                         osvers="$3"
2252                         ;;
2253                 qnx) osname=qnx
2254                         osvers="$4"
2255                         ;;
2256                 $2) case "$osname" in
2257                         *isc*) ;;
2258                         *freebsd*) ;;
2259                         svr*)
2260                                 : svr4.x or possibly later
2261                                 case "svr$3" in 
2262                                 ${osname}*)
2263                                         osname=svr$3
2264                                         osvers=$4
2265                                         ;;
2266                                 esac
2267                                 case "$osname" in
2268                                 svr4.0)
2269                                         : Check for ESIX
2270                                         if test -f /stand/boot ; then
2271                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2272                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2273                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2274                                                         if test -n "$isesix"; then
2275                                                                 osname=esix4
2276                                                         fi
2277                                                 fi
2278                                         fi
2279                                         ;;
2280                                 esac
2281                                 ;;
2282                         *)      if test -f /etc/systemid; then
2283                                         osname=sco
2284                                         set `echo $3 | $sed 's/\./ /g'` $4
2285                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2286                                                 osvers=$1.$2.$3
2287                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2288                                                 osvers=$1.$2
2289                                         elif $test -f $src/hints/sco_$1.sh; then
2290                                                 osvers=$1
2291                                         fi
2292                                 else
2293                                         case "$osname" in
2294                                         '') : Still unknown.  Probably a generic Sys V.
2295                                                 osname="sysv"
2296                                                 osvers="$3"
2297                                                 ;;
2298                                         esac
2299                                 fi
2300                                 ;;
2301                         esac
2302                         ;;
2303                 *)      case "$osname" in
2304                         '') : Still unknown.  Probably a generic BSD.
2305                                 osname="$1"
2306                                 osvers="$3"
2307                                 ;;
2308                         esac
2309                         ;;
2310                 esac
2311         else
2312                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2313                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2314                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2315                                 osname=news_os
2316                         fi
2317                         $rm -f UU/kernel.what
2318                 elif test -d c:/.; then
2319                         set X $myuname
2320                         osname=os2
2321                         osvers="$5"
2322                 fi
2323         fi
2324         
2325         : Now look for a hint file osname_osvers, unless one has been
2326         : specified already.
2327         case "$hintfile" in
2328         ''|' ')
2329                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2330                 : Also try without trailing minor version numbers.
2331                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2332                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2333                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2334                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2335                 case "$file" in
2336                 '') dflt=none ;;
2337                 *)  case "$osvers" in
2338                         '') dflt=$file
2339                                 ;;
2340                         *)  if $test -f $src/hints/$file.sh ; then
2341                                         dflt=$file
2342                                 elif $test -f $src/hints/$xfile.sh ; then
2343                                         dflt=$xfile
2344                                 elif $test -f $src/hints/$xxfile.sh ; then
2345                                         dflt=$xxfile
2346                                 elif $test -f $src/hints/$xxxfile.sh ; then
2347                                         dflt=$xxxfile
2348                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2349                                         dflt=$xxxxfile
2350                                 elif $test -f "$src/hints/${osname}.sh" ; then
2351                                         dflt="${osname}"
2352                                 else
2353                                         dflt=none
2354                                 fi
2355                                 ;;
2356                         esac
2357                         ;;
2358                 esac
2359                 if $test -f Policy.sh ; then
2360                         case "$dflt" in
2361                         *Policy*) ;;
2362                         none) dflt="Policy" ;;
2363                         *) dflt="Policy $dflt" ;;
2364                         esac
2365                 fi
2366                 ;;
2367         *)
2368                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2369                 ;;
2370         esac
2371
2372         if $test -f Policy.sh ; then
2373                 $cat <<EOM
2374
2375 There's also a Policy hint file available, which should make the
2376 site-specific (policy) questions easier to answer.
2377 EOM
2378
2379         fi
2380
2381         $cat <<EOM
2382
2383 You may give one or more space-separated answers, or "none" if appropriate.
2384 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2385 is a good thing.  DO NOT give a wrong version or a wrong OS.
2386
2387 EOM
2388
2389         rp="Which of these apply, if any?"
2390         . UU/myread
2391         tans=$ans
2392         for file in $tans; do
2393                 if $test X$file = XPolicy -a -f Policy.sh; then
2394                         . Policy.sh
2395                         $cat Policy.sh >> UU/config.sh
2396                 elif $test -f $src/hints/$file.sh; then
2397                         . $src/hints/$file.sh
2398                         $cat $src/hints/$file.sh >> UU/config.sh
2399                 elif $test X$tans = X -o X$tans = Xnone ; then
2400                         : nothing
2401                 else
2402                         : Give one chance to correct a possible typo.
2403                         echo "$file.sh does not exist"
2404                         dflt=$file
2405                         rp="hint to use instead?"
2406                         . UU/myread
2407                         for file in $ans; do
2408                                 if $test -f "$src/hints/$file.sh"; then
2409                                         . $src/hints/$file.sh
2410                                         $cat $src/hints/$file.sh >> UU/config.sh
2411                                 elif $test X$ans = X -o X$ans = Xnone ; then
2412                                         : nothing
2413                                 else
2414                                         echo "$file.sh does not exist -- ignored."
2415                                 fi
2416                         done
2417                 fi
2418         done
2419
2420         hint=recommended
2421         : Remember our hint file for later.
2422         if $test -f "$src/hints/$file.sh" ; then
2423                 hintfile="$file"
2424         else
2425                 hintfile=''
2426         fi
2427 fi
2428 cd UU
2429 ;;
2430 *)
2431         echo " "
2432         echo "Fetching default answers from $config_sh..." >&4
2433         tmp_n="$n"
2434         tmp_c="$c"
2435         cd ..
2436         cp $config_sh config.sh 2>/dev/null
2437         chmod +w config.sh
2438         . ./config.sh
2439         cd UU
2440         cp ../config.sh .
2441         n="$tmp_n"
2442         c="$tmp_c"
2443         hint=previous
2444         ;;
2445 esac
2446 test "$override" && . ./optdef.sh
2447 myuname="$newmyuname"
2448
2449 : Restore computed paths
2450 for file in $loclist $trylist; do
2451         eval $file="\$_$file"
2452 done
2453
2454 cat << EOM
2455
2456 Configure uses the operating system name and version to set some defaults.
2457 The default value is probably right if the name rings a bell. Otherwise,
2458 since spelling matters for me, either accept the default or answer "none"
2459 to leave it blank.
2460
2461 EOM
2462 case "$osname" in
2463         ''|' ')
2464                 case "$hintfile" in
2465                 ''|' '|none) dflt=none ;;
2466                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2467                 esac
2468                 ;;
2469         *) dflt="$osname" ;;
2470 esac
2471 rp="Operating system name?"
2472 . ./myread
2473 case "$ans" in
2474 none)  osname='' ;;
2475 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2476 esac
2477 echo " "
2478 case "$osvers" in
2479         ''|' ')
2480                 case "$hintfile" in
2481                 ''|' '|none) dflt=none ;;
2482                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2483                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2484                         case "$dflt" in
2485                         ''|' ') dflt=none ;;
2486                         esac
2487                         ;;
2488                 esac
2489                 ;;
2490         *) dflt="$osvers" ;;
2491 esac
2492 rp="Operating system version?"
2493 . ./myread
2494 case "$ans" in
2495 none)  osvers='' ;;
2496 *) osvers="$ans" ;;
2497 esac
2498
2499 : who configured the system
2500 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2501 cf_by=`(logname) 2>/dev/null`
2502 case "$cf_by" in
2503 "")
2504         cf_by=`(whoami) 2>/dev/null`
2505         case "$cf_by" in
2506         "") cf_by=unknown ;;
2507         esac ;;
2508 esac
2509
2510 : set up the script used to warn in case of inconsistency
2511 cat <<EOS >whoa
2512 $startsh
2513 EOS
2514 cat <<'EOSC' >>whoa
2515 dflt=y
2516 echo " "
2517 echo "*** WHOA THERE!!! ***" >&4
2518 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2519 rp="    Keep the $hint value?"
2520 . ./myread
2521 case "$ans" in
2522 y) td=$was; tu=$was;;
2523 esac
2524 EOSC
2525
2526 : function used to set $1 to $val
2527 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2528 case "$val$was" in
2529 $define$undef) . ./whoa; eval "$var=\$td";;
2530 $undef$define) . ./whoa; eval "$var=\$tu";;
2531 *) eval "$var=$val";;
2532 esac'
2533
2534 cat <<EOM
2535
2536 Perl can be built to take advantage of threads, on some systems.
2537 To do so, Configure must be run with -Dusethreads.
2538
2539 Note that threading is a highly experimental feature, and
2540 some known race conditions still remain.  If you choose to try
2541 it, be very sure to not actually deploy it for production
2542 purposes.  README.threads has more details, and is required
2543 reading if you enable threads.
2544 EOM
2545 case "$usethreads" in
2546 $define|true|[yY]*)     dflt='y';;
2547 *) dflt='n';;
2548 esac
2549 rp='Build a threading Perl?'
2550 . ./myread
2551 case "$ans" in
2552 y|Y)    val="$define" ;;     
2553 *)      val="$undef" ;;
2554 esac
2555 set usethreads
2556 eval $setvar 
2557
2558 case "$d_oldpthreads" in
2559 '')     : Configure tests would be welcome here.  For now, assume undef.
2560         val="$undef" ;;
2561 *)      val="$d_oldpthreads" ;;
2562 esac
2563 set d_oldpthreads
2564 eval $setvar
2565
2566
2567 case "$usethreads" in
2568 "$define"|true|[yY]*)
2569 : Look for a hint-file generated 'call-back-unit'.  If the
2570 : user has specified that a threading perl is to be built,
2571 : we may need to set or change some other defaults.
2572         if $test -f usethreads.cbu; then
2573                 . ./usethreads.cbu
2574         fi
2575         case "$osname" in
2576         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2577                 # Known thread-capable platforms.
2578                 ;;
2579         *)
2580                 cat >&4 <<EOM
2581 $osname is not known to support threads.
2582 Please let perlbug@perl.com know how to do that.
2583
2584 Cannot continue, aborting.
2585 EOM
2586                 exit 1
2587         ;;
2588         esac # $osname
2589     ;;
2590 esac # $usethreads
2591
2592 cat <<EOM
2593
2594 Perl can be built so that multiple Perl interpreters can coexist
2595 within the same Perl executable.  To do so, Configure must be run with
2596 -Dusemultiplicity.
2597
2598 Normally you do not need this and you should answer no.
2599
2600 EOM
2601 case "$usemultiplicity" in
2602 $define|true|[yY]*)     dflt='y';;
2603 *) dflt='n';;
2604 esac
2605 rp='Build Perl for multiplicity?'
2606 . ./myread
2607 case "$ans" in
2608 y|Y)    val="$define" ;;     
2609 *)      val="$undef" ;;
2610 esac
2611 set usemultiplicity
2612 eval $setvar 
2613
2614 cat <<EOM
2615
2616 Perl can be built to take advantage of explicit 64-bit interfaces,
2617 on some systems.  To do so, Configure must be run with -Duse64bits.
2618
2619 If this doesn't make any sense to you, just accept the default 'n'.
2620 EOM
2621 case "$use64bits" in
2622 $define|true|[yY]*)     dflt='y';;
2623 *) dflt='n';;
2624 esac
2625 rp='Try to use explicit 64-bit interfaces, if available?'
2626 . ./myread
2627 case "$ans" in
2628 y|Y) 
2629         val="$define"
2630         ;;     
2631 *)      
2632         val="$undef"
2633         ;;
2634 esac
2635 set use64bits
2636 eval $setvar
2637
2638 case "$archname64" in
2639 '') archname64='' ;;    # not a typo
2640 esac
2641
2642 case "$use64bits" in
2643 "$define"|true|[yY]*)
2644 : Look for a hint-file generated 'call-back-unit'.  If the
2645 : user has specified that a 64 bit perl is to be built,
2646 : we may need to set or change some other defaults.
2647         if $test -f use64bits.cbu; then
2648                 . ./use64bits.cbu
2649         fi
2650         case "$osname" in
2651         aix|dec_osf|hpux|irix|solaris|unicos)
2652                 # Known 64-bit capable platforms.
2653                 ;;
2654         *)
2655                 cat >&4 <<EOM
2656 $osname is not known to support 64-bit interfaces.
2657 Please let perlbug@perl.com know how to do that.
2658
2659 Cannot continue, aborting.
2660 EOM
2661                 exit 1
2662                 ;;
2663         esac
2664         ;;
2665 esac
2666
2667 : determine the architecture name
2668 echo " "
2669 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2670         tarch=`arch`"-$osname"
2671 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2672         if uname -m > tmparch 2>&1 ; then
2673                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2674                         -e 's/$/'"-$osname/" tmparch`
2675         else
2676                 tarch="$osname"
2677         fi
2678         $rm -f tmparch
2679 else
2680         tarch="$osname"
2681 fi
2682 case "$myarchname" in
2683 ''|"$tarch") ;;
2684 *)
2685         echo "(Your architecture name used to be $myarchname.)"
2686         archname=''
2687         ;;
2688 esac
2689 myarchname="$tarch"
2690 case "$archname" in
2691 '') dflt="$tarch";;
2692 *) dflt="$archname";;
2693 esac
2694 rp='What is your architecture name'
2695 . ./myread
2696 archname="$ans"
2697 case "$usethreads" in
2698 $define)
2699         echo "Threads selected." >&4
2700         case "$archname" in
2701         *-thread*) echo "...and architecture name already has -thread." >&4
2702                 ;;
2703         *)      archname="$archname-thread"
2704                 echo "...setting architecture name to $archname." >&4
2705                 ;;
2706         esac
2707         ;;
2708 esac
2709 case "$usemultiplicity" in
2710 $define)
2711         echo "Multiplicity selected." >&4
2712         case "$archname" in
2713         *-multi*) echo "...and architecture name already has -multi." >&4
2714                 ;;
2715         *)      archname="$archname-multi"
2716                 echo "...setting architecture name to $archname." >&4
2717                 ;;
2718         esac
2719         ;;
2720 esac
2721 case "$use64bits" in
2722 $define)
2723         echo "Explicit 64-bitness selected." >&4
2724         case "$archname64" in
2725         '')
2726                 ;;
2727         *)
2728                 case "$archname" in
2729                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2730                         ;;
2731                 *)      archname="$archname-$archname64"
2732                         echo "...setting architecture name to $archname." >&4
2733                         ;;
2734                 esac
2735                 ;;
2736         esac
2737 esac
2738
2739 : decide how portable to be.  Allow command line overrides.
2740 case "$d_portable" in
2741 "$undef") ;;
2742 *)      d_portable="$define" ;;
2743 esac
2744
2745 : set up shell script to do ~ expansion
2746 cat >filexp <<EOSS
2747 $startsh
2748 : expand filename
2749 case "\$1" in
2750  ~/*|~)
2751         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2752         ;;
2753  ~*)
2754         if $test -f /bin/csh; then
2755                 /bin/csh -f -c "glob \$1"
2756                 failed=\$?
2757                 echo ""
2758                 exit \$failed
2759         else
2760                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2761                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2762                 if $test ! -d "\$dir"; then
2763                         me=\`basename \$0\`
2764                         echo "\$me: can't locate home directory for: \$name" >&2
2765                         exit 1
2766                 fi
2767                 case "\$1" in
2768                 */*)
2769                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2770                         ;;
2771                 *)
2772                         echo \$dir
2773                         ;;
2774                 esac
2775         fi
2776         ;;
2777 *)
2778         echo \$1
2779         ;;
2780 esac
2781 EOSS
2782 chmod +x filexp
2783 $eunicefix filexp
2784
2785 : now set up to get a file name
2786 cat <<EOS >getfile
2787 $startsh
2788 EOS
2789 cat <<'EOSC' >>getfile
2790 tilde=''
2791 fullpath=''
2792 already=''
2793 skip=''
2794 none_ok=''
2795 exp_file=''
2796 nopath_ok=''
2797 orig_rp="$rp"
2798 orig_dflt="$dflt"
2799 case "$gfpth" in
2800 '') gfpth='.' ;;
2801 esac
2802
2803 case "$fn" in
2804 *\(*)
2805         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2806         fn=`echo $fn | sed 's/(.*)//'`
2807         ;;
2808 esac
2809
2810 case "$fn" in
2811 *:*)
2812         loc_file=`expr $fn : '.*:\(.*\)'`
2813         fn=`expr $fn : '\(.*\):.*'`
2814         ;;
2815 esac
2816
2817 case "$fn" in
2818 *~*) tilde=true;;
2819 esac
2820 case "$fn" in
2821 */*) fullpath=true;;
2822 esac
2823 case "$fn" in
2824 *+*) skip=true;;
2825 esac
2826 case "$fn" in
2827 *n*) none_ok=true;;
2828 esac
2829 case "$fn" in
2830 *e*) exp_file=true;;
2831 esac
2832 case "$fn" in
2833 *p*) nopath_ok=true;;
2834 esac
2835
2836 case "$fn" in
2837 *f*) type='File';;
2838 *d*) type='Directory';;
2839 *l*) type='Locate';;
2840 esac
2841
2842 what="$type"
2843 case "$what" in
2844 Locate) what='File';;
2845 esac
2846
2847 case "$exp_file" in
2848 '')
2849         case "$d_portable" in
2850         "$define") ;;
2851         *) exp_file=true;;
2852         esac
2853         ;;
2854 esac
2855
2856 cd ..
2857 while test "$type"; do
2858         redo=''
2859         rp="$orig_rp"
2860         dflt="$orig_dflt"
2861         case "$tilde" in
2862         true) rp="$rp (~name ok)";;
2863         esac
2864         . UU/myread
2865         if test -f UU/getfile.ok && \
2866                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2867         then
2868                 value="$ans"
2869                 ansexp="$ans"
2870                 break
2871         fi
2872         case "$ans" in
2873         none)
2874                 value=''
2875                 ansexp=''
2876                 case "$none_ok" in
2877                 true) type='';;
2878                 esac
2879                 ;;
2880         *)
2881                 case "$tilde" in
2882                 '') value="$ans"
2883                         ansexp="$ans";;
2884                 *)
2885                         value=`UU/filexp $ans`
2886                         case $? in
2887                         0)
2888                                 if test "$ans" != "$value"; then
2889                                         echo "(That expands to $value on this system.)"
2890                                 fi
2891                                 ;;
2892                         *) value="$ans";;
2893                         esac
2894                         ansexp="$value"
2895                         case "$exp_file" in
2896                         '') value="$ans";;
2897                         esac
2898                         ;;
2899                 esac
2900                 case "$fullpath" in
2901                 true)
2902                         case "$ansexp" in
2903                         /*) value="$ansexp" ;;
2904                         *)
2905                                 redo=true
2906                                 case "$already" in
2907                                 true)
2908                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2909                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2910                                         ;;
2911                                 *)
2912                                 echo "Please give a full path name, starting with slash." >&4
2913                                         case "$tilde" in
2914                                         true)
2915                                 echo "Note that using ~name is ok provided it expands well." >&4
2916                                                 already=true
2917                                                 ;;
2918                                         esac
2919                                 esac
2920                                 ;;
2921                         esac
2922                         ;;
2923                 esac
2924                 case "$redo" in
2925                 '')
2926                         case "$type" in
2927                         File)
2928                                 for fp in $gfpth; do
2929                                         if test "X$fp" = X.; then
2930                                             pf="$ansexp"
2931                                         else    
2932                                             pf="$fp/$ansexp"
2933                                         fi
2934                                         if test -f "$pf"; then
2935                                                 type=''
2936                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
2937                                         then
2938                                                 echo "($value is not a plain file, but that's ok.)"
2939                                                 type=''
2940                                         fi
2941                                         if test X"$type" = X; then
2942                                             value="$pf"
2943                                             break
2944                                         fi
2945                                 done
2946                                 ;;
2947                         Directory)
2948                                 for fp in $gfpth; do
2949                                         if test "X$fp" = X.; then
2950                                             pf="$ansexp"
2951                                         else    
2952                                             pf="$fp/$ansexp"
2953                                         fi
2954                                         if test -d "$pf"; then
2955                                                 type=''
2956                                                 value="$pf"
2957                                                 break
2958                                         fi
2959                                 done
2960                                 ;;
2961                         Locate)
2962                                 if test -d "$ansexp"; then
2963                                         echo "(Looking for $loc_file in directory $value.)"
2964                                         value="$value/$loc_file"
2965                                         ansexp="$ansexp/$loc_file"
2966                                 fi
2967                                 if test -f "$ansexp"; then
2968                                         type=''
2969                                 fi
2970                                 case "$nopath_ok" in
2971                                 true)   case "$value" in
2972                                         */*) ;;
2973                                         *)      echo "Assuming $value will be in people's path."
2974                                                 type=''
2975                                                 ;;
2976                                         esac
2977                                         ;;
2978                                 esac
2979                                 ;;
2980                         esac
2981
2982                         case "$skip" in
2983                         true) type='';
2984                         esac
2985
2986                         case "$type" in
2987                         '') ;;
2988                         *)
2989                                 if test "$fastread" = yes; then
2990                                         dflt=y
2991                                 else
2992                                         dflt=n
2993                                 fi
2994                                 rp="$what $value doesn't exist.  Use that name anyway?"
2995                                 . UU/myread
2996                                 dflt=''
2997                                 case "$ans" in
2998                                 y*) type='';;
2999                                 *) echo " ";;
3000                                 esac
3001                                 ;;
3002                         esac
3003                         ;;
3004                 esac
3005                 ;;
3006         esac
3007 done
3008 cd UU
3009 ans="$value"
3010 rp="$orig_rp"
3011 dflt="$orig_dflt"
3012 rm -f getfile.ok
3013 test "X$gfpthkeep" != Xy && gfpth=""
3014 EOSC
3015
3016 : determine root of directory hierarchy where package will be installed.
3017 case "$prefix" in
3018 '')
3019         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3020         ;;
3021 *)
3022         dflt="$prefix"
3023         ;;
3024 esac
3025 $cat <<EOM
3026
3027 By default, $package will be installed in $dflt/bin, manual pages
3028 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3029 installation directories. Typically this is something like /usr/local.
3030 If you wish to have binaries under /usr/bin but other parts of the
3031 installation under /usr/local, that's ok: you will be prompted
3032 separately for each of the installation directories, the prefix being
3033 only used to set the defaults.
3034
3035 EOM
3036 fn=d~
3037 rp='Installation prefix to use?'
3038 . ./getfile
3039 oldprefix=''
3040 case "$prefix" in
3041 '') ;;
3042 *)
3043         case "$ans" in
3044         "$prefix") ;;
3045         *) oldprefix="$prefix";;
3046         esac
3047         ;;
3048 esac
3049 prefix="$ans"
3050 prefixexp="$ansexp"
3051
3052 : is AFS running?
3053 echo " "
3054 case "$afs" in
3055 $define|true)   afs=true ;;
3056 $undef|false)   afs=false ;;
3057 *)      if test -d /afs; then
3058                 afs=true
3059         else
3060                 afs=false
3061         fi
3062         ;;
3063 esac
3064 if $afs; then
3065         echo "AFS may be running... I'll be extra cautious then..." >&4
3066 else
3067         echo "AFS does not seem to be running..." >&4
3068 fi
3069
3070 : determine installation prefix for where package is to be installed.
3071 if $afs; then 
3072 $cat <<EOM
3073
3074 Since you are running AFS, I need to distinguish the directory in which
3075 files will reside from the directory in which they are installed (and from
3076 which they are presumably copied to the former directory by occult means).
3077
3078 EOM
3079         case "$installprefix" in
3080         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3081         *) dflt="$installprefix";;
3082         esac
3083 else
3084 $cat <<EOM
3085
3086 In some special cases, particularly when building $package for distribution,
3087 it is convenient to distinguish between the directory in which files should 
3088 be installed from the directory ($prefix) in which they 
3089 will eventually reside.  For most users, these two directories are the same.
3090
3091 EOM
3092         case "$installprefix" in
3093         '') dflt=$prefix ;;
3094         *) dflt=$installprefix;;
3095         esac
3096 fi
3097 fn=d~
3098 rp='What installation prefix should I use for installing files?'
3099 . ./getfile
3100 installprefix="$ans"
3101 installprefixexp="$ansexp"
3102
3103 : set the prefixit variable, to compute a suitable default value
3104 prefixit='case "$3" in
3105 ""|none)
3106         case "$oldprefix" in
3107         "") eval "$1=\"\$$2\"";;
3108         *)
3109                 case "$3" in
3110                 "") eval "$1=";;
3111                 none)
3112                         eval "tp=\"\$$2\"";
3113                         case "$tp" in
3114                         ""|" ") eval "$1=\"\$$2\"";;
3115                         *) eval "$1=";;
3116                         esac;;
3117                 esac;;
3118         esac;;
3119 *)
3120         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3121         case "$tp" in
3122         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3123         /*-$oldprefix/*|\~*-$oldprefix/*)
3124                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3125         *) eval "$1=\"\$$2\"";;
3126         esac;;
3127 esac'
3128
3129 : set the base revision
3130 baserev=5.0
3131
3132 : get the patchlevel
3133 echo " "
3134 echo "Getting the current patchlevel..." >&4
3135 if $test -r $rsrc/patchlevel.h;then
3136         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3137         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3138 else
3139         patchlevel=0
3140         subversion=0
3141 fi
3142 $echo $n "(You have $package" $c
3143 case "$package" in
3144 "*$baserev")    ;;
3145 *)              $echo $n " $baserev" $c ;;
3146 esac
3147 $echo $n " patchlevel $patchlevel" $c
3148 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3149 echo ".)"
3150
3151 if test 0 -eq "$subversion"; then
3152         version=`LC_ALL=C; export LC_ALL; \
3153                  echo $baserev $patchlevel | \
3154                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3155 else
3156         version=`LC_ALL=C; export LC_ALL; \
3157                  echo $baserev $patchlevel $subversion | \
3158                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3159 fi
3160 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3161 if test "$subversion" -lt 50; then
3162         apiversion=`LC_ALL=C; export LC_ALL; \
3163                  LANGUAGE=C; export LANGUAGE; \
3164                  echo $baserev $patchlevel | \
3165                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3166 else
3167         apiversion="$version"
3168 fi
3169
3170 : determine installation style
3171 : For now, try to deduce it from prefix unless it is already set.
3172 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3173 case "$installstyle" in
3174 '')     case "$prefix" in
3175                 *perl*) dflt='lib';;
3176                 *) dflt='lib/perl5' ;;
3177         esac
3178         ;;
3179 *)      dflt='lib/perl5' ;;
3180 esac
3181 : Probably not worth prompting for this since we prompt for all
3182 : the directories individually, and the prompt would be too long and
3183 : confusing anyway.
3184 installstyle=$dflt
3185
3186 : determine where private library files go
3187 : Usual default is /usr/local/lib/perl5/$version.
3188 : Also allow things like /opt/perl/lib/$version, since 
3189 : /opt/perl/lib/perl5... would be redundant.
3190 : The default "style" setting is made in installstyle.U
3191 case "$installstyle" in
3192 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3193 *)       set dflt privlib lib/$version ;;
3194 esac
3195 eval $prefixit
3196 $cat <<EOM
3197
3198 There are some auxiliary files for $package that need to be put into a
3199 private library directory that is accessible by everyone.
3200
3201 EOM
3202 fn=d~+
3203 rp='Pathname where the private library files will reside?'
3204 . ./getfile
3205 privlib="$ans"
3206 privlibexp="$ansexp"
3207 : Change installation prefix, if necessary.
3208 if $test X"$prefix" != X"$installprefix"; then
3209         installprivlib=`echo $privlibexp | sed 's#^$prefix#$installprefix#'`
3210 else
3211         installprivlib="$privlibexp"
3212 fi
3213
3214 : set the prefixup variable, to restore leading tilda escape
3215 prefixup='case "$prefixexp" in
3216 "$prefix") ;;
3217 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3218 esac'
3219
3220 : determine where public architecture dependent libraries go
3221 set archlib archlib
3222 eval $prefixit
3223 : privlib default is /usr/local/lib/$package/$version
3224 : archlib default is /usr/local/lib/$package/$version/$archname
3225 : privlib may have an optional trailing /share.
3226 tdflt=`echo $privlib | $sed 's,/share$,,'`
3227 tdflt=$tdflt/$archname
3228 case "$archlib" in
3229 '')     dflt=$tdflt
3230         ;;
3231 *)      dflt="$archlib"
3232     ;;
3233 esac
3234 $cat <<EOM
3235
3236 $spackage contains architecture-dependent library files.  If you are
3237 sharing libraries in a heterogeneous environment, you might store
3238 these files in a separate location.  Otherwise, you can just include
3239 them with the rest of the public library files.
3240
3241 EOM
3242 fn=d+~
3243 rp='Where do you want to put the public architecture-dependent libraries?'
3244 . ./getfile
3245 archlib="$ans"
3246 archlibexp="$ansexp"
3247 if $test X"$archlib" = X"$privlib"; then
3248         d_archlib="$undef"
3249 else
3250         d_archlib="$define"
3251 fi
3252 : Change installation prefix, if necessary.
3253 if $test X"$prefix" != X"$installprefix"; then
3254         installarchlib=`echo $archlibexp | sed 's#^$prefix#$installprefix#'`
3255 else
3256         installarchlib="$archlibexp"
3257 fi
3258
3259 : make some quick guesses about what we are up against
3260 echo " "
3261 $echo $n "Hmm...  $c"
3262 echo exit 1 >bsd
3263 echo exit 1 >usg
3264 echo exit 1 >v7
3265 echo exit 1 >osf1
3266 echo exit 1 >eunice
3267 echo exit 1 >xenix
3268 echo exit 1 >venix
3269 echo exit 1 >os2
3270 d_bsd="$undef"
3271 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3272 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3273 then
3274         echo "Looks kind of like an OSF/1 system, but we'll see..."
3275         echo exit 0 >osf1
3276 elif test `echo abc | tr a-z A-Z` = Abc ; then
3277         xxx=`./loc addbib blurfl $pth`
3278         if $test -f $xxx; then
3279         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3280                 echo exit 0 >bsd
3281                 echo exit 0 >usg
3282         else
3283                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3284                         echo "Looks kind of like an extended USG system, but we'll see..."
3285                 else
3286                         echo "Looks kind of like a USG system, but we'll see..."
3287                 fi
3288                 echo exit 0 >usg
3289         fi
3290 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3291         echo "Looks kind of like a BSD system, but we'll see..."
3292         d_bsd="$define"
3293         echo exit 0 >bsd
3294 else
3295         echo "Looks kind of like a Version 7 system, but we'll see..."
3296         echo exit 0 >v7
3297 fi
3298 case "$eunicefix" in
3299 *unixtovms*)
3300         $cat <<'EOI'
3301 There is, however, a strange, musty smell in the air that reminds me of
3302 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3303 EOI
3304         echo exit 0 >eunice
3305         d_eunice="$define"
3306 : it so happens the Eunice I know will not run shell scripts in Unix format
3307         ;;
3308 *)
3309         echo " "
3310         echo "Congratulations.  You aren't running Eunice."
3311         d_eunice="$undef"
3312         ;;
3313 esac
3314 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3315 case "$p_" in
3316 :) ;;
3317 *)
3318         $cat <<'EOI'
3319 I have the feeling something is not exactly right, however...don't tell me...
3320 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3321 EOI
3322         echo exit 0 >os2
3323         ;;
3324 esac
3325 if test -f /xenix; then
3326         echo "Actually, this looks more like a XENIX system..."
3327         echo exit 0 >xenix
3328         d_xenix="$define"
3329 else
3330         echo " "
3331         echo "It's not Xenix..."
3332         d_xenix="$undef"
3333 fi
3334 chmod +x xenix
3335 $eunicefix xenix
3336 if test -f /venix; then
3337         echo "Actually, this looks more like a VENIX system..."
3338         echo exit 0 >venix
3339 else
3340         echo " "
3341         if ./xenix; then
3342                 : null
3343         else
3344                 echo "Nor is it Venix..."
3345         fi
3346 fi
3347 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3348 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3349 $rm -f foo
3350
3351 : see if setuid scripts can be secure
3352 $cat <<EOM
3353
3354 Some kernels have a bug that prevents setuid #! scripts from being
3355 secure.  Some sites have disabled setuid #! scripts because of this.
3356
3357 First let's decide if your kernel supports secure setuid #! scripts.
3358 (If setuid #! scripts would be secure but have been disabled anyway,
3359 don't say that they are secure if asked.)
3360
3361 EOM
3362
3363 val="$undef"
3364 if $test -d /dev/fd; then
3365         echo "#!$ls" >reflect
3366         chmod +x,u+s reflect
3367         ./reflect >flect 2>&1
3368         if $contains "/dev/fd" flect >/dev/null; then
3369                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3370                 val="$define"
3371         else
3372                 $cat <<EOM
3373 If you are not sure if they are secure, I can check but I'll need a
3374 username and password different from the one you are using right now.
3375 If you don't have such a username or don't want me to test, simply
3376 enter 'none'.
3377
3378 EOM
3379                 rp='Other username to test security of setuid scripts with?'
3380                 dflt='none'
3381                 . ./myread
3382                 case "$ans" in
3383                 n|none)
3384                         case "$d_suidsafe" in
3385                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3386                                 dflt=n;;
3387                         "$undef")
3388                                 echo "Well, the $hint value is *not* secure." >&4
3389                                 dflt=n;;
3390                         *)      echo "Well, the $hint value *is* secure." >&4
3391                                 dflt=y;;
3392                         esac
3393                         ;;
3394                 *)
3395                         $rm -f reflect flect
3396                         echo "#!$ls" >reflect
3397                         chmod +x,u+s reflect
3398                         echo >flect
3399                         chmod a+w flect
3400                         echo '"su" will (probably) prompt you for '"$ans's password."
3401                         su $ans -c './reflect >flect'
3402                         if $contains "/dev/fd" flect >/dev/null; then
3403                                 echo "Okay, it looks like setuid scripts are secure." >&4
3404                                 dflt=y
3405                         else
3406                                 echo "I don't think setuid scripts are secure." >&4
3407                                 dflt=n
3408                         fi
3409                         ;;
3410                 esac
3411                 rp='Does your kernel have *secure* setuid scripts?'
3412                 . ./myread
3413                 case "$ans" in
3414                 [yY]*)  val="$define";;
3415                 *)      val="$undef";;
3416                 esac
3417         fi
3418 else
3419         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3420         echo "(That's for file descriptors, not floppy disks.)"
3421         val="$undef"
3422 fi
3423 set d_suidsafe
3424 eval $setvar
3425
3426 $rm -f reflect flect
3427
3428 : now see if they want to do setuid emulation
3429 echo " "
3430 val="$undef"
3431 case "$d_suidsafe" in
3432 "$define")
3433         val="$undef"
3434         echo "No need to emulate SUID scripts since they are secure here." >& 4
3435         ;;
3436 *)
3437         $cat <<EOM
3438 Some systems have disabled setuid scripts, especially systems where
3439 setuid scripts cannot be secure.  On systems where setuid scripts have
3440 been disabled, the setuid/setgid bits on scripts are currently
3441 useless.  It is possible for $package to detect those bits and emulate
3442 setuid/setgid in a secure fashion.  This emulation will only work if
3443 setuid scripts have been disabled in your kernel.
3444
3445 EOM
3446         case "$d_dosuid" in
3447         "$define") dflt=y ;;
3448         *) dflt=n ;;
3449         esac
3450         rp="Do you want to do setuid/setgid emulation?"
3451         . ./myread
3452         case "$ans" in
3453         [yY]*)  val="$define";;
3454         *)      val="$undef";;
3455         esac
3456         ;;
3457 esac
3458 set d_dosuid
3459 eval $setvar
3460
3461 : determine where manual pages are on this system
3462 echo " "
3463 case "$sysman" in
3464 '') 
3465         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3466         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3467         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3468         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3469         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3470         sysman=`./loc . /usr/man/man1 $syspath`
3471         ;;
3472 esac
3473 if $test -d "$sysman"; then
3474         echo "System manual is in $sysman." >&4
3475 else
3476         echo "Could not find manual pages in source form." >&4
3477 fi
3478
3479 : see what memory models we can support
3480 case "$models" in
3481 '')
3482         $cat >pdp11.c <<'EOP'
3483 int main() {
3484 #ifdef pdp11
3485         exit(0);
3486 #else
3487         exit(1);
3488 #endif
3489 }
3490 EOP
3491         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3492         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3493                 dflt='unsplit split'
3494         else
3495                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3496                 case "$tans" in
3497                 X) dflt='none';;
3498                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3499                                 dflt='small'
3500                         else
3501                                 dflt=''
3502                         fi
3503                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3504                                 dflt="$dflt medium"
3505                         fi
3506                         if $test -d /lib/large || $test -d /usr/lib/large; then
3507                                 dflt="$dflt large"
3508                         fi
3509                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3510                                 dflt="$dflt huge"
3511                         fi
3512                 esac
3513         fi;;
3514 *) dflt="$models";;
3515 esac
3516 $cat <<EOM
3517  
3518 Some systems have different model sizes.  On most systems they are called
3519 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3520 split.  If your system doesn't support different memory models, say "none".
3521 If you wish to force everything to one memory model, say "none" here and
3522 put the appropriate flags later when it asks you for other cc and ld flags.
3523 Venix systems may wish to put "none" and let the compiler figure things out.
3524 (In the following question multiple model names should be space separated.)
3525
3526 The default for most systems is "none".
3527
3528 EOM
3529 rp="Which memory models are supported?"
3530 . ./myread
3531 models="$ans"
3532
3533 case "$models" in
3534 none)
3535         small=''
3536         medium=''
3537         large=''
3538         huge=''
3539         unsplit=''
3540         split=''
3541         ;;
3542 *split)
3543         case "$split" in
3544         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3545                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3546                         dflt='-i'
3547                 else
3548                         dflt='none'
3549                 fi;;
3550         *) dflt="$split";;
3551         esac
3552         rp="What flag indicates separate I and D space?"
3553         . ./myread
3554         tans="$ans"
3555         case "$tans" in
3556         none) tans='';;
3557         esac
3558         split="$tans"
3559         unsplit='';;
3560 *large*|*small*|*medium*|*huge*)
3561         case "$models" in
3562         *large*)
3563                 case "$large" in
3564                 '') dflt='-Ml';;
3565                 *) dflt="$large";;
3566                 esac
3567         rp="What flag indicates large model?"
3568         . ./myread
3569         tans="$ans"
3570         case "$tans" in
3571         none) tans='';
3572         esac
3573         large="$tans";;
3574         *) large='';;
3575         esac
3576         case "$models" in
3577         *huge*) case "$huge" in
3578                 '') dflt='-Mh';;
3579                 *) dflt="$huge";;
3580                 esac
3581                 rp="What flag indicates huge model?"
3582                 . ./myread
3583                 tans="$ans"
3584                 case "$tans" in
3585                 none) tans='';
3586                 esac
3587                 huge="$tans";;
3588         *) huge="$large";;
3589         esac
3590         case "$models" in
3591         *medium*) case "$medium" in
3592                 '') dflt='-Mm';;
3593                 *) dflt="$medium";;
3594                 esac
3595                 rp="What flag indicates medium model?"
3596                 . ./myread
3597                 tans="$ans"
3598                 case "$tans" in
3599                 none) tans='';
3600                 esac
3601                 medium="$tans";;
3602         *) medium="$large";;
3603         esac
3604         case "$models" in
3605         *small*) case "$small" in
3606                 '') dflt='none';;
3607                 *) dflt="$small";;
3608                 esac
3609                 rp="What flag indicates small model?"
3610                 . ./myread
3611                 tans="$ans"
3612                 case "$tans" in
3613                 none) tans='';
3614                 esac
3615                 small="$tans";;
3616         *) small='';;
3617         esac
3618         ;;
3619 *)
3620         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3621         ;;
3622 esac
3623 $rm -f pdp11.* pdp11
3624
3625 : see if we need a special compiler
3626 echo " "
3627 if ./usg; then
3628         case "$cc" in
3629         '') case "$Mcc" in
3630                 /*) dflt='Mcc';;
3631                 *) case "$large" in
3632                         -M*) dflt='cc';;
3633                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3634                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3635                                                 dflt='cc'
3636                                         else
3637                                                 dflt='cc -M'
3638                                         fi
3639                                 else
3640                                         dflt='cc'
3641                                 fi;;
3642                         esac;;
3643                 esac;;
3644         *)  dflt="$cc";;
3645         esac
3646         case "$dflt" in
3647         *M*)    $cat <<'EOM'
3648 On some older systems the default C compiler will not resolve multiple global
3649 references that happen to have the same name.  On some such systems the "Mcc"
3650 command may be used to force these to be resolved.  On other systems a "cc -M"
3651 command is required.  (Note that the -M flag on other systems indicates a
3652 memory model to use!) If you have the Gnu C compiler, you might wish to use
3653 that instead.
3654
3655 EOM
3656         ;;
3657         esac
3658         rp="Use which C compiler?"
3659         . ./myread
3660         cc="$ans"
3661 else
3662         case "$cc" in
3663         '') dflt=cc;;
3664         *) dflt="$cc";;
3665         esac
3666         rp="Use which C compiler?"
3667         . ./myread
3668         cc="$ans"
3669 fi
3670 : Look for a hint-file generated 'call-back-unit'.  Now that the
3671 : user has specified the compiler, we may need to set or change some
3672 : other defaults.
3673 if $test -f cc.cbu; then
3674     . ./cc.cbu
3675 fi
3676 echo " "
3677 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3678 $cat >gccvers.c <<EOM
3679 #include <stdio.h>
3680 int main() {
3681 #ifdef __GNUC__
3682 #ifdef __VERSION__
3683         printf("%s\n", __VERSION__);
3684 #else
3685         printf("%s\n", "1");
3686 #endif
3687 #endif
3688         exit(0);
3689 }
3690 EOM
3691 if $cc -o gccvers gccvers.c; then
3692         gccversion=`./gccvers`
3693         case "$gccversion" in
3694         '') echo "You are not using GNU cc." ;;
3695         *)  echo "You are using GNU cc $gccversion." ;;
3696         esac
3697 else
3698         echo " "
3699         echo "*** WHOA THERE!!! ***" >&4
3700         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3701         case "$knowitall" in
3702         '')
3703         echo "    You'd better start hunting for one and let me know about it." >&4
3704                 exit 1
3705                 ;;
3706         esac
3707 fi
3708 $rm -f gccvers*
3709 case "$gccversion" in
3710 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3711 esac
3712
3713 : What should the include directory be ?
3714 echo " "
3715 $echo $n "Hmm...  $c"
3716 dflt='/usr/include'
3717 incpath=''
3718 mips_type=''
3719 if $test -f /bin/mips && /bin/mips; then
3720         echo "Looks like a MIPS system..."
3721         $cat >usr.c <<'EOCP'
3722 #ifdef SYSTYPE_BSD43
3723 /bsd43
3724 #endif
3725 EOCP
3726         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3727                 dflt='/bsd43/usr/include'
3728                 incpath='/bsd43'
3729                 mips_type='BSD 4.3'
3730         else
3731                 mips_type='System V'
3732         fi
3733         $rm -f usr.c usr.out
3734         echo "and you're compiling with the $mips_type compiler and libraries."
3735         xxx_prompt=y
3736         echo "exit 0" >mips
3737 else
3738         echo "Doesn't look like a MIPS system."
3739         xxx_prompt=n
3740         echo "exit 1" >mips
3741 fi
3742 chmod +x mips
3743 $eunicefix mips
3744 case "$usrinc" in
3745 '') ;;
3746 *) dflt="$usrinc";;
3747 esac
3748 case "$xxx_prompt" in
3749 y)      fn=d/
3750         echo " "
3751         rp='Where are the include files you want to use?'
3752         . ./getfile
3753         usrinc="$ans"
3754         ;;
3755 *)      usrinc="$dflt"
3756         ;;
3757 esac
3758
3759 : see how we invoke the C preprocessor
3760 echo " "
3761 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3762 cat <<'EOT' >testcpp.c
3763 #define ABC abc
3764 #define XYZ xyz
3765 ABC.XYZ
3766 EOT
3767 cd ..
3768 if test ! -f cppstdin; then
3769         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3770 else
3771         echo "Keeping your $hint cppstdin wrapper."
3772 fi
3773 chmod 755 cppstdin
3774 wrapper=`pwd`/cppstdin
3775 ok='false'
3776 cd UU
3777
3778 if $test "X$cppstdin" != "X" && \
3779         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3780         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3781 then
3782         echo "You used to use $cppstdin $cppminus so we'll use that again."
3783         case "$cpprun" in
3784         '') echo "But let's see if we can live without a wrapper..." ;;
3785         *)
3786                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3787                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3788                 then
3789                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3790                         ok='true'
3791                 else
3792                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3793                 fi
3794                 ;;
3795         esac
3796 else
3797         case "$cppstdin" in
3798         '') ;;
3799         *)
3800                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3801                 ;;
3802         esac
3803 fi
3804
3805 if $ok; then
3806         : nothing
3807 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3808         $cc -E <testcpp.c >testcpp.out 2>&1; \
3809         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3810         echo "Yup, it does."
3811         x_cpp="$cc -E"
3812         x_minus='';
3813 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3814         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3815         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3816         echo "Yup, it does."
3817         x_cpp="$cc -E"
3818         x_minus='-';
3819 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3820         $cc -P <testcpp.c >testcpp.out 2>&1; \
3821         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3822         echo "Yipee, that works!"
3823         x_cpp="$cc -P"
3824         x_minus='';
3825 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3826         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3827         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3828         echo "At long last!"
3829         x_cpp="$cc -P"
3830         x_minus='-';
3831 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3832         $cpp <testcpp.c >testcpp.out 2>&1; \
3833         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3834         echo "It works!"
3835         x_cpp="$cpp"
3836         x_minus='';
3837 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3838         $cpp - <testcpp.c >testcpp.out 2>&1; \
3839         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3840         echo "Hooray, it works!  I was beginning to wonder."
3841         x_cpp="$cpp"
3842         x_minus='-';
3843 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3844         $wrapper <testcpp.c >testcpp.out 2>&1; \
3845         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3846         x_cpp="$wrapper"
3847         x_minus=''
3848         echo "Eureka!"
3849 else
3850         dflt=''
3851         rp="No dice.  I can't find a C preprocessor.  Name one:"
3852         . ./myread
3853         x_cpp="$ans"
3854         x_minus=''
3855         $x_cpp <testcpp.c >testcpp.out 2>&1
3856         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3857                 echo "OK, that will do." >&4
3858         else
3859 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3860                 exit 1
3861         fi
3862 fi
3863
3864 case "$ok" in
3865 false)
3866         cppstdin="$x_cpp"
3867         cppminus="$x_minus"
3868         cpprun="$x_cpp"
3869         cpplast="$x_minus"
3870         set X $x_cpp
3871         shift
3872         case "$1" in
3873         "$cpp")
3874                 echo "Perhaps can we force $cc -E using a wrapper..."
3875                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3876                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3877                 then
3878                         echo "Yup, we can."
3879                         cppstdin="$wrapper"
3880                         cppminus='';
3881                 else
3882                         echo "Nope, we'll have to live without it..."
3883                 fi
3884                 ;;
3885         esac
3886         case "$cpprun" in
3887         "$wrapper")
3888                 cpprun=''
3889                 cpplast=''
3890                 ;;
3891         esac
3892         ;;
3893 esac
3894
3895 case "$cppstdin" in
3896 "$wrapper"|'cppstdin') ;;
3897 *) $rm -f $wrapper;;
3898 esac
3899 $rm -f testcpp.c testcpp.out
3900
3901 : Set private lib path
3902 case "$plibpth" in
3903 '') if ./mips; then
3904                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3905         fi;;
3906 esac
3907 case "$libpth" in
3908 ' ') dlist='';;
3909 '') dlist="$loclibpth $plibpth $glibpth";;
3910 *) dlist="$libpth";;
3911 esac
3912
3913 : Now check and see which directories actually exist, avoiding duplicates
3914 libpth=''
3915 for xxx in $dlist
3916 do
3917     if $test -d $xxx; then
3918                 case " $libpth " in
3919                 *" $xxx "*) ;;
3920                 *) libpth="$libpth $xxx";;
3921                 esac
3922     fi
3923 done
3924 $cat <<'EOM'
3925
3926 Some systems have incompatible or broken versions of libraries.  Among
3927 the directories listed in the question below, please remove any you
3928 know not to be holding relevant libraries, and add any that are needed.
3929 Say "none" for none.
3930
3931 EOM
3932 case "$libpth" in
3933 '') dflt='none';;
3934 *)
3935         set X $libpth
3936         shift
3937         dflt=${1+"$@"}
3938         ;;
3939 esac
3940 rp="Directories to use for library searches?"
3941 . ./myread
3942 case "$ans" in
3943 none) libpth=' ';;
3944 *) libpth="$ans";;
3945 esac
3946
3947 : compute shared library extension
3948 case "$so" in
3949 '')
3950         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3951                 dflt='sl'
3952         else
3953                 dflt='so'
3954         fi
3955         ;;
3956 *) dflt="$so";;
3957 esac
3958 $cat <<EOM
3959
3960 On some systems, shared libraries may be available.  Answer 'none' if
3961 you want to suppress searching of shared libraries for the remaining
3962 of this configuration.
3963
3964 EOM
3965 rp='What is the file extension used for shared libraries?'
3966 . ./myread
3967 so="$ans"
3968
3969 : Define several unixisms.
3970 : Hints files or command line option can be used to override them.
3971 : The convoluted testing is in case hints files set either the old
3972 : or the new name.
3973 case "$_exe" in
3974 '')     case "$exe_ext" in
3975     '') ;;
3976         *)      _exe="$exe_ext" ;;
3977         esac
3978         ;;
3979 esac
3980 case "$_a" in
3981 '')     case "$lib_ext" in
3982     '') _a='.a';;
3983         *)      _a="$lib_ext" ;;
3984         esac
3985         ;;
3986 esac
3987 case "$_o" in
3988 '') case "$obj_ext" in
3989         '')     _o='.o';;
3990         *)      _o="$obj_ext";;
3991         esac
3992         ;;
3993 esac
3994 case "$p_" in
3995 '') case "$path_sep" in
3996         '')     p_=':';;
3997         *)      p_="$path_sep";;
3998         esac
3999         ;;
4000 esac
4001 exe_ext=$_exe
4002 lib_ext=$_a
4003 obj_ext=$_o
4004 path_sep=$p_
4005
4006 : Which makefile gets called first.  This is used by make depend.
4007 case "$firstmakefile" in
4008 '') firstmakefile='makefile';;
4009 esac
4010
4011 cat <<EOM
4012
4013 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4014 Configure must be run with -Dusesocks.
4015
4016 Normally you do not need this and you should answer no.
4017
4018 EOM
4019 case "$usesocks" in
4020 $define|true|[yY]*)     dflt='y';;
4021 *) dflt='n';;
4022 esac
4023 rp='Build Perl for SOCKS?'
4024 . ./myread
4025 case "$ans" in
4026 y|Y)    val="$define" ;;     
4027 *)      val="$undef" ;;
4028 esac
4029 set usesocks
4030 eval $setvar
4031
4032 : Looking for optional libraries
4033 echo " "
4034 echo "Checking for optional libraries..." >&4
4035 case "$libs" in
4036 ' '|'') dflt='';;
4037 *) dflt="$libs";;
4038 esac
4039 case "$libswanted" in
4040 '') libswanted='c_s';;
4041 esac
4042 case "$usesocks" in
4043 $define)
4044         libswanted="$libswanted socks5 socks5_sh"
4045         ;;
4046 esac
4047 for thislib in $libswanted; do
4048         
4049         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4050                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4051                 echo "Found -l$thislib (shared)."
4052                 case " $dflt " in
4053                 *"-l$thislib "*);;
4054                 *) dflt="$dflt -l$thislib";;
4055                 esac
4056         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4057                 echo "Found -l$thislib (shared)."
4058                 case " $dflt " in
4059                 *"-l$thislib "*);;
4060                 *) dflt="$dflt -l$thislib";;
4061                 esac
4062         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4063                 echo "Found -l$thislib."
4064                 case " $dflt " in
4065                 *"-l$thislib "*);;
4066                 *) dflt="$dflt -l$thislib";;
4067                 esac
4068         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4069                 echo "Found -l$thislib."
4070                 case " $dflt " in
4071                 *"-l$thislib "*);;
4072                 *) dflt="$dflt -l$thislib";;
4073                 esac
4074         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4075                 echo "Found -l${thislib}_s."
4076                 case " $dflt " in
4077                 *"-l$thislib "*);;
4078                 *) dflt="$dflt -l${thislib}_s";;
4079                 esac
4080         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4081                 echo "Found -l$thislib."
4082                 case " $dflt " in
4083                 *"-l$thislib "*);;
4084                 *) dflt="$dflt -l$thislib";;
4085                 esac
4086         else
4087                 echo "No -l$thislib."
4088         fi
4089 done
4090 set X $dflt
4091 shift
4092 dflt="$*"
4093 case "$libs" in
4094 '') dflt="$dflt";;
4095 *) dflt="$libs";;
4096 esac
4097 case "$dflt" in
4098 ' '|'') dflt='none';;
4099 esac
4100
4101 $cat <<EOM
4102
4103 In order to compile $package on your machine, a number of libraries
4104 are usually needed.  Include any other special libraries here as well.
4105 Say "none" for none.  The default list is almost always right.
4106 EOM
4107
4108 echo " "
4109 rp="What libraries to use?"
4110 . ./myread
4111 case "$ans" in
4112 none) libs=' ';;
4113 *) libs="$ans";;
4114 esac
4115
4116 : determine optimize, if desired, or use for debug flag also
4117 case "$optimize" in
4118 ' '|$undef) dflt='none';;
4119 '') dflt='-O';;
4120 *) dflt="$optimize";;
4121 esac
4122 $cat <<EOH
4123
4124 Some C compilers have problems with their optimizers.  By default, $package
4125 compiles with the -O flag to use the optimizer.  Alternately, you might want
4126 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4127 systems).  Either flag can be specified here.  To use neither flag, specify
4128 the word "none".
4129
4130 EOH
4131 rp="What optimizer/debugger flag should be used?"
4132 . ./myread
4133 optimize="$ans"
4134 case "$optimize" in
4135 'none') optimize=" ";;
4136 esac
4137
4138 dflt=''
4139 : We will not override a previous value, but we might want to
4140 : augment a hint file
4141 case "$hint" in
4142 none|recommended)
4143         case "$gccversion" in
4144         1*) dflt='-fpcc-struct-return' ;;
4145         esac
4146         case "$optimize" in
4147         *-g*) dflt="$dflt -DDEBUGGING";;
4148         esac
4149         case "$gccversion" in
4150         2*) if test -d /etc/conf/kconfig.d &&
4151                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4152                 then
4153                         dflt="$dflt -posix"
4154                 fi
4155                 ;;
4156         esac
4157         ;;
4158 esac
4159
4160 case "$mips_type" in
4161 *BSD*|'') inclwanted="$locincpth $usrinc";;
4162 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4163 esac
4164 for thisincl in $inclwanted; do
4165         if $test -d $thisincl; then
4166                 if $test x$thisincl != x$usrinc; then
4167                         case "$dflt" in
4168                         *$thisincl*);;
4169                         *) dflt="$dflt -I$thisincl";;
4170                         esac
4171                 fi
4172         fi
4173 done
4174
4175 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4176         xxx=true;
4177 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4178         xxx=true;
4179 else
4180         xxx=false;
4181 fi;
4182 if $xxx; then
4183         case "$dflt" in
4184         *$2*);;
4185         *) dflt="$dflt -D$2";;
4186         esac;
4187 fi'
4188
4189 set signal.h LANGUAGE_C; eval $inctest
4190
4191 case "$usesocks" in
4192 $define)
4193         ccflags="$ccflags -DSOCKS"
4194         ;;
4195 esac
4196
4197 case "$hint" in
4198 none|recommended) dflt="$ccflags $dflt" ;;
4199 *) dflt="$ccflags";;
4200 esac
4201
4202 case "$dflt" in
4203 ''|' ') dflt=none;;
4204 esac
4205 $cat <<EOH
4206
4207 Your C compiler may want other flags.  For this question you should include
4208 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4209 but you should NOT include libraries or ld flags like -lwhatever.  If you
4210 want $package to honor its debug switch, you should include -DDEBUGGING here.
4211 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4212
4213 To use no flags, specify the word "none".
4214
4215 EOH
4216 set X $dflt
4217 shift
4218 dflt=${1+"$@"}
4219 rp="Any additional cc flags?"
4220 . ./myread
4221 case "$ans" in
4222 none) ccflags='';;
4223 *) ccflags="$ans";;
4224 esac
4225
4226 : the following weeds options from ccflags that are of no interest to cpp
4227 cppflags="$ccflags"
4228 case "$gccversion" in
4229 1*) cppflags="$cppflags -D__GNUC__"
4230 esac
4231 case "$mips_type" in
4232 '');;
4233 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4234 esac
4235 case "$cppflags" in
4236 '');;
4237 *)
4238         echo " "
4239         echo "Let me guess what the preprocessor flags are..." >&4
4240         set X $cppflags
4241         shift
4242         cppflags=''
4243         $cat >cpp.c <<'EOM'
4244 #define BLURFL foo
4245
4246 BLURFL xx LFRULB
4247 EOM
4248         previous=''
4249         for flag in $*
4250         do
4251                 case "$flag" in
4252                 -*) ftry="$flag";;
4253                 *) ftry="$previous $flag";;
4254                 esac
4255                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4256                         >cpp1.out 2>/dev/null && \
4257                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4258                         >cpp2.out 2>/dev/null && \
4259                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4260                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4261                 then
4262                         cppflags="$cppflags $ftry"
4263                         previous=''
4264                 else
4265                         previous="$flag"
4266                 fi
4267         done
4268         set X $cppflags
4269         shift
4270         cppflags=${1+"$@"}
4271         case "$cppflags" in
4272         *-*)  echo "They appear to be: $cppflags";;
4273         esac
4274         $rm -f cpp.c cpp?.out
4275         ;;
4276 esac
4277
4278 : flags used in final linking phase
4279 case "$ldflags" in
4280 '') if ./venix; then
4281                 dflt='-i -z'
4282         else
4283                 dflt=''
4284         fi
4285         case "$ccflags" in
4286         *-posix*) dflt="$dflt -posix" ;;
4287         esac
4288         ;;
4289 *) dflt="$ldflags";;
4290 esac
4291
4292 : Try to guess additional flags to pick up local libraries.
4293 for thislibdir in $libpth; do
4294         case " $loclibpth " in
4295         *" $thislibdir "*)
4296                 case "$dflt " in 
4297                 *"-L$thislibdir "*) ;;
4298                 *)  dflt="$dflt -L$thislibdir" ;;
4299                 esac
4300                 ;;
4301         esac
4302 done
4303
4304 case "$dflt" in
4305 '') dflt='none' ;;
4306 esac
4307
4308 $cat <<EOH
4309
4310 Your C linker may need flags.  For this question you should
4311 include -L/whatever and any other flags used by the C linker, but you
4312 should NOT include libraries like -lwhatever.
4313
4314 Make sure you include the appropriate -L/path flags if your C linker
4315 does not normally search all of the directories you specified above,
4316 namely
4317         $libpth
4318 To use no flags, specify the word "none".
4319
4320 EOH
4321
4322 rp="Any additional ld flags (NOT including libraries)?"
4323 . ./myread
4324 case "$ans" in
4325 none) ldflags='';;
4326 *) ldflags="$ans";;
4327 esac
4328 rmlist="$rmlist pdp11"
4329
4330 : coherency check
4331 echo " "
4332 echo "Checking your choice of C compiler and flags for coherency..." >&4
4333 $cat > try.c <<'EOF'
4334 #include <stdio.h>
4335 int main() { printf("Ok\n"); exit(0); }
4336 EOF
4337 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4338 shift
4339 $cat >try.msg <<'EOM'
4340 I've tried to compile and run the following simple program:
4341
4342 EOM
4343 $cat try.c >> try.msg
4344
4345 $cat >> try.msg <<EOM
4346
4347 I used the command:
4348
4349         $*
4350         ./try
4351
4352 and I got the following output:
4353
4354 EOM
4355 dflt=y
4356 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4357         if sh -c './try' >>try.msg 2>&1; then
4358                 xxx=`./try`
4359                 case "$xxx" in
4360                 "Ok") dflt=n ;;
4361                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4362                         case " $libs " in
4363                         *" -lsfio "*)
4364                                 cat >> try.msg <<'EOQS'
4365 If $libs contains -lsfio, and sfio is mis-configured, then it
4366 sometimes (apparently) runs and exits with a 0 status, but with no
4367 output!  It may have to do with sfio's use of _exit vs. exit.
4368
4369 EOQS
4370                                 rp="You have a big problem.  Shall I abort Configure"
4371                                 dflt=y
4372                                 ;;
4373                         esac
4374                         ;;
4375                 esac
4376         else
4377                 echo "The program compiled OK, but exited with status $?." >>try.msg
4378                 rp="You have a problem.  Shall I abort Configure"
4379                 dflt=y
4380         fi
4381 else
4382         echo "I can't compile the test program." >>try.msg
4383         rp="You have a BIG problem.  Shall I abort Configure"
4384         dflt=y
4385 fi
4386 case "$dflt" in
4387 y)
4388         $cat try.msg >&4
4389         case "$knowitall" in
4390         '')
4391                 echo "(The supplied flags or libraries might be incorrect.)"
4392                 ;;
4393         *) dflt=n;;
4394         esac
4395         echo " "
4396         . ./myread
4397         case "$ans" in
4398         n*|N*) ;;
4399         *)      echo "Ok.  Stopping Configure." >&4
4400                 exit 1
4401                 ;;
4402         esac
4403         ;;
4404 n) echo "OK, that should do.";;
4405 esac
4406 $rm -f try try.* core
4407
4408 : determine filename position in cpp output
4409 echo " "
4410 echo "Computing filename position in cpp output for #include directives..." >&4
4411 echo '#include <stdio.h>' > foo.c
4412 $cat >fieldn <<EOF
4413 $startsh
4414 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4415 $grep '^[       ]*#.*stdio\.h' | \
4416 while read cline; do
4417         pos=1
4418         set \$cline
4419         while $test \$# -gt 0; do
4420                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4421                         echo "\$pos"
4422                         exit 0
4423                 fi
4424                 shift
4425                 pos=\`expr \$pos + 1\`
4426         done
4427 done
4428 EOF
4429 chmod +x fieldn
4430 fieldn=`./fieldn`
4431 $rm -f foo.c fieldn
4432 case $fieldn in
4433 '') pos='???';;
4434 1) pos=first;;
4435 2) pos=second;;
4436 3) pos=third;;
4437 *) pos="${fieldn}th";;
4438 esac
4439 echo "Your cpp writes the filename in the $pos field of the line."
4440
4441 : locate header file
4442 $cat >findhdr <<EOF
4443 $startsh
4444 wanted=\$1
4445 name=''
4446 for usrincdir in $usrinc
4447 do
4448         if test -f \$usrincdir/\$wanted; then
4449                 echo "\$usrincdir/\$wanted"
4450                 exit 0
4451         fi
4452 done
4453 awkprg='{ print \$$fieldn }'
4454 echo "#include <\$wanted>" > foo\$\$.c
4455 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4456 $grep "^[       ]*#.*\$wanted" | \
4457 while read cline; do
4458         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4459         case "\$name" in
4460         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4461         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4462         *) exit 2;;
4463         esac;
4464 done;
4465 #
4466 # status = 0: grep returned 0 lines, case statement not executed
4467 # status = 1: headerfile found
4468 # status = 2: while loop executed, no headerfile found
4469 #
4470 status=\$?
4471 $rm -f foo\$\$.c;
4472 if test \$status -eq 1; then
4473         exit 0;
4474 fi
4475 exit 1
4476 EOF
4477 chmod +x findhdr
4478
4479 : define an alternate in-header-list? function
4480 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4481 cont=true; xxf="echo \"<\$1> found.\" >&4";
4482 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4483 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4484 esac;
4485 case $# in 4) instead=instead;; *) instead="at last";; esac;
4486 while $test "$cont"; do
4487         xxx=`./findhdr $1`
4488         var=$2; eval "was=\$$2";
4489         if $test "$xxx" && $test -r "$xxx";
4490         then eval $xxf;
4491         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4492                 cont="";
4493         else eval $xxnf;
4494         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4495         set $yyy; shift; shift; yyy=$@;
4496         case $# in 0) cont="";;
4497         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4498                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4499         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4500                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4501         esac;
4502 done;
4503 while $test "$yyy";
4504 do set $yyy; var=$2; eval "was=\$$2";
4505         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4506         set $yyy; shift; shift; yyy=$@;
4507 done'
4508
4509 : see if this is a malloc.h system
4510 set malloc.h i_malloc
4511 eval $inhdr
4512
4513 : see if stdlib is available
4514 set stdlib.h i_stdlib
4515 eval $inhdr
4516
4517 : determine which malloc to compile in
4518 echo " "
4519 case "$usemymalloc" in
4520 ''|[yY]*|true|$define)  dflt='y' ;;
4521 *)      dflt='n' ;;
4522 esac
4523 rp="Do you wish to attempt to use the malloc that comes with $package?"
4524 . ./myread
4525 usemymalloc="$ans"
4526 case "$ans" in
4527 y*|true)
4528         usemymalloc='y'
4529         mallocsrc='malloc.c'
4530         mallocobj="malloc$_o"
4531         d_mymalloc="$define"
4532         case "$libs" in
4533         *-lmalloc*)
4534                 : Remove malloc from list of libraries to use
4535                 echo "Removing unneeded -lmalloc from library list" >&4
4536                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4537                 shift
4538                 libs="$*"
4539                 echo "libs = $libs" >&4
4540                 ;;
4541         esac
4542         ;;
4543 *)
4544         usemymalloc='n'
4545         mallocsrc=''
4546         mallocobj=''
4547         d_mymalloc="$undef"
4548         ;;
4549 esac
4550
4551 : compute the return types of malloc and free
4552 echo " "
4553 $cat >malloc.c <<END
4554 #$i_malloc I_MALLOC
4555 #$i_stdlib I_STDLIB
4556 #include <stdio.h>
4557 #include <sys/types.h>
4558 #ifdef I_MALLOC
4559 #include <malloc.h>
4560 #endif
4561 #ifdef I_STDLIB
4562 #include <stdlib.h>
4563 #endif
4564 #ifdef TRY_MALLOC
4565 void *malloc();
4566 #endif
4567 #ifdef TRY_FREE
4568 void free();
4569 #endif
4570 END
4571 case "$malloctype" in
4572 '')
4573         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4574                 malloctype='void *'
4575         else
4576                 malloctype='char *'
4577         fi
4578         ;;
4579 esac
4580 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4581
4582 case "$freetype" in
4583 '')
4584         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4585                 freetype='void'
4586         else
4587                 freetype='int'
4588         fi
4589         ;;
4590 esac
4591 echo "Your system uses $freetype free(), it would seem." >&4
4592 $rm -f malloc.[co]
4593 $cat <<EOM
4594
4595 The installation process will also create a directory for
4596 vendor-supplied add-ons.  Vendors who supply perl with their system
4597 may find it convenient to place all vendor-supplied files in this
4598 directory rather than in the main distribution directory.  This will
4599 ease upgrades between binary-compatible maintenance versions of perl.
4600
4601 Of course you may also use these directories in whatever way you see
4602 fit.  For example, you might use them to access modules shared over a
4603 company-wide network.
4604
4605 The default answer should be fine for most people.
4606 This causes further questions about vendor add-ons to be skipped
4607 and no vendor-specific directories will be configured for perl.
4608
4609 EOM
4610 rp='Do you want to configure vendor-specific add-on directories?'
4611 case "$usevendorprefix" in
4612 define|true|[yY]*) dflt=y ;;
4613 *) dflt=n ;;
4614 esac
4615 . ./myread
4616 case "$ans" in
4617 [yY]*)  fn=d~+
4618         rp='Installation prefix to use for vendor-supplied add-ons?'
4619         case "$vendorprefix" in
4620         '') dflt='' ;;
4621         *)  dflt=$vendorprefix ;;
4622         esac
4623         . ./getfile
4624         oldvendorprefix=''
4625         case "$vendorprefix" in
4626         '') ;;
4627         *)      case "$ans" in
4628                 "$prefix") ;;
4629                 *) oldvendorprefix="$prefix";;
4630                 esac
4631                 ;;
4632         esac
4633         usevendorprefix="$define"
4634         vendorprefix="$ans"
4635         vendorprefixexp="$ansexp"
4636         ;;
4637 *)      usevendorprefix="$undef"
4638         vendorprefix=''
4639         vendorprefixexp=''
4640         ;;
4641 esac
4642
4643 case "$vendorprefix" in
4644 '')     d_vendorlib="$undef"
4645         vendorlib=''
4646         vendorlibexp=''
4647         ;;
4648 *)      d_vendorlib="$define"
4649         : determine where vendor-supplied modules go.
4650         : Usual default is /usr/local/lib/perl5/vendor_perl
4651         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4652         case "$installstyle" in
4653         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4654         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4655         esac
4656         fn=d~+
4657         rp='Pathname for the vendor-supplied library files?'
4658         . ./getfile
4659         vendorlib="$ans"
4660         vendorlibexp="$ansexp"
4661         : Change installation prefix, if necessary.
4662         if $test X"$prefix" != X"$installprefix"; then
4663                 installvendorlib=`echo $vendorlibexp | $sed 's#^$prefix#$installprefix#'`
4664         else
4665                 installvendorlib="$vendorlibexp"
4666         fi
4667         ;;
4668 esac
4669
4670 : Cruising for prototypes
4671 echo " "
4672 echo "Checking out function prototypes..." >&4
4673 $cat >prototype.c <<'EOCP'
4674 int main(int argc, char *argv[]) {
4675         exit(0);}
4676 EOCP
4677 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4678         echo "Your C compiler appears to support function prototypes."
4679         val="$define"
4680 else
4681         echo "Your C compiler doesn't seem to understand function prototypes."
4682         val="$undef"
4683 fi
4684 set prototype
4685 eval $setvar
4686 $rm -f prototype*
4687
4688 case "$prototype" in
4689 "$define") ;;
4690 *)      ansi2knr='ansi2knr'
4691         echo " "
4692         cat <<EOM >&4
4693
4694 $me:  FATAL ERROR:
4695 This version of $package can only be compiled by a compiler that 
4696 understands function prototypes.  Unfortunately, your C compiler 
4697         $cc $ccflags
4698 doesn't seem to understand them.  Sorry about that.
4699
4700 If GNU cc is available for your system, perhaps you could try that instead.  
4701
4702 Eventually, we hope to support building Perl with pre-ANSI compilers.
4703 If you would like to help in that effort, please contact <perlbug@perl.org>.
4704
4705 Aborting Configure now.
4706 EOM
4707         exit 2
4708         ;;
4709 esac
4710
4711 : determine where public executables go
4712 echo " "
4713 set dflt bin bin
4714 eval $prefixit
4715 fn=d~
4716 rp='Pathname where the public executables will reside?'
4717 . ./getfile
4718 if $test "X$ansexp" != "X$binexp"; then
4719         installbin=''
4720 fi
4721 bin="$ans"
4722 binexp="$ansexp"
4723 : Change installation prefix, if necessary.
4724 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4725 if $test X"$prefix" != X"$installprefix"; then
4726         installbin=`echo $binexp | sed 's#^$prefix#$installprefix#'`
4727 else
4728         installbin="$binexp"
4729 fi
4730
4731 : determine whether to install perl also as /usr/bin/perl
4732
4733 echo " "
4734 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4735         $cat <<EOM
4736 Many scripts expect to perl to be installed as /usr/bin/perl.
4737 I can install the perl you are about to compile also as /usr/bin/perl
4738 (in addition to $installbin/perl).
4739 EOM
4740         case "$installusrbinperl" in
4741         "$undef"|[nN]*) dflt='n';;
4742         *)              dflt='y';;
4743         esac
4744         rp="Do you want to install perl as /usr/bin/perl?"
4745         . ./myread
4746         case "$ans" in
4747         [yY]*)  val="$define";;
4748         *)      val="$undef" ;;
4749         esac
4750 else
4751         val="$undef"
4752 fi
4753 set installusrbinperl
4754 eval $setvar
4755
4756 : define a shorthand compile call
4757 compile='
4758 mc_file=$1;
4759 shift;
4760 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4761 : define a shorthand compile call for compilations that should be ok.
4762 compile_ok='
4763 mc_file=$1;
4764 shift;
4765 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4766
4767 echo " "
4768 echo "Checking for GNU C Library..." >&4
4769 cat >gnulibc.c <<EOM
4770 #include <stdio.h>
4771 int main()
4772 {
4773 #ifdef __GLIBC__
4774     exit(0);
4775 #else
4776     exit(1);
4777 #endif
4778 }
4779 EOM
4780 set gnulibc
4781 if eval $compile_ok && ./gnulibc; then
4782         val="$define"
4783         echo "You are using the GNU C Library"
4784 else
4785         val="$undef"
4786         echo "You are not using the GNU C Library"
4787 fi
4788 $rm -f gnulibc*
4789 set d_gnulibc
4790 eval $setvar
4791
4792 : see if nm is to be used to determine whether a symbol is defined or not
4793 case "$usenm" in
4794 '')
4795         dflt=''
4796         case "$d_gnulibc" in
4797         "$define")
4798                 echo " "
4799                 echo "nm probably won't work on the GNU C Library." >&4
4800                 dflt=n
4801                 ;;
4802         esac
4803         case "$dflt" in
4804         '') 
4805                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4806                         echo " "
4807                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4808                         echo "'nm' won't be sufficient on this sytem." >&4
4809                         dflt=n
4810                 fi
4811                 ;;
4812         esac
4813         case "$dflt" in
4814         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4815                 if $test $dflt -gt 20; then
4816                         dflt=y
4817                 else
4818                         dflt=n
4819                 fi
4820                 ;;
4821         esac
4822         ;;
4823 *)
4824         case "$usenm" in
4825         true|$define) dflt=y;;
4826         *) dflt=n;;
4827         esac
4828         ;;
4829 esac
4830 $cat <<EOM
4831
4832 I can use $nm to extract the symbols from your C libraries. This
4833 is a time consuming task which may generate huge output on the disk (up
4834 to 3 megabytes) but that should make the symbols extraction faster. The
4835 alternative is to skip the 'nm' extraction part and to compile a small
4836 test program instead to determine whether each symbol is present. If
4837 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4838 this may be the best solution.
4839
4840 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4841
4842 EOM
4843 rp="Shall I use $nm to extract C symbols from the libraries?"
4844 . ./myread
4845 case "$ans" in
4846 [Nn]*) usenm=false;;
4847 *) usenm=true;;
4848 esac
4849
4850 runnm=$usenm
4851 case "$reuseval" in
4852 true) runnm=false;;
4853 esac
4854
4855 : nm options which may be necessary
4856 case "$nm_opt" in
4857 '') if $test -f /mach_boot; then
4858                 nm_opt=''       # Mach
4859         elif $test -d /usr/ccs/lib; then
4860                 nm_opt='-p'     # Solaris (and SunOS?)
4861         elif $test -f /dgux; then
4862                 nm_opt='-p'     # DG-UX
4863         elif $test -f /lib64/rld; then
4864                 nm_opt='-p'     # 64-bit Irix
4865         else
4866                 nm_opt=''
4867         fi;;
4868 esac
4869
4870 : nm options which may be necessary for shared libraries but illegal
4871 : for archive libraries.  Thank you, Linux.
4872 case "$nm_so_opt" in
4873 '')     case "$myuname" in
4874         *linux*)
4875                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4876                         nm_so_opt='--dynamic'
4877                 fi
4878                 ;;
4879         esac
4880         ;;
4881 esac
4882
4883 case "$runnm" in
4884 true)
4885 : get list of predefined functions in a handy place
4886 echo " "
4887 case "$libc" in
4888 '') libc=unknown
4889         case "$libs" in
4890         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4891         esac
4892         ;;
4893 esac
4894 libnames='';
4895 case "$libs" in
4896 '') ;;
4897 *)  for thislib in $libs; do
4898         case "$thislib" in
4899         -lc|-lc_s)
4900                 : Handle C library specially below.
4901                 ;;
4902         -l*)
4903                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4904                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4905                         :
4906                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4907                         :
4908                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4909                         :
4910                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4911                         :
4912                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4913                         :
4914                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4915                         :
4916                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4917                         :
4918                 else
4919                         try=''
4920                 fi
4921                 libnames="$libnames $try"
4922                 ;;
4923         *) libnames="$libnames $thislib" ;;
4924         esac
4925         done
4926         ;;
4927 esac
4928 xxx=normal
4929 case "$libc" in
4930 unknown)
4931         set /lib/libc.$so
4932         for xxx in $libpth; do
4933                 $test -r $1 || set $xxx/libc.$so
4934                 : The messy sed command sorts on library version numbers.
4935                 $test -r $1 || \
4936                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4937                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4938                                 h
4939                                 s/[0-9][0-9]*/0000&/g
4940                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4941                                 G
4942                                 s/\n/ /' | \
4943                          sort | $sed -e 's/^.* //'`
4944                 eval set \$$#
4945         done
4946         $test -r $1 || set /usr/ccs/lib/libc.$so
4947         $test -r $1 || set /lib/libsys_s$_a
4948         ;;
4949 *)
4950         set blurfl
4951         ;;
4952 esac
4953 if $test -r "$1"; then
4954         echo "Your (shared) C library seems to be in $1."
4955         libc="$1"
4956 elif $test -r /lib/libc && $test -r /lib/clib; then
4957         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4958         xxx=apollo
4959         libc='/lib/clib /lib/libc'
4960         if $test -r /lib/syslib; then
4961                 echo "(Your math library is in /lib/syslib.)"
4962                 libc="$libc /lib/syslib"
4963         fi
4964 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4965         echo "Your C library seems to be in $libc, as you said before."
4966 elif $test -r $incpath/usr/lib/libc$_a; then
4967         libc=$incpath/usr/lib/libc$_a;
4968         echo "Your C library seems to be in $libc.  That's fine."
4969 elif $test -r /lib/libc$_a; then
4970         libc=/lib/libc$_a;
4971         echo "Your C library seems to be in $libc.  You're normal."
4972 else
4973         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4974                 :
4975         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4976                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4977         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4978                 :
4979         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4980                 :
4981         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4982                 :
4983         else
4984                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4985         fi
4986         if $test -r "$tans"; then
4987                 echo "Your C library seems to be in $tans, of all places."
4988                 libc=$tans
4989         else
4990                 libc='blurfl'
4991         fi
4992 fi
4993 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4994         dflt="$libc"
4995         cat <<EOM
4996
4997 If the guess above is wrong (which it might be if you're using a strange
4998 compiler, or your machine supports multiple models), you can override it here.
4999
5000 EOM
5001 else
5002         dflt=''
5003         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5004         cat >&4 <<EOM
5005 I can't seem to find your C library.  I've looked in the following places:
5006
5007 EOM
5008         $sed 's/^/      /' libpath
5009         cat <<EOM
5010
5011 None of these seems to contain your C library. I need to get its name...
5012
5013 EOM
5014 fi
5015 fn=f
5016 rp='Where is your C library?'
5017 . ./getfile
5018 libc="$ans"
5019
5020 echo " "
5021 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5022 set X `cat libnames`
5023 shift
5024 xxx=files
5025 case $# in 1) xxx=file; esac
5026 echo "Extracting names from the following $xxx for later perusal:" >&4
5027 echo " "
5028 $sed 's/^/      /' libnames >&4
5029 echo " "
5030 $echo $n "This may take a while...$c" >&4
5031
5032 for file in $*; do
5033         case $file in
5034         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5035         *) $nm $nm_opt $file 2>/dev/null;;
5036         esac
5037 done >libc.tmp
5038
5039 $echo $n ".$c"
5040 $grep fprintf libc.tmp > libc.ptf
5041 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5042 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5043 xxx='[ADTSIW]'
5044 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5045         eval $xscan;\
5046         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5047                 eval $xrun
5048 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5049         eval $xscan;\
5050         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5051                 eval $xrun
5052 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5053         eval $xscan;\
5054         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5055                 eval $xrun
5056 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5057         eval $xscan;\
5058         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5059                 eval $xrun
5060 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5061         eval $xscan;\
5062         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5063                 eval $xrun
5064 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5065         eval $xscan;\
5066         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5067                 eval $xrun
5068 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5069                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5070         eval $xscan;\
5071         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5072                 eval $xrun
5073 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5074         eval $xscan;\
5075         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5076                 eval $xrun
5077 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5078         eval $xscan;\
5079         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5080                 eval $xrun
5081 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5082         eval $xscan;\
5083         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5084                 eval $xrun
5085 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5086         eval $xscan;\
5087         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5088                 eval $xrun
5089 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5090         eval $xscan;\
5091         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5092                 eval $xrun
5093 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5094         eval $xscan;\
5095         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5096                 eval $xrun
5097 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5098         eval $xscan;\
5099         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5100                 eval $xrun
5101 else
5102         $nm -p $* 2>/dev/null >libc.tmp
5103         $grep fprintf libc.tmp > libc.ptf
5104         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5105                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5106         then
5107                 nm_opt='-p'
5108                 eval $xrun
5109         else
5110                 echo " "
5111                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5112                 com=''
5113                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5114                         for thisname in $libnames $libc; do
5115                                 $ar t $thisname >>libc.tmp
5116                         done
5117                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5118                         echo "Ok." >&4
5119                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5120                         # Repeat libc to extract forwarders to DLL entries too
5121                         for thisname in $libnames $libc; do
5122                                 $ar tv $thisname >>libc.tmp
5123                                 # Revision 50 of EMX has bug in $ar.
5124                                 # it will not extract forwarders to DLL entries
5125                                 # Use emximp which will extract exactly them.
5126                                 emximp -o tmp.imp $thisname \
5127                                     2>/dev/null && \
5128                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5129                                     < tmp.imp >>libc.tmp
5130                                 $rm tmp.imp
5131                         done
5132                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5133                         echo "Ok." >&4
5134                 else
5135                         echo "$ar didn't seem to work right." >&4
5136                         echo "Maybe this is a Cray...trying bld instead..." >&4
5137                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5138                         then
5139                                 for thisname in $libnames; do
5140                                         bld t $libnames | \
5141                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5142                                         $ar t $thisname >>libc.tmp
5143                                 done
5144                                 echo "Ok." >&4
5145                         else
5146                                 echo "That didn't work either.  Giving up." >&4
5147                                 exit 1
5148                         fi
5149                 fi
5150         fi
5151 fi
5152 nm_extract="$com"
5153 if $test -f /lib/syscalls.exp; then
5154         echo " "
5155         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5156         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5157 fi
5158 ;;
5159 esac
5160 $rm -f libnames libpath
5161
5162 : see if dld is available
5163 set dld.h i_dld
5164 eval $inhdr
5165
5166 : is a C symbol defined?
5167 csym='tlook=$1;
5168 case "$3" in
5169 -v) tf=libc.tmp; tc=""; tdc="";;
5170 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5171 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5172 esac;
5173 tx=yes;
5174 case "$reuseval-$4" in
5175 true-) ;;
5176 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5177 esac;
5178 case "$tx" in
5179 yes)
5180         case "$runnm" in
5181         true)
5182                 if $contains $tlook $tf >/dev/null 2>&1;
5183                 then tval=true;
5184                 else tval=false;
5185                 fi;;
5186         *)
5187                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5188                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5189                 then tval=true;
5190                 else tval=false;
5191                 fi;
5192                 $rm -f t t.c;;
5193         esac;;
5194 *)
5195         case "$tval" in
5196         $define) tval=true;;
5197         *) tval=false;;
5198         esac;;
5199 esac;
5200 eval "$2=$tval"'
5201
5202 : define an is-in-libc? function
5203 inlibc='echo " "; td=$define; tu=$undef;
5204 sym=$1; var=$2; eval "was=\$$2";
5205 tx=yes;
5206 case "$reuseval$was" in
5207 true) ;;
5208 true*) tx=no;;
5209 esac;
5210 case "$tx" in
5211 yes)
5212         set $sym tres -f;
5213         eval $csym;
5214         case "$tres" in
5215         true)
5216                 echo "$sym() found." >&4;
5217                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5218         *)
5219                 echo "$sym() NOT found." >&4;
5220                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5221         esac;;
5222 *)
5223         case "$was" in
5224         $define) echo "$sym() found." >&4;;
5225         *) echo "$sym() NOT found." >&4;;
5226         esac;;
5227 esac'
5228
5229 : see if dlopen exists
5230 xxx_runnm="$runnm"
5231 runnm=false
5232 set dlopen d_dlopen
5233 eval $inlibc
5234 runnm="$xxx_runnm"
5235
5236 : determine which dynamic loading, if any, to compile in
5237 echo " "
5238 dldir="ext/DynaLoader"
5239 case "$usedl" in
5240 $define|y|true)
5241         dflt='y'
5242         usedl="$define"
5243         ;;
5244 $undef|n|false)
5245         dflt='n'
5246         usedl="$undef"
5247         ;;
5248 *) 
5249         dflt='n'
5250         case "$d_dlopen" in
5251             $define) dflt='y' ;;
5252         esac
5253         case "$i_dld" in
5254             $define) dflt='y' ;;
5255         esac
5256         : Does a dl_xxx.xs file exist for this operating system
5257         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5258         ;;
5259 esac
5260 rp="Do you wish to use dynamic loading?"
5261 . ./myread
5262 usedl="$ans"
5263 case "$ans" in
5264 y*) usedl="$define"
5265         case "$dlsrc" in
5266         '')
5267                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5268                         dflt="$dldir/dl_${osname}.xs"
5269                 elif $test "$d_dlopen" = "$define" ; then
5270                         dflt="$dldir/dl_dlopen.xs"
5271                 elif $test "$i_dld" = "$define" ; then
5272                         dflt="$dldir/dl_dld.xs"
5273                 else
5274                         dflt=''
5275                 fi
5276                 ;;
5277         *)      dflt="$dldir/$dlsrc"
5278                 ;;
5279         esac
5280     echo "The following dynamic loading files are available:"
5281         : Can not go over to $dldir because getfile has path hard-coded in.
5282         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5283         rp="Source file to use for dynamic loading"
5284         fn="fne"
5285         gfpth="$src"
5286         . ./getfile
5287         usedl="$define"
5288         : emulate basename
5289         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5290
5291         $cat << EOM
5292
5293 Some systems may require passing special flags to $cc -c to
5294 compile modules that will be used to create a shared library.
5295 To use no flags, say "none".
5296
5297 EOM
5298     case "$cccdlflags" in
5299     '') case "$gccversion" in
5300                 '') case "$osname" in
5301                         hpux)   dflt='+z' ;;
5302                         next)   dflt='none' ;;
5303                         irix*)  dflt='-KPIC' ;;
5304                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5305                         sunos)  dflt='-pic' ;;
5306                         *)      dflt='none' ;;
5307                     esac
5308                         ;;
5309                 *)  case "$osname" in
5310                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5311                         *)      dflt='-fpic' ;;
5312                     esac ;;
5313             esac ;;
5314         ' ') dflt='none' ;;
5315     *)  dflt="$cccdlflags" ;;
5316     esac
5317     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5318     . ./myread
5319     case "$ans" in
5320     none) cccdlflags=' ' ;;
5321     *) cccdlflags="$ans" ;;
5322     esac
5323
5324     cat << EOM
5325
5326 Some systems use ld to create libraries that can be dynamically loaded,
5327 while other systems (such as those using ELF) use $cc.
5328
5329 EOM
5330         case "$ld" in
5331         '')     $cat >try.c <<'EOM'
5332 /* Test for whether ELF binaries are produced */
5333 #include <fcntl.h>
5334 #include <stdlib.h>
5335 int main() {
5336         char b[4];
5337         int i = open("a.out",O_RDONLY);
5338         if(i == -1) 
5339                 exit(1); /* fail */
5340         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5341                 exit(0); /* succeed (yes, it's ELF) */
5342         else
5343                 exit(1); /* fail */
5344 }
5345 EOM
5346                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5347                         cat <<EOM
5348 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5349 EOM
5350                         dflt="$cc"
5351                 else
5352                         echo "I'll use ld to build dynamic libraries."
5353                         dflt='ld'
5354                 fi
5355                 rm -f try.c a.out
5356                 ;;
5357         *)      dflt="$ld"
5358                 ;;
5359         esac
5360
5361     rp="What command should be used to create dynamic libraries?"
5362     . ./myread
5363         ld="$ans"
5364
5365     cat << EOM
5366
5367 Some systems may require passing special flags to $ld to create a
5368 library that can be dynamically loaded.  If your ld flags include
5369 -L/other/path options to locate libraries outside your loader's normal
5370 search path, you may need to specify those -L options here as well.  To
5371 use no flags, say "none".
5372
5373 EOM
5374     case "$lddlflags" in
5375     '') case "$osname" in
5376                         beos) dflt='-nostart' ;;
5377                         hpux)  dflt='-b' ;;
5378                         linux|irix*)    dflt='-shared' ;;
5379                         next)  dflt='none' ;;
5380                         solaris) dflt='-G' ;;
5381                         sunos) dflt='-assert nodefinitions' ;;
5382                         svr4*|esix*) dflt="-G $ldflags" ;;
5383                 *)     dflt='none' ;;
5384                         esac
5385                         ;;
5386     *) dflt="$lddlflags" ;;
5387     esac
5388
5389         : Try to guess additional flags to pick up local libraries.
5390         : Be careful not to append to a plain 'none'
5391         case "$dflt" in
5392         none) dflt='' ;;
5393         esac
5394         for thisflag in $ldflags; do
5395                 case "$thisflag" in
5396                 -L*)
5397                         case " $dflt " in
5398                         *" $thisflag "*) ;;
5399                         *) dflt="$dflt $thisflag" ;;
5400                         esac
5401                         ;;
5402                 esac
5403         done
5404
5405         case "$dflt" in
5406         ''|' ') dflt='none' ;;
5407         esac
5408
5409     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5410     . ./myread
5411     case "$ans" in
5412     none) lddlflags=' ' ;;
5413     *) lddlflags="$ans" ;;
5414     esac
5415
5416         cat <<EOM
5417
5418 Some systems may require passing special flags to $cc to indicate that
5419 the resulting executable will use dynamic linking.  To use no flags,
5420 say "none".
5421
5422 EOM
5423     case "$ccdlflags" in
5424     '') case "$osname" in
5425                 hpux)   dflt='-Wl,-E' ;;
5426                 linux)  dflt='-rdynamic' ;;
5427                 next)   dflt='none' ;;
5428                 sunos)  dflt='none' ;;
5429                 *)      dflt='none' ;;
5430             esac ;;
5431     ' ')  dflt='none' ;;
5432     *)  dflt="$ccdlflags" ;;
5433     esac
5434     rp="Any special flags to pass to $cc to use dynamic loading?"
5435     . ./myread
5436     case "$ans" in
5437     none) ccdlflags=' ' ;;
5438     *) ccdlflags="$ans" ;;
5439     esac
5440     ;;
5441 *)  usedl="$undef"
5442         ld='ld'
5443     dlsrc='dl_none.xs'
5444     lddlflags=''
5445     ccdlflags=''
5446     ;;
5447 esac
5448
5449 also=''
5450 case "$usedl" in
5451 $undef)
5452         # No dynamic loading being used, so don't bother even to prompt.
5453         useshrplib='false'
5454         ;;
5455 *)      case "$useshrplib" in
5456         '')     case "$osname" in
5457                 svr4*|dgux|dynixptx|esix|powerux|beos)
5458                         dflt=y
5459                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5460                         ;;
5461                 next*)
5462                         case "$osvers" in
5463                         4*)     dflt=y
5464                                 also='Building a shared libperl is needed for MAB support.'
5465                                 ;;
5466                         *)      dflt=n
5467                                 ;;
5468                         esac
5469                         ;;
5470                 *)      dflt=n
5471                         ;;
5472                 esac
5473                 ;;
5474         $define|true|[Yy]*)
5475                 dflt=y
5476                 ;;
5477         *)      dflt=n
5478                 ;;
5479         esac
5480         $cat << EOM
5481
5482 The perl executable is normally obtained by linking perlmain.c with
5483 libperl${_a}, any static extensions (usually just DynaLoader), and
5484 any other libraries needed on this system (such as -lm, etc.).  Since
5485 your system supports dynamic loading, it is probably possible to build
5486 a shared libperl.$so.  If you will have more than one executable linked
5487 to libperl.$so, this will significantly reduce the size of each
5488 executable, but it may have a noticeable affect on performance.  The
5489 default is probably sensible for your system.
5490 $also
5491
5492 EOM
5493         rp="Build a shared libperl.$so (y/n)"
5494         . ./myread
5495         case "$ans" in
5496         true|$define|[Yy]*)
5497                 useshrplib='true'  ;;
5498         *)      useshrplib='false' ;;
5499         esac
5500         ;;
5501 esac
5502
5503 case "$useshrplib" in
5504 true)
5505         case "$libperl" in
5506         '')
5507                 # Figure out a good name for libperl.so.  Since it gets stored in
5508                 # a version-specific architecture-dependent library, the version
5509                 # number isn't really that important, except for making cc/ld happy.
5510                 #
5511                 # A name such as libperl.so.3.1
5512                 majmin="libperl.$so.$patchlevel.$subversion"
5513                 # A name such as libperl.so.301
5514                 majonly=`echo $patchlevel $subversion |
5515                         $awk '{printf "%d%02d", $1, $2}'`
5516                 majonly=libperl.$so.$majonly
5517                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5518                 # rely on figuring it out from the naming of libc.
5519                 case "${osname}${osvers}" in
5520                 next4*)
5521                         dflt=libperl.5.$so
5522                         # XXX How handle the --version stuff for MAB?
5523                         ;;
5524                 linux*)  # ld won't link with a bare -lperl otherwise.
5525                         dflt=libperl.$so
5526                         ;;
5527                 *)      # Try to guess based on whether libc has major.minor.
5528                         case "$libc" in
5529                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5530                         *libc.$so.[0-9]*) dflt=$majonly ;;
5531                         *)      dflt=libperl.$so ;;
5532                         esac
5533                         ;;
5534                 esac
5535                 ;;
5536         *)      dflt=$libperl
5537                 ;;
5538         esac
5539         cat << EOM
5540
5541 I need to select a good name for the shared libperl.  If your system uses
5542 library names with major and minor numbers, then you might want something
5543 like $majmin.  Alternatively, if your system uses a single version
5544 number for shared libraries, then you might want to use $majonly.
5545 Or, your system might be quite happy with a simple libperl.$so.
5546
5547 Since the shared libperl will get installed into a version-specific
5548 architecture-dependent directory, the version number of the shared perl
5549 library probably isn't important, so the default should be o.k.
5550
5551 EOM
5552         rp='What name do you want to give to the shared libperl?'
5553         . ./myread
5554         libperl=$ans
5555         echo "Ok, I'll use $libperl"
5556         ;;
5557 *)
5558         libperl="libperl${_a}"
5559         ;;
5560 esac
5561
5562 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5563 case "$shrpdir" in
5564 '') ;;
5565 *)      $cat >&4 <<EOM
5566 WARNING:  Use of the shrpdir variable for the installation location of
5567 the shared $libperl is not supported.  It was never documented and
5568 will not work in this version.  Let me (perlbug@perl.com)
5569 know of any problems this may cause.
5570
5571 EOM
5572         case "$shrpdir" in
5573         "$archlibexp/CORE")
5574                 $cat >&4 <<EOM
5575 But your current setting of $shrpdir is
5576 the default anyway, so it's harmless.
5577 EOM
5578                 ;;
5579         *)
5580                 $cat >&4 <<EOM
5581 Further, your current attempted setting of $shrpdir
5582 conflicts with the value of $archlibexp/CORE
5583 that installperl will use.
5584 EOM
5585                 ;;
5586         esac
5587         ;;
5588 esac
5589
5590 # How will the perl executable find the installed shared $libperl?
5591 # Add $xxx to ccdlflags.
5592 # If we can't figure out a command-line option, use $shrpenv to
5593 # set env LD_RUN_PATH.  The main perl makefile uses this.
5594 shrpdir=$archlibexp/CORE
5595 xxx=''
5596 tmp_shrpenv=''
5597 if "$useshrplib"; then
5598     case "$osname" in 
5599         aix)
5600                 # We'll set it in Makefile.SH...
5601                 ;;
5602         solaris|netbsd)
5603                 xxx="-R $shrpdir"
5604                 ;;
5605         freebsd)
5606                 xxx="-Wl,-R$shrpdir"
5607                 ;;
5608         linux|irix*|dec_osf)
5609                 xxx="-Wl,-rpath,$shrpdir"
5610                 ;;
5611         next)
5612                 # next doesn't like the default...
5613                 ;;
5614         beos)
5615                 # beos doesn't like the default, either.
5616                 ;;
5617         hpux*)
5618                 # hpux doesn't like the default, either.
5619                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5620                 ;;
5621         *)
5622                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5623                 ;;
5624         esac
5625         case "$xxx" in
5626         '') ;;
5627         *)      
5628                 # Only add $xxx if it isn't already in ccdlflags.
5629                 case " $ccdlflags " in
5630                 *" $xxx "*)     ;;
5631                 *)      ccdlflags="$ccdlflags $xxx"
5632                         cat <<EOM >&4
5633
5634 Adding $xxx to the flags
5635 passed to $ld so that the perl executable will find the 
5636 installed shared $libperl.
5637
5638 EOM
5639                         ;;
5640                 esac
5641                 ;;
5642         esac
5643 fi
5644 # Fix ccdlflags in AIX for building external extensions.
5645 # (For building Perl itself bare -bE:perl.exp is needed,
5646 #  Makefile.SH takes care of this.)
5647 case "$osname" in
5648 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5649 esac
5650 # Respect a hint or command-line value.
5651 case "$shrpenv" in
5652 '') shrpenv="$tmp_shrpenv" ;;
5653 esac
5654 case "$ldlibpthname" in
5655 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5656 none)   ldlibpthname='' ;;
5657 esac
5658
5659 : determine where manual pages go
5660 set man1dir man1dir none
5661 eval $prefixit
5662 $cat <<EOM
5663
5664 $spackage has manual pages available in source form.
5665 EOM
5666 case "$nroff" in
5667 nroff)
5668         echo "However, you don't have nroff, so they're probably useless to you."
5669         case "$man1dir" in
5670         '') man1dir="none";;
5671         esac;;
5672 esac
5673 echo "If you don't want the manual sources installed, answer 'none'."
5674 case "$man1dir" in
5675 ' ') dflt=none
5676         ;;
5677 '')
5678         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5679         lookpath="$lookpath $prefixexp/man/p_man/man1"
5680         lookpath="$lookpath $prefixexp/man/u_man/man1"
5681         lookpath="$lookpath $prefixexp/man/man.1"
5682         case "$sysman" in
5683         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5684         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5685         esac
5686         set dflt
5687         eval $prefixup
5688         ;;
5689 *)  dflt="$man1dir"
5690         ;;
5691 esac
5692 echo " "
5693 fn=dn+~
5694 rp="Where do the main $spackage manual pages (source) go?"
5695 . ./getfile
5696 if $test "X$man1direxp" != "X$ansexp"; then
5697         installman1dir=''
5698 fi
5699 man1dir="$ans"
5700 man1direxp="$ansexp"
5701 case "$man1dir" in
5702 '')     man1dir=' '
5703         installman1dir='';;
5704 esac
5705
5706 : Change installation prefix, if necessary.
5707 if $test X"$prefix" != X"$installprefix"; then
5708         installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'`
5709 else
5710         installman1dir="$man1direxp"
5711 fi
5712
5713 : What suffix to use on installed man pages
5714
5715 case "$man1dir" in
5716 ' ')
5717         man1ext='0'
5718         ;;
5719 *)
5720         rp="What suffix should be used for the main $spackage man pages?"
5721         case "$man1ext" in
5722         '')     case "$man1dir" in
5723                 *1)  dflt=1 ;;
5724                 *1p) dflt=1p ;;
5725                 *1pm) dflt=1pm ;;
5726                 *l) dflt=l;;
5727                 *n) dflt=n;;
5728                 *o) dflt=o;;
5729                 *p) dflt=p;;
5730                 *C) dflt=C;;
5731                 *L) dflt=L;;
5732                 *L1) dflt=L1;;
5733                 *) dflt=1;;
5734                 esac
5735                 ;;
5736         *)      dflt="$man1ext";;
5737         esac
5738         . ./myread
5739         man1ext="$ans"
5740         ;;
5741 esac
5742
5743 : see if we can have long filenames
5744 echo " "
5745 rmlist="$rmlist /tmp/cf$$"
5746 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5747 first=123456789abcdef
5748 second=/tmp/cf$$/$first
5749 $rm -f $first $second
5750 if (echo hi >$first) 2>/dev/null; then
5751         if $test -f 123456789abcde; then
5752                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5753                 val="$undef"
5754         else
5755                 if (echo hi >$second) 2>/dev/null; then
5756                         if $test -f /tmp/cf$$/123456789abcde; then
5757                                 $cat <<'EOM'
5758 That's peculiar... You can have filenames longer than 14 characters, but only
5759 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5760 I shall consider your system cannot support long filenames at all.
5761 EOM
5762                                 val="$undef"
5763                         else
5764                                 echo 'You can have filenames longer than 14 characters.' >&4
5765                                 val="$define"
5766                         fi
5767                 else
5768                         $cat <<'EOM'
5769 How confusing! Some of your filesystems are sane enough to allow filenames
5770 longer than 14 characters but some others like /tmp can't even think about them.
5771 So, for now on, I shall assume your kernel does not allow them at all.
5772 EOM
5773                         val="$undef"
5774                 fi
5775         fi
5776 else
5777         $cat <<'EOM'
5778 You can't have filenames longer than 14 chars.  You can't even think about them!
5779 EOM
5780         val="$undef"
5781 fi 
5782 set d_flexfnam
5783 eval $setvar
5784 $rm -rf /tmp/cf$$ 123456789abcde*
5785
5786 : determine where library module manual pages go
5787 set man3dir man3dir none
5788 eval $prefixit
5789 $cat <<EOM
5790
5791 $spackage has manual pages for many of the library modules.
5792 EOM
5793
5794 case "$nroff" in
5795 nroff)
5796         $cat <<'EOM'
5797 However, you don't have nroff, so they're probably useless to you.
5798 EOM
5799         case "$man3dir" in
5800         '') man3dir="none";;
5801         esac;;
5802 esac
5803
5804 case "$d_flexfnam" in
5805 undef)
5806         $cat <<'EOM'
5807 However, your system can't handle the long file names like File::Basename.3. 
5808 EOM
5809         case "$man3dir" in
5810         '') man3dir="none";;
5811         esac;;
5812 esac
5813
5814 echo "If you don't want the manual sources installed, answer 'none'."
5815 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5816 case "$man3dir" in
5817 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5818         if $test -d "$privlib/man/man3"; then
5819                 cat <<EOM >&4
5820
5821 WARNING:  Previous versions of perl installed man3 pages into
5822 $privlib/man/man3.  This version will suggest a 
5823 new default of $dflt.  
5824 EOM
5825                 tdflt=$dflt
5826                 dflt='n'
5827                 rp='Do you wish to preserve the old behavior?(y/n)'
5828                 . ./myread
5829                 case "$ans" in
5830                 y*) dflt="$privlib/man/man3" ;;
5831                 *)  dflt=$tdflt ;;
5832                 esac
5833     fi
5834         ;;
5835 ' ') dflt=none;;
5836 *)      dflt="$man3dir" ;;
5837 esac
5838 echo " "
5839 fn=dn+~
5840 rp="Where do the $package library man pages (source) go?"
5841 . ./getfile
5842 man3dir="$ans"
5843 man3direxp="$ansexp"
5844 case "$man1dir" in
5845 '')     man3dir=' '
5846         installman3dir='';;
5847 esac
5848
5849 : Change installation prefix, if necessary.
5850 if $test X"$prefix" != X"$installprefix"; then
5851         installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'`
5852 else
5853         installman3dir="$man3direxp"
5854 fi
5855
5856 : What suffix to use on installed man pages
5857 case "$man3dir" in
5858 ' ')
5859         man3ext='0'
5860         ;;
5861 *)
5862         rp="What suffix should be used for the $package library man pages?"
5863         case "$man3ext" in
5864         '')     case "$man3dir" in
5865                 *3)  dflt=3 ;;
5866                 *3p) dflt=3p ;;
5867                 *3pm) dflt=3pm ;;
5868                 *l) dflt=l;;
5869                 *n) dflt=n;;
5870                 *o) dflt=o;;
5871                 *p) dflt=p;;
5872                 *C) dflt=C;;
5873                 *L) dflt=L;;
5874                 *L3) dflt=L3;;
5875                 *) dflt=3;;
5876                 esac
5877                 ;;
5878         *)      dflt="$man3ext";;
5879         esac
5880         . ./myread
5881         man3ext="$ans"
5882         ;;
5883 esac
5884
5885 : see if we have to deal with yellow pages, now NIS.
5886 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5887         if $test -f /usr/etc/nibindd; then
5888                 echo " "
5889                 echo "I'm fairly confident you're on a NeXT."
5890                 echo " "
5891                 rp='Do you get the hosts file via NetInfo?'
5892                 dflt=y
5893                 case "$hostcat" in
5894                 nidump*) ;;
5895                 '') ;;
5896                 *) dflt=n;;
5897                 esac
5898                 . ./myread
5899                 case "$ans" in
5900                 y*) hostcat='nidump hosts .';;
5901                 *)      case "$hostcat" in
5902                         nidump*) hostcat='';;
5903                         esac
5904                         ;;
5905                 esac
5906         fi
5907         case "$hostcat" in
5908         nidump*) ;;
5909         *)
5910                 case "$hostcat" in
5911                 *ypcat*) dflt=y;;
5912                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5913                                 dflt=y
5914                         else
5915                                 dflt=n
5916                         fi;;
5917                 *) dflt=n;;
5918                 esac
5919                 echo " "
5920                 rp='Are you getting the hosts file via yellow pages?'
5921                 . ./myread
5922                 case "$ans" in
5923                 y*) hostcat='ypcat hosts';;
5924                 *) hostcat='cat /etc/hosts';;
5925                 esac
5926                 ;;
5927         esac
5928 fi
5929 case "$hostcat" in
5930 '') hostcat='cat /etc/hosts';;
5931 esac
5932 case "$groupcat" in
5933 '') groupcat='cat /etc/group';;
5934 esac
5935 case "$passcat" in
5936 '') passcat='cat /etc/passwd';;
5937 esac
5938
5939 : now get the host name
5940 echo " "
5941 echo "Figuring out host name..." >&4
5942 case "$myhostname" in
5943 '') cont=true
5944         echo 'Maybe "hostname" will work...'
5945         if tans=`sh -c hostname 2>&1` ; then
5946                 myhostname=$tans
5947                 phostname=hostname
5948                 cont=''
5949         fi
5950         ;;
5951 *) cont='';;
5952 esac
5953 if $test "$cont"; then
5954         if ./xenix; then
5955                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5956                 if tans=`cat /etc/systemid 2>&1` ; then
5957                         myhostname=$tans
5958                         phostname='cat /etc/systemid'
5959                         echo "Whadyaknow.  Xenix always was a bit strange..."
5960                         cont=''
5961                 fi
5962         elif $test -r /etc/systemid; then
5963                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5964         fi
5965 fi
5966 if $test "$cont"; then
5967         echo 'No, maybe "uuname -l" will work...'
5968         if tans=`sh -c 'uuname -l' 2>&1` ; then
5969                 myhostname=$tans
5970                 phostname='uuname -l'
5971         else
5972                 echo 'Strange.  Maybe "uname -n" will work...'
5973                 if tans=`sh -c 'uname -n' 2>&1` ; then
5974                         myhostname=$tans
5975                         phostname='uname -n'
5976                 else
5977                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5978                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5979                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5980                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5981                         else
5982                                 case "$myhostname" in
5983                                 '') echo "Does this machine have an identity crisis or something?"
5984                                         phostname='';;
5985                                 *)
5986                                         echo "Well, you said $myhostname before..."
5987                                         phostname='echo $myhostname';;
5988                                 esac
5989                         fi
5990                 fi
5991         fi
5992 fi
5993 : you do not want to know about this
5994 set $myhostname
5995 myhostname=$1
5996
5997 : verify guess
5998 if $test "$myhostname" ; then
5999         dflt=y
6000         rp='Your host name appears to be "'$myhostname'".'" Right?"
6001         . ./myread
6002         case "$ans" in
6003         y*) ;;
6004         *) myhostname='';;
6005         esac
6006 fi
6007
6008 : bad guess or no guess
6009 while $test "X$myhostname" = X ; do
6010         dflt=''
6011         rp="Please type the (one word) name of your host:"
6012         . ./myread
6013         myhostname="$ans"
6014 done
6015
6016 : translate upper to lower if necessary
6017 case "$myhostname" in
6018 *[A-Z]*)
6019         echo "(Normalizing case in your host name)"
6020         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6021         ;;
6022 esac
6023
6024 case "$myhostname" in
6025 *.*)
6026         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6027         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6028         echo "(Trimming domain name from host name--host name is now $myhostname)"
6029         ;;
6030 *) case "$mydomain" in
6031         '')
6032                 {
6033                         test "X$hostcat" = "Xypcat hosts" &&
6034                         ypmatch "$myhostname" hosts 2>/dev/null |\
6035                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6036                         $test -s hosts
6037                 } || {
6038                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6039                                         /[       ]$myhostname[  . ]/p" > hosts
6040                 }
6041                 tmp_re="[       . ]"
6042                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6043                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6044                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6045                         hosts | $sort | $uniq | \
6046                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6047                 case `$echo X$dflt` in
6048                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6049                         dflt=.
6050                         ;;
6051                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6052                         ;;
6053                 esac
6054                 case "$dflt" in
6055                 .)
6056                         tans=`./loc resolv.conf X /etc /usr/etc`
6057                         if $test -f "$tans"; then
6058                                 echo "(Attempting domain name extraction from $tans)"
6059                                 dflt=.`$sed -n -e 's/   / /g' \
6060                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6061                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6062                                 case "$dflt" in
6063                                 .) dflt=.`$sed -n -e 's/        / /g' \
6064                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6065                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6066                                         ;;
6067                                 esac
6068                         fi
6069                         ;;
6070                 esac
6071                 case "$dflt" in
6072                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6073                         dflt=.`sh -c domainname 2>/dev/null`
6074                         case "$dflt" in
6075                         '') dflt='.';;
6076                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6077                         esac
6078                         ;;
6079                 esac
6080                 case "$dflt" in
6081                 .) echo "(Lost all hope -- silly guess then)"
6082                         dflt='.uucp'
6083                         ;;
6084                 esac
6085                 $rm -f hosts
6086                 ;;
6087         *) dflt="$mydomain";;
6088         esac;;
6089 esac
6090 echo " "
6091 rp="What is your domain name?"
6092 . ./myread
6093 tans="$ans"
6094 case "$ans" in
6095 '') ;;
6096 .*) ;;
6097 *) tans=".$tans";;
6098 esac
6099 mydomain="$tans"
6100
6101 : translate upper to lower if necessary
6102 case "$mydomain" in
6103 *[A-Z]*)
6104         echo "(Normalizing case in your domain name)"
6105         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6106         ;;
6107 esac
6108
6109 : a little sanity check here
6110 case "$phostname" in
6111 '') ;;
6112 *)
6113         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6114         $myhostname$mydomain|$myhostname) ;;
6115         *)
6116                 case "$phostname" in
6117                 sed*)
6118                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6119                         ;;
6120                 *)
6121                         echo "(That doesn't agree with your $phostname command, by the way.)"
6122                         ;;
6123                 esac
6124         ;;
6125         esac
6126         ;;
6127 esac
6128
6129 $cat <<EOM
6130
6131 I need to get your e-mail address in Internet format if possible, i.e.
6132 something like user@host.domain. Please answer accurately since I have
6133 no easy means to double check it. The default value provided below
6134 is most probably close to the reality but may not be valid from outside
6135 your organization...
6136
6137 EOM
6138 cont=x
6139 while test "$cont"; do
6140         case "$cf_email" in
6141         '') dflt="$cf_by@$myhostname$mydomain";;
6142         *) dflt="$cf_email";;
6143         esac
6144         rp='What is your e-mail address?'
6145         . ./myread
6146         cf_email="$ans"
6147         case "$cf_email" in
6148         *@*.*) cont='' ;;
6149         *)
6150                 rp='Address does not look like an Internet one.  Use it anyway?'
6151                 case "$fastread" in
6152                 yes) dflt=y ;;
6153                 *) dflt=n ;;
6154                 esac
6155                 . ./myread
6156                 case "$ans" in
6157                 y*) cont='' ;;
6158                 *) echo " " ;;
6159                 esac
6160                 ;;
6161         esac
6162 done
6163
6164 $cat <<EOM
6165
6166 If you or somebody else will be maintaining perl at your site, please
6167 fill in the correct e-mail address here so that they may be contacted
6168 if necessary. Currently, the "perlbug" program included with perl
6169 will send mail to this address in addition to perlbug@perl.com. You may
6170 enter "none" for no administrator.
6171
6172 EOM
6173 case "$perladmin" in
6174 '') dflt="$cf_email";;
6175 *) dflt="$perladmin";;
6176 esac
6177 rp='Perl administrator e-mail address'
6178 . ./myread
6179 perladmin="$ans"
6180
6181 : figure out how to guarantee perl startup
6182 case "$startperl" in
6183 '')
6184         case "$sharpbang" in
6185         *!)
6186                 $cat <<EOH
6187
6188 I can use the #! construct to start perl on your system. This will
6189 make startup of perl scripts faster, but may cause problems if you
6190 want to share those scripts and perl is not in a standard place
6191 ($binexp/perl) on all your platforms. The alternative is to force
6192 a shell by starting the script with a single ':' character.
6193
6194 EOH
6195                 dflt="$binexp/perl"
6196                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6197                 . ./myread
6198                 case "$ans" in
6199                 none)   startperl=": # use perl";;
6200                 *)      startperl="#!$ans"
6201                         if $test 30 -lt `echo "$ans" | wc -c`; then
6202                                 $cat >&4 <<EOM
6203
6204 WARNING:  Some systems limit the #! command to 32 characters.
6205 If you experience difficulty running Perl scripts with #!, try
6206 installing Perl in a directory with a shorter pathname.
6207
6208 EOM
6209                         fi ;;
6210                 esac
6211                 ;;
6212         *) startperl=": # use perl"
6213                 ;;
6214         esac
6215         ;;
6216 esac
6217 echo "I'll use $startperl to start perl scripts."
6218
6219 : figure best path for perl in scripts
6220 case "$perlpath" in
6221 '')
6222         perlpath="$binexp/perl"
6223         case "$startperl" in
6224         *!*) ;;
6225         *)
6226                 $cat <<EOH
6227
6228 I will use the "eval 'exec'" idiom to start Perl on your system.
6229 I can use the full path of your Perl binary for this purpose, but
6230 doing so may cause problems if you want to share those scripts and
6231 Perl is not always in a standard place ($binexp/perl).
6232
6233 EOH
6234                 dflt="$binexp/perl"
6235                 rp="What path shall I use in \"eval 'exec'\"?"
6236                 . ./myread
6237                 perlpath="$ans"
6238                 ;;
6239         esac
6240         ;;
6241 esac
6242 case "$startperl" in
6243 *!*)    ;;
6244 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6245 esac
6246
6247 : determine where public executable scripts go
6248 set scriptdir scriptdir
6249 eval $prefixit
6250 case "$scriptdir" in
6251 '')
6252         dflt="$bin"
6253         : guess some guesses
6254         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6255         $test -d /usr/share/bin     && dflt=/usr/share/bin
6256         $test -d /usr/local/script  && dflt=/usr/local/script
6257         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6258         $test -d $prefixexp/script  && dflt=$prefixexp/script
6259         set dflt
6260         eval $prefixup
6261         ;;
6262 *)  dflt="$scriptdir"
6263         ;;
6264 esac
6265 $cat <<EOM
6266  
6267 Some installations have a separate directory just for executable scripts so
6268 that they can mount it across multiple architectures but keep the scripts in
6269 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6270 Or you might just lump your scripts in with all your other executables.
6271  
6272 EOM
6273 fn=d~
6274 rp='Where do you keep publicly executable scripts?'
6275 . ./getfile
6276 if $test "X$ansexp" != "X$scriptdirexp"; then
6277         installscript=''
6278 fi
6279 scriptdir="$ans"
6280 scriptdirexp="$ansexp"
6281 : Change installation prefix, if necessary.
6282 if $test X"$prefix" != X"$installprefix"; then
6283         installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'`
6284 else
6285         installscript="$scriptdirexp"
6286 fi
6287
6288 $cat <<EOM
6289
6290 After $package is installed, you may wish to install various
6291 add-on modules and utilities.  Typically, these add-ons will
6292 be installed under $prefix with the rest
6293 of this package.  However, you may wish to install such add-ons
6294 elsewhere under a different prefix.
6295
6296 If you do not wish to put everything under a single prefix, that's
6297 ok.  You will be prompted for the individual locations; this siteprefix
6298 is only used to suggest the defaults.
6299
6300 The default should be fine for most people.
6301
6302 EOM
6303 fn=d~+
6304 rp='Installation prefix to use for add-on modules and utilities?'
6305 : XXX Here might be another good place for an installstyle setting.
6306 case "$siteprefix" in
6307 '') dflt=$prefix ;;
6308 *)  dflt=$siteprefix ;;
6309 esac
6310 . ./getfile
6311 oldsiteprefix=''
6312 case "$siteprefix" in
6313 '') ;;
6314 *)
6315         case "$ans" in
6316         "$prefix") ;;
6317         *) oldsiteprefix="$prefix";;
6318         esac
6319         ;;
6320 esac
6321 siteprefix="$ans"
6322 siteprefixexp="$ansexp"
6323
6324 : determine where site specific libraries go.
6325 : Usual default is /usr/local/lib/perl5/site_perl
6326 : The default "style" setting is made in installstyle.U
6327 : XXX No longer works with Prefixit stuff.
6328 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6329 case "$installstyle" in
6330 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6331 *)       dflt=$siteprefix/lib/site_$prog ;;
6332 esac
6333 $cat <<EOM
6334
6335 The installation process will create a directory for
6336 site-specific extensions and modules.  Most users find it convenient
6337 to place all site-specific files in this directory rather than in the
6338 main distribution directory.
6339
6340 EOM
6341 fn=d~+
6342 rp='Pathname for the site-specific library files?'
6343 . ./getfile
6344 sitelib="$ans"
6345 sitelibexp="$ansexp"
6346 : Change installation prefix, if necessary.
6347 if $test X"$prefix" != X"$installprefix"; then
6348         installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'`
6349 else
6350         installsitelib="$sitelibexp"
6351 fi
6352
6353 : determine where site specific architecture-dependent libraries go.
6354 : sitelib  default is /usr/local/lib/perl5/site_perl/
6355 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6356 : sitelib may have an optional trailing /share.
6357 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6358 tdflt="$tdflt/$apiversion/$archname"
6359 set sitearch sitearch none
6360 eval $prefixit
6361 case "$sitearch" in
6362 '')     dflt="$tdflt" ;;
6363 *)      dflt="$sitearch" ;;
6364 esac
6365 $cat <<EOM
6366
6367 The installation process will also create a directory for
6368 architecture-dependent site-specific extensions and modules.
6369
6370 EOM
6371 fn=nd~+
6372 rp='Pathname for the site-specific architecture-dependent library files?'
6373 . ./getfile
6374 sitearch="$ans"
6375 sitearchexp="$ansexp"
6376 : Change installation prefix, if necessary.
6377 if $test X"$prefix" != X"$installprefix"; then
6378         installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'`
6379 else
6380         installsitearch="$sitearchexp"
6381 fi
6382
6383 cat <<EOM
6384
6385 Previous version of $package used the standard IO mechanisms as defined
6386 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6387 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6388 the default.  This abstraction layer can use AT&T's sfio (if you already
6389 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6390 problems with some extension modules.  Using PerlIO with stdio is safe,
6391 but it is slower than plain stdio and therefore is not the default.
6392
6393 If this doesn't make any sense to you, just accept the default 'n'.
6394 EOM
6395 case "$useperlio" in
6396 $define|true|[yY]*)     dflt='y';;
6397 *) dflt='n';;
6398 esac
6399 rp='Use the experimental PerlIO abstraction layer?'
6400 . ./myread
6401 case "$ans" in
6402 y|Y) 
6403         val="$define"
6404         ;;     
6405 *)      
6406         echo "Ok, doing things the stdio way"
6407         val="$undef"
6408         ;;
6409 esac
6410 set useperlio
6411 eval $setvar 
6412
6413 : Check how to convert floats to strings.
6414 if test "X$d_Gconvert" = X; then
6415         echo " "
6416         echo "Checking for an efficient way to convert floats to strings."
6417         $cat >try.c <<'EOP'
6418 #ifdef TRY_gconvert
6419 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6420 char *myname = "gconvert";
6421 #endif
6422 #ifdef TRY_gcvt
6423 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6424 char *myname = "gcvt";
6425 #endif
6426 #ifdef TRY_sprintf
6427 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6428 char *myname = "sprintf";
6429 #endif
6430
6431 #include <stdio.h>
6432
6433 int
6434 checkit(expect, got)
6435 char *expect;
6436 char *got;
6437 {
6438     if (strcmp(expect, got)) {
6439                 printf("%s oddity:  Expected %s, got %s\n",
6440                         myname, expect, got);
6441                 exit(1);
6442         }
6443 }
6444
6445 int main()
6446
6447         char buf[64]; 
6448         buf[63] = '\0';
6449
6450         /* This must be 1st test on (which?) platform */
6451         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6452         Gconvert(0.1, 8, 0, buf);
6453         checkit("0.1", buf);
6454
6455         Gconvert(1.0, 8, 0, buf); 
6456         checkit("1", buf);
6457
6458         Gconvert(0.0, 8, 0, buf); 
6459         checkit("0", buf);
6460
6461         Gconvert(-1.0, 8, 0, buf); 
6462         checkit("-1", buf);
6463
6464         /* Some Linux gcvt's give 1.e+5 here. */
6465         Gconvert(100000.0, 8, 0, buf); 
6466         checkit("100000", buf);
6467         
6468         /* Some Linux gcvt's give -1.e+5 here. */
6469         Gconvert(-100000.0, 8, 0, buf); 
6470         checkit("-100000", buf);
6471
6472         exit(0);
6473 }
6474 EOP
6475         case "$d_Gconvert" in
6476         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6477         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6478         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6479         *) xxx_list='gconvert gcvt sprintf' ;;
6480         esac
6481
6482         for xxx_convert in $xxx_list; do
6483                 echo "Trying $xxx_convert"
6484                 $rm -f try try$_o
6485                 set try -DTRY_$xxx_convert
6486                 if eval $compile; then
6487                         echo "$xxx_convert" found. >&4
6488                         if ./try; then
6489                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6490                                 break;
6491                         else
6492                                 echo "...But $xxx_convert didn't work as I expected."
6493                         fi
6494                 else
6495                         echo "$xxx_convert NOT found." >&4
6496                 fi
6497         done
6498                 
6499         case "$xxx_convert" in
6500         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6501         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6502         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6503         esac
6504 fi
6505
6506 : Initialize h_fcntl
6507 h_fcntl=false
6508
6509 : Initialize h_sysfile
6510 h_sysfile=false
6511
6512 : access call always available on UNIX
6513 set access d_access
6514 eval $inlibc
6515
6516 : locate the flags for 'access()'
6517 case "$d_access" in
6518 "$define")
6519         echo " "
6520         $cat >access.c <<'EOCP'
6521 #include <sys/types.h>
6522 #ifdef I_FCNTL
6523 #include <fcntl.h>
6524 #endif
6525 #ifdef I_SYS_FILE
6526 #include <sys/file.h>
6527 #endif
6528 #ifdef I_UNISTD
6529 #include <unistd.h>
6530 #endif
6531 int main() {
6532         exit(R_OK);
6533 }
6534 EOCP
6535         : check sys/file.h first, no particular reason here
6536         if $test `./findhdr sys/file.h` && \
6537                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6538                 h_sysfile=true;
6539                 echo "<sys/file.h> defines the *_OK access constants." >&4
6540         elif $test `./findhdr fcntl.h` && \
6541                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6542                 h_fcntl=true;
6543                 echo "<fcntl.h> defines the *_OK access constants." >&4
6544         elif $test `./findhdr unistd.h` && \
6545                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6546                 echo "<unistd.h> defines the *_OK access constants." >&4
6547         else
6548                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6549         fi
6550         ;;
6551 esac
6552 $rm -f access*
6553
6554 : see if accessx exists
6555 set accessx d_accessx
6556 eval $inlibc
6557
6558 : see if alarm exists
6559 set alarm d_alarm
6560 eval $inlibc
6561
6562 : Look for GNU-cc style attribute checking
6563 echo " "
6564 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6565 $cat >attrib.c <<'EOCP'
6566 #include <stdio.h>
6567 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6568 EOCP
6569 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6570         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6571                 echo "Your C compiler doesn't fully support __attribute__."
6572                 val="$undef"
6573         else
6574                 echo "Your C compiler supports __attribute__."
6575                 val="$define"
6576         fi
6577 else
6578         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6579         val="$undef"
6580 fi
6581 set d_attribut
6582 eval $setvar
6583 $rm -f attrib*
6584
6585 : see if bcmp exists
6586 set bcmp d_bcmp
6587 eval $inlibc
6588
6589 : see if bcopy exists
6590 set bcopy d_bcopy
6591 eval $inlibc
6592
6593 : see if this is a unistd.h system
6594 set unistd.h i_unistd
6595 eval $inhdr
6596
6597 : see if getpgrp exists
6598 set getpgrp d_getpgrp
6599 eval $inlibc
6600
6601 case "$d_getpgrp" in
6602 "$define")
6603         echo " "
6604         echo "Checking to see which flavor of getpgrp is in use..."
6605         $cat >set.c <<EOP
6606 #$i_unistd I_UNISTD
6607 #include <sys/types.h>
6608 #ifdef I_UNISTD
6609 #  include <unistd.h>
6610 #endif
6611 int main()
6612 {
6613         if (getuid() == 0) {
6614                 printf("(I see you are running Configure as super-user...)\n");
6615                 setuid(1);
6616         }
6617 #ifdef TRY_BSD_PGRP
6618         if (getpgrp(1) == 0)
6619                 exit(0);
6620 #else
6621         if (getpgrp() > 0)
6622                 exit(0);
6623 #endif
6624         exit(1);
6625 }
6626 EOP
6627         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6628                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6629                 val="$define"
6630         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6631                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6632                 val="$undef"
6633         else
6634                 echo "I can't seem to compile and run the test program."
6635                 if ./usg; then
6636                         xxx="a USG one, i.e. you use getpgrp()."
6637                 else
6638                         # SVR4 systems can appear rather BSD-ish.
6639                         case "$i_unistd" in
6640                         $undef)
6641                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6642                                 val="$define"
6643                                 ;;
6644                         $define)
6645                                 xxx="probably a USG one, i.e. you use getpgrp()."
6646                                 val="$undef"
6647                                 ;;
6648                         esac
6649                 fi
6650                 echo "Assuming your getpgrp is $xxx" >&4
6651         fi
6652         ;;
6653 *) val="$undef";;
6654 esac
6655 set d_bsdgetpgrp
6656 eval $setvar
6657 $rm -f set set.c
6658
6659 : see if setpgrp exists
6660 set setpgrp d_setpgrp
6661 eval $inlibc
6662
6663 case "$d_setpgrp" in
6664 "$define")
6665         echo " "
6666         echo "Checking to see which flavor of setpgrp is in use..."
6667         $cat >set.c <<EOP
6668 #$i_unistd I_UNISTD
6669 #include <sys/types.h>
6670 #ifdef I_UNISTD
6671 #  include <unistd.h>
6672 #endif
6673 int main()
6674 {
6675         if (getuid() == 0) {
6676                 printf("(I see you are running Configure as super-user...)\n");
6677                 setuid(1);
6678         }
6679 #ifdef TRY_BSD_PGRP
6680         if (-1 == setpgrp(1, 1))
6681                 exit(0);
6682 #else
6683         if (setpgrp() != -1)
6684                 exit(0);
6685 #endif
6686         exit(1);
6687 }
6688 EOP
6689         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6690                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6691                 val="$define"
6692         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6693                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6694                 val="$undef"
6695         else
6696                 echo "(I can't seem to compile and run the test program.)"
6697                 if ./usg; then
6698                         xxx="a USG one, i.e. you use setpgrp()."
6699                 else
6700                         # SVR4 systems can appear rather BSD-ish.
6701                         case "$i_unistd" in
6702                         $undef)
6703                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6704                                 val="$define"
6705                                 ;;
6706                         $define)
6707                                 xxx="probably a USG one, i.e. you use setpgrp()."
6708                                 val="$undef"
6709                                 ;;
6710                         esac
6711                 fi
6712                 echo "Assuming your setpgrp is $xxx" >&4
6713         fi
6714         ;;
6715 *) val="$undef";;
6716 esac
6717 set d_bsdsetpgrp
6718 eval $setvar
6719 $rm -f set set.c
6720 : see if bzero exists
6721 set bzero d_bzero
6722 eval $inlibc
6723
6724 : check for lengths of integral types
6725 echo " "
6726 case "$intsize" in
6727 '')
6728         echo "Checking to see how big your integers are..." >&4
6729         $cat >intsize.c <<'EOCP'
6730 #include <stdio.h>
6731 int main()
6732 {
6733         printf("intsize=%d;\n", sizeof(int));
6734         printf("longsize=%d;\n", sizeof(long));
6735         printf("shortsize=%d;\n", sizeof(short));
6736         exit(0);
6737 }
6738 EOCP
6739         set intsize
6740         if eval $compile_ok && ./intsize > /dev/null; then
6741                 eval `./intsize`
6742                 echo "Your integers are $intsize bytes long."
6743                 echo "Your long integers are $longsize bytes long."
6744                 echo "Your short integers are $shortsize bytes long."
6745         else
6746                 $cat >&4 <<EOM
6747 !
6748 Help! I can't compile and run the intsize test program: please enlighten me!
6749 (This is probably a misconfiguration in your system or libraries, and
6750 you really ought to fix it.  Still, I'll try anyway.)
6751 !
6752 EOM
6753                 dflt=4
6754                 rp="What is the size of an integer (in bytes)?"
6755                 . ./myread
6756                 intsize="$ans"
6757                 dflt=$intsize
6758                 rp="What is the size of a long integer (in bytes)?"
6759                 . ./myread
6760                 longsize="$ans"
6761                 dflt=2
6762                 rp="What is the size of a short integer (in bytes)?"
6763                 . ./myread
6764                 shortsize="$ans"
6765         fi
6766         ;;
6767 esac
6768 $rm -f intsize intsize.*
6769
6770 : see if signal is declared as pointer to function returning int or void
6771 echo " "
6772 xxx=`./findhdr signal.h`
6773 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6774 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6775         echo "You have int (*signal())() instead of void." >&4
6776         val="$undef"
6777 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6778         echo "You have void (*signal())()." >&4
6779         val="$define"
6780 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6781         echo "You have int (*signal())() instead of void." >&4
6782         val="$undef"
6783 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6784         echo "You have void (*signal())()." >&4
6785         val="$define"
6786 else
6787         case "$d_voidsig" in
6788         '')
6789         echo "I can't determine whether signal handler returns void or int..." >&4
6790                 dflt=void
6791                 rp="What type does your signal handler return?"
6792                 . ./myread
6793                 case "$ans" in
6794                 v*) val="$define";;
6795                 *) val="$undef";;
6796                 esac;;
6797         "$define")
6798                 echo "As you already told me, signal handler returns void." >&4
6799                 val="$define"
6800                 ;;
6801         *)      echo "As you already told me, signal handler returns int." >&4
6802                 val="$undef"
6803                 ;;
6804         esac
6805 fi
6806 set d_voidsig
6807 eval $setvar
6808 case "$d_voidsig" in
6809 "$define") signal_t="void";;
6810 *) signal_t="int";;
6811 esac
6812 $rm -f $$.tmp
6813
6814 : check for ability to cast large floats to 32-bit ints.
6815 echo " "
6816 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6817 if $test "$intsize" -ge 4; then
6818         xxx=int
6819 else
6820         xxx=long
6821 fi
6822 $cat >try.c <<EOCP
6823 #include <stdio.h>
6824 #include <sys/types.h>
6825 #include <signal.h>
6826 $signal_t blech(s) int s; { exit(3); }
6827 int main()
6828 {
6829         $xxx i32;
6830         double f, g;
6831         int result = 0;
6832         char str[16];
6833         signal(SIGFPE, blech);
6834
6835         /* Don't let compiler optimize the test away.  Store the number 
6836            in a writable string for gcc to pass to sscanf under HP/UX.
6837         */
6838         sprintf(str, "2147483647");
6839         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6840         g = 10 * f;
6841         i32  = ($xxx) g;
6842
6843         /* x86 processors will probably give 0x8000 0000, which is a
6844        sign change.  We don't want that.  We want to mimic SPARC
6845            behavior here, which is to preserve the sign and give
6846            back 0x7fff ffff.
6847         */
6848         if (i32 != ($xxx) f)
6849                 result |= 1;
6850         exit(result);
6851 }
6852 EOCP
6853 set try
6854 if eval $compile_ok; then
6855         ./try
6856         yyy=$?
6857 else
6858         echo "(I can't seem to compile the test program--assuming it can't)"
6859         yyy=1
6860 fi
6861 case "$yyy" in
6862 0)      val="$define"
6863         echo "Yup, it can."
6864         ;;
6865 *)      val="$undef"
6866         echo "Nope, it can't."
6867         ;;
6868 esac
6869 set d_casti32
6870 eval $setvar
6871 $rm -f try try.*
6872
6873 : check for ability to cast negative floats to unsigned
6874 echo " "
6875 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6876 $cat >try.c <<EOCP
6877 #include <stdio.h>
6878 #include <sys/types.h>
6879 #include <signal.h>
6880 $signal_t blech(s) int s; { exit(7); }
6881 $signal_t blech_in_list(s) int s; { exit(4); }
6882 unsigned long dummy_long(p) unsigned long p; { return p; }
6883 unsigned int dummy_int(p) unsigned int p; { return p; }
6884 unsigned short dummy_short(p) unsigned short p; { return p; }
6885 int main()
6886 {
6887         double f;
6888         unsigned long along;
6889         unsigned int aint;
6890         unsigned short ashort;
6891         int result = 0;
6892         char str[16];
6893         
6894         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6895            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6896            optimized the whole file away
6897         */
6898         /* Store the number in a writable string for gcc to pass to 
6899            sscanf under HP/UX.
6900         */
6901         sprintf(str, "-123");
6902         sscanf(str, "%lf", &f);  /* f = -123.; */
6903
6904         signal(SIGFPE, blech);
6905         along = (unsigned long)f;
6906         aint = (unsigned int)f;
6907         ashort = (unsigned short)f;
6908         if (along != (unsigned long)-123)
6909                 result |= 1;
6910         if (aint != (unsigned int)-123)
6911                 result |= 1;
6912         if (ashort != (unsigned short)-123)
6913                 result |= 1;
6914         sprintf(str, "1073741824.");
6915         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6916         f = f + f;
6917         along = 0;
6918         along = (unsigned long)f;
6919         if (along != 0x80000000)
6920                 result |= 2;
6921         f -= 1.;
6922         along = 0;
6923         along = (unsigned long)f;
6924         if (along != 0x7fffffff)
6925                 result |= 1;
6926         f += 2.;
6927         along = 0;
6928         along = (unsigned long)f;
6929         if (along != 0x80000001)
6930                 result |= 2;
6931         if (result)
6932                 exit(result);
6933         signal(SIGFPE, blech_in_list);
6934         sprintf(str, "123.");
6935         sscanf(str, "%lf", &f);  /* f = 123.; */
6936         along = dummy_long((unsigned long)f);
6937         aint = dummy_int((unsigned int)f);
6938         ashort = dummy_short((unsigned short)f);
6939         if (along != (unsigned long)123)
6940                 result |= 4;
6941         if (aint != (unsigned int)123)
6942                 result |= 4;
6943         if (ashort != (unsigned short)123)
6944                 result |= 4;
6945         exit(result);
6946
6947 }
6948 EOCP
6949 set try
6950 if eval $compile_ok; then
6951         ./try
6952         castflags=$?
6953 else
6954         echo "(I can't seem to compile the test program--assuming it can't)"
6955         castflags=7
6956 fi
6957 case "$castflags" in
6958 0)      val="$define"
6959         echo "Yup, it can."
6960         ;;
6961 *)      val="$undef"
6962         echo "Nope, it can't."
6963         ;;
6964 esac
6965 set d_castneg
6966 eval $setvar
6967 $rm -f try.*
6968
6969 : see if vprintf exists
6970 echo " "
6971 if set vprintf val -f d_vprintf; eval $csym; $val; then
6972         echo 'vprintf() found.' >&4
6973         val="$define"
6974         $cat >vprintf.c <<'EOF'
6975 #include <varargs.h>
6976
6977 int main() { xxx("foo"); }
6978
6979 xxx(va_alist)
6980 va_dcl
6981 {
6982         va_list args;
6983         char buf[10];
6984
6985         va_start(args);
6986         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6987 }
6988 EOF
6989         set vprintf
6990         if eval $compile && ./vprintf; then
6991                 echo "Your vsprintf() returns (int)." >&4
6992                 val2="$undef"
6993         else
6994                 echo "Your vsprintf() returns (char*)." >&4
6995                 val2="$define"
6996         fi
6997 else
6998         echo 'vprintf() NOT found.' >&4
6999                 val="$undef"
7000                 val2="$undef"
7001 fi
7002 set d_vprintf
7003 eval $setvar
7004 val=$val2
7005 set d_charvspr
7006 eval $setvar
7007
7008 : see if chown exists
7009 set chown d_chown
7010 eval $inlibc
7011
7012 : see if chroot exists
7013 set chroot d_chroot
7014 eval $inlibc
7015
7016 : see if chsize exists
7017 set chsize d_chsize
7018 eval $inlibc
7019
7020 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7021 while $test $# -ge 2; do
7022         case "$1" in
7023         $define) echo "#include <$2>";;
7024         esac ;
7025     shift 2;
7026 done > try.c;
7027 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7028 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7029         val="$define";
7030 else
7031         val="$undef";
7032 fi;
7033 set $varname;
7034 eval $setvar;
7035 $rm -f try.c try.o'
7036
7037 : see if this is a sys/uio.h system
7038 set sys/uio.h i_sysuio
7039 eval $inhdr
7040
7041 echo "Checking to see if your system supports struct iovec..." >&4
7042 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7043 eval $hasfield
7044 case "$d_iovec_s" in
7045 "$define")      echo "Yup, it does." >&4
7046                 ;;
7047 *)              echo "Nope, it doesn't." >&4
7048                 ;;
7049 esac
7050
7051 socketlib=''
7052 sockethdr=''
7053 : see whether socket exists
7054 echo " "
7055 $echo $n "Hmm... $c" >&4
7056 if set socket val -f d_socket; eval $csym; $val; then
7057         echo "Looks like you have Berkeley networking support." >&4
7058         d_socket="$define"
7059         if set setsockopt val -f; eval $csym; $val; then
7060                 d_oldsock="$undef"
7061         else
7062                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7063                 d_oldsock="$define"
7064         fi
7065 else
7066         if $contains socklib libc.list >/dev/null 2>&1; then
7067                 echo "Looks like you have Berkeley networking support." >&4
7068                 d_socket="$define"
7069                 : we will have to assume that it supports the 4.2 BSD interface
7070                 d_oldsock="$undef"
7071         else
7072                 echo "You don't have Berkeley networking in libc$_a..." >&4
7073                 if test "X$d_socket" = "X$define"; then
7074                    echo "...but you seem to believe that you have sockets." >&4
7075                 else
7076                         for net in net socket
7077                         do
7078                                 if test -f /usr/lib/lib$net$_a; then
7079                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7080                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7081                                         if $contains socket libc.list >/dev/null 2>&1; then
7082                                                 d_socket="$define"
7083                                                 socketlib="-l$net"
7084                                                 case "$net" in
7085                                                 net)
7086                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7087                                                         sockethdr="-I/usr/netinclude"
7088                                                         ;;
7089                                                 esac
7090                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7091                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7092                                                         d_oldsock="$undef"
7093                                                 else
7094                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7095                                                         d_oldsock="$define"
7096                                                 fi
7097                                                 break
7098                                         fi
7099                                 fi
7100                         done
7101                         if test "X$d_socket" != "X$define"; then
7102                            echo "or anywhere else I see." >&4
7103                            d_socket="$undef"
7104                            d_oldsock="$undef"
7105                         fi
7106                 fi
7107         fi
7108 fi
7109
7110 : see if socketpair exists
7111 set socketpair d_sockpair
7112 eval $inlibc
7113
7114
7115 echo " "
7116 echo "Checking the availability of certain socket constants..." >& 4
7117 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7118         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7119         $cat >try.c <<EOF
7120 #include <sys/types.h>
7121 #include <sys/socket.h>
7122 int main() {
7123     int i = $ENUM;
7124 }
7125 EOF
7126         val="$undef"
7127         set try; if eval $compile; then
7128                 val="$define"
7129         fi
7130         set d_${enum}; eval $setvar
7131         $rm -f try.c try
7132 done
7133
7134 set sendmsg d_sendmsg
7135 eval $inlibc
7136
7137 set recvmsg d_recvmsg
7138 eval $inlibc
7139
7140 echo " "
7141 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7142 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7143 eval $hasfield
7144 case "$d_msghdr_s" in
7145 "$define")      echo "Yup, it does." >&4
7146                 ;;
7147 *)              echo "Nope, it doesn't." >&4
7148                 ;;
7149 esac
7150
7151 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7152 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7153 eval $hasfield
7154 case "$d_cmsghdr_s" in
7155 "$define")      echo "Yup, it does." >&4
7156                 ;;
7157 *)              echo "Nope, it doesn't." >&4
7158                 ;;
7159 esac
7160
7161 : check for const keyword
7162 echo " "
7163 echo 'Checking to see if your C compiler knows about "const"...' >&4
7164 $cat >const.c <<'EOCP'
7165 typedef struct spug { int drokk; } spug;
7166 int main()
7167 {
7168         const char *foo;
7169         const spug y;
7170 }
7171 EOCP
7172 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7173         val="$define"
7174         echo "Yup, it does."
7175 else
7176         val="$undef"
7177         echo "Nope, it doesn't."
7178 fi
7179 set d_const
7180 eval $setvar
7181
7182 : see if crypt exists
7183 echo " "
7184 if set crypt val -f d_crypt; eval $csym; $val; then
7185         echo 'crypt() found.' >&4
7186         val="$define"
7187         cryptlib=''
7188 else
7189         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7190         if $test -z "$cryptlib"; then
7191                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7192         else
7193                 cryptlib=-lcrypt
7194         fi
7195         if $test -z "$cryptlib"; then
7196                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7197         else
7198                 cryptlib=-lcrypt
7199         fi
7200         if $test -z "$cryptlib"; then
7201                 cryptlib=`./loc libcrypt$_a "" $libpth`
7202         else
7203                 cryptlib=-lcrypt
7204         fi
7205         if $test -z "$cryptlib"; then
7206                 echo 'crypt() NOT found.' >&4
7207                 val="$undef"
7208         else
7209                 val="$define"
7210         fi
7211 fi
7212 set d_crypt
7213 eval $setvar
7214
7215 : get csh whereabouts
7216 case "$csh" in
7217 'csh') val="$undef" ;;
7218 *) val="$define" ;;
7219 esac
7220 set d_csh
7221 eval $setvar
7222 : Respect a hint or command line value for full_csh.
7223 case "$full_csh" in
7224 '') full_csh=$csh ;;
7225 esac
7226
7227 : see if cuserid exists
7228 set cuserid d_cuserid
7229 eval $inlibc
7230
7231 : see if this is a limits.h system
7232 set limits.h i_limits
7233 eval $inhdr
7234
7235 : see if this is a float.h system
7236 set float.h i_float
7237 eval $inhdr
7238
7239 : See if number of significant digits in a double precision number is known
7240 echo " "
7241 $cat >dbl_dig.c <<EOM
7242 #$i_limits I_LIMITS
7243 #$i_float I_FLOAT
7244 #ifdef I_LIMITS
7245 #include <limits.h>
7246 #endif
7247 #ifdef I_FLOAT
7248 #include <float.h>
7249 #endif
7250 #ifdef DBL_DIG
7251 printf("Contains DBL_DIG");
7252 #endif
7253 EOM
7254 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7255 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7256         echo "DBL_DIG found." >&4
7257         val="$define"
7258 else
7259         echo "DBL_DIG NOT found." >&4
7260         val="$undef"
7261 fi
7262 $rm -f dbl_dig.?
7263 set d_dbl_dig
7264 eval $setvar
7265
7266
7267 if $test X"$use64bits" = X"$define"; then
7268         : see if dbminit64 exists
7269         set dbminit64 d_dbminit64
7270         eval $inlibc
7271
7272         : see if dbmclose64 exists
7273         set dbmclose64 d_dbmclose64
7274         eval $inlibc
7275
7276         : see if fetch64 exists
7277         set fetch64 d_fetch64
7278         eval $inlibc
7279
7280         : see if store64 exists
7281         set store64 d_store64
7282         eval $inlibc
7283
7284         : see if delete64 exists
7285         set delete64 d_delete64
7286         eval $inlibc
7287
7288         : see if firstkey64 exists
7289         set firstkey64 d_firstkey64
7290         eval $inlibc
7291
7292         : see if nextkey64 exists
7293         set nextkey64 d_nextkey64
7294         eval $inlibc
7295 else
7296         val="$undef"
7297         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7298         do
7299                 set $xxx
7300                 eval $setvar
7301         done
7302 fi
7303
7304 : see if difftime exists
7305 set difftime d_difftime
7306 eval $inlibc
7307
7308 : see if sys/stat.h is available
7309 set sys/stat.h i_sysstat
7310 eval $inhdr
7311
7312 : see if this is a dirent system
7313 echo " "
7314 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7315         val="$define"
7316         echo "<dirent.h> found." >&4
7317 else
7318         val="$undef"
7319         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7320                 echo "<sys/dir.h> found." >&4
7321                 echo " "
7322         else
7323                 xinc=`./findhdr sys/ndir.h`
7324         fi
7325         echo "<dirent.h> NOT found." >&4
7326 fi
7327 set i_dirent
7328 eval $setvar
7329
7330 : Look for type of directory structure.
7331 echo " "
7332 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7333
7334 case "$direntrytype" in
7335 ''|' ')
7336         case "$i_dirent" in
7337         $define) guess1='struct dirent' ;;
7338         *) guess1='struct direct'  ;;
7339         esac
7340         ;;
7341 *)      guess1="$direntrytype"
7342         ;;
7343 esac
7344
7345 case "$guess1" in
7346 'struct dirent') guess2='struct direct' ;;
7347 *) guess2='struct dirent' ;;
7348 esac
7349                 
7350 if $contains "$guess1" try.c >/dev/null 2>&1; then
7351         direntrytype="$guess1"
7352         echo "Your directory entries are $direntrytype." >&4
7353 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7354         direntrytype="$guess2"
7355         echo "Your directory entries seem to be $direntrytype." >&4
7356 else
7357         echo "I don't recognize your system's directory entries." >&4
7358         rp="What type is used for directory entries on this system?"
7359         dflt="$guess1"
7360         . ./myread
7361         direntrytype="$ans"
7362 fi
7363 $rm -f try.c
7364
7365
7366 : see if the directory entry stores field length
7367 echo " "
7368 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7369 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7370         echo "Good, your directory entry keeps length information in d_namlen." >&4
7371         val="$define"
7372 else
7373         echo "Your directory entry does not know about the d_namlen field." >&4
7374         val="$undef"
7375 fi
7376 set d_dirnamlen
7377 eval $setvar
7378 $rm -f try.c
7379
7380
7381 if $test X"$use64bits" = X"$define"; then
7382         : see if fstat64 exists
7383         set fstat64 d_fstat64
7384         eval $inlibc
7385
7386         : see if ftruncate64 exists
7387         set ftruncate64 d_ftruncate64
7388         eval $inlibc
7389
7390         : see if lockf64 exists
7391         set lockf64 d_lockf64
7392         eval $inlibc
7393
7394         : see if llseek exists
7395         set llseek d_llseek
7396         eval $inlibc
7397
7398         : see if lseek64 exists
7399         set lseek64 d_lseek64
7400         eval $inlibc
7401
7402         : see if lstat64 exists
7403         set lstat64 d_lstat64
7404         eval $inlibc
7405
7406         : see if open64 exists
7407         set open64 d_open64
7408         eval $inlibc
7409
7410         : see if opendir64 exists
7411         set opendir64 d_opendir64
7412         eval $inlibc
7413
7414         : see if readdir64 exists
7415         set readdir64 d_readdir64
7416         eval $inlibc
7417
7418         : see if seekdir64 exists
7419         set seekdir64 d_seekdir64
7420         eval $inlibc
7421
7422         : see if stat64 exists
7423         set stat64 d_stat64
7424         eval $inlibc
7425
7426         : see if telldir64 exists
7427         set telldir64 d_telldir64
7428         eval $inlibc
7429
7430         : see if truncate64 exists
7431         set truncate64 d_truncate64
7432         eval $inlibc
7433
7434         : check for off64_t
7435         echo " "
7436         echo $n "Checking to see if your system supports off64_t...$c" >&4
7437         $cat >try.c <<EOCP
7438 #include <sys/types.h>
7439 #include <unistd.h>
7440 off64_t foo() { off64_t x; x = 7; return x; }'
7441 EOCP
7442         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7443                 val="$define"
7444                 echo " Yup, it does." >&4
7445         else
7446                 val="$undef"
7447                 echo " Nope, it doesn't." >&4
7448         fi
7449         $rm -f try.*
7450         set d_off64_t
7451         eval $setvar
7452
7453         : check for offset_t
7454         echo " "
7455         echo $n "Checking to see if your system supports offset_t...$c" >&4
7456         $cat >try.c <<EOCP
7457 #include <sys/types.h>
7458 #include <unistd.h>
7459 offset_t foo() { offset_t x; x = 7; return x; }'
7460 EOCP
7461         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7462                 val="$define"
7463                 echo " Yup, it does." >&4
7464         else
7465                 val="$undef"
7466                 echo " Nope, it doesn't." >&4
7467         fi
7468         $rm -f try.*
7469         set d_offset_t
7470         eval $setvar
7471
7472         : check for ino64_t
7473         echo " "
7474         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7475         val="$undef"
7476         case "$i_sysstat" in
7477         "$define" )
7478                 $cat >try.c <<EOCP
7479 #include <sys/types.h>
7480 #include <sys/stat.h>
7481 ino64_t foo() { ino64_t x; x = 7; return x; }'
7482 EOCP
7483                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7484                         val="$define"
7485                 fi
7486                 $rm -f try.*
7487                 ;;
7488         esac
7489         if $test "X$val" = X"$define"; then
7490                 echo " Yup, it does." >&4
7491         else
7492                 echo " Nope, it doesn't." >&4
7493         fi
7494         set d_ino64_t
7495         eval $setvar
7496
7497         : check for struct flock64
7498         echo " "
7499         echo "Checking to see if your system supports struct flock64..." >&4
7500         if $h_fcntl; then
7501                 set d_flock64_s flock64 l_len define fcntl.h
7502                 eval $hasfield
7503         else
7504                 val="$undef"
7505                 set d_flock64_s
7506                 eval $setvar
7507         fi
7508         case "$d_flock64_s" in
7509         "$define")      echo "Yup, it does." >&4
7510                         ;;
7511         *)              echo "Nope, it doesn't." >&4
7512                         ;;
7513         esac
7514
7515         : check for struct dirent64
7516         echo " "
7517         echo "Checking to see if your system supports struct dirent64..." >&4
7518         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7519         eval $hasfield
7520         case "$d_dirent64_s" in
7521         "$define")      echo "Yup, it does." >&4
7522                         ;;
7523         *)              echo "Nope, it doesn't." >&4
7524                         ;;
7525         esac
7526
7527 else
7528         val="$undef"
7529         for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64_t d_offset_t d_ino64_t d_flock64_s d_dirent64_s
7530         do
7531                 set $xxx
7532                 eval $setvar
7533         done
7534 fi
7535
7536 : see if dlerror exists
7537 xxx_runnm="$runnm"
7538 runnm=false
7539 set dlerror d_dlerror
7540 eval $inlibc
7541 runnm="$xxx_runnm"
7542
7543 : see if dlfcn is available
7544 set dlfcn.h i_dlfcn
7545 eval $inhdr
7546
7547 case "$usedl" in
7548 $define|y|true)
7549         $cat << EOM
7550
7551 On a few systems, the dynamically loaded modules that perl generates and uses
7552 will need a different extension than shared libs. The default will probably
7553 be appropriate.
7554
7555 EOM
7556         case "$dlext" in
7557         '')     dflt="$so" ;;
7558         *)      dflt="$dlext" ;;
7559         esac
7560         rp='What is the extension of dynamically loaded modules'
7561         . ./myread
7562         dlext="$ans"
7563         ;;
7564 *)
7565         dlext="none"
7566         ;;
7567 esac
7568
7569 : Check if dlsym need a leading underscore
7570 echo " "
7571 val="$undef"
7572
7573 case "$dlsrc" in
7574 dl_dlopen.xs)
7575         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7576         $cat >dyna.c <<'EOM'
7577 fred () { }
7578 EOM
7579
7580 $cat >fred.c<<EOM
7581
7582 #include <stdio.h>
7583 #$i_dlfcn I_DLFCN
7584 #ifdef I_DLFCN
7585 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7586 #else
7587 #include <sys/types.h>
7588 #include <nlist.h>
7589 #include <link.h>
7590 #endif
7591
7592 extern int fred() ;
7593
7594 int main()
7595 {
7596     void * handle ;
7597     void * symbol ;
7598 #ifndef RTLD_LAZY
7599     int mode = 1 ;
7600 #else
7601     int mode = RTLD_LAZY ;
7602 #endif
7603     handle = dlopen("./dyna.$dlext", mode) ;
7604     if (handle == NULL) {
7605         printf ("1\n") ;
7606         fflush (stdout) ;
7607         exit(0);
7608     }
7609     symbol = dlsym(handle, "fred") ;
7610     if (symbol == NULL) {
7611         /* try putting a leading underscore */
7612         symbol = dlsym(handle, "_fred") ;
7613         if (symbol == NULL) {
7614             printf ("2\n") ;
7615             fflush (stdout) ;
7616             exit(0);
7617         }
7618         printf ("3\n") ;
7619     }
7620     else
7621         printf ("4\n") ;
7622     fflush (stdout) ;
7623     exit(0);
7624 }
7625 EOM
7626         : Call the object file tmp-dyna.o in case dlext=o.
7627         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7628                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7629                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7630                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7631                 xxx=`./fred`
7632                 case $xxx in
7633                 1)      echo "Test program failed using dlopen." >&4
7634                         echo "Perhaps you should not use dynamic loading." >&4;;
7635                 2)      echo "Test program failed using dlsym." >&4
7636                         echo "Perhaps you should not use dynamic loading." >&4;;
7637                 3)      echo "dlsym needs a leading underscore" >&4
7638                         val="$define" ;;
7639                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7640                 esac
7641         else
7642                 echo "I can't compile and run the test program." >&4
7643         fi
7644         ;;
7645 esac
7646                 
7647 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7648
7649 set d_dlsymun
7650 eval $setvar
7651
7652 hasproto='varname=$1; func=$2; shift; shift;
7653 while $test $# -ge 2; do
7654         case "$1" in
7655         $define) echo "#include <$2>";;
7656         esac ;
7657     shift 2;
7658 done > try.c;
7659 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7660 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7661         echo "$func() prototype found.";
7662         val="$define";
7663 else
7664         echo "$func() prototype NOT found.";
7665         val="$undef";
7666 fi;
7667 set $varname;
7668 eval $setvar;
7669 $rm -f try.c tryout.c'
7670
7671 : see if prototype for drand48 is available
7672 echo " "
7673 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7674 eval $hasproto
7675
7676 : see if dup2 exists
7677 set dup2 d_dup2
7678 eval $inlibc
7679
7680 : see if eaccess exists
7681 set eaccess d_eaccess
7682 eval $inlibc
7683
7684 : see if endgrent exists
7685 set endgrent d_endgrent
7686 eval $inlibc
7687
7688 : see if endhostent exists
7689 set endhostent d_endhent
7690 eval $inlibc
7691
7692 : see if endnetent exists
7693 set endnetent d_endnent
7694 eval $inlibc
7695
7696 : see if endprotoent exists
7697 set endprotoent d_endpent
7698 eval $inlibc
7699
7700 : see if endpwent exists
7701 set endpwent d_endpwent
7702 eval $inlibc
7703
7704 : see if endservent exists
7705 set endservent d_endsent
7706 eval $inlibc
7707
7708 : see if endspent exists
7709 set endspent d_endspent
7710 eval $inlibc
7711
7712 : Locate the flags for 'open()'
7713 echo " "
7714 $cat >open3.c <<'EOCP'
7715 #include <sys/types.h>
7716 #ifdef I_FCNTL
7717 #include <fcntl.h>
7718 #endif
7719 #ifdef I_SYS_FILE
7720 #include <sys/file.h>
7721 #endif
7722 int main() {
7723         if(O_RDONLY);
7724 #ifdef O_TRUNC
7725         exit(0);
7726 #else
7727         exit(1);
7728 #endif
7729 }
7730 EOCP
7731 : check sys/file.h first to get FREAD on Sun
7732 if $test `./findhdr sys/file.h` && \
7733                 set open3 -DI_SYS_FILE && eval $compile; then
7734         h_sysfile=true;
7735         echo "<sys/file.h> defines the O_* constants..." >&4
7736         if ./open3; then
7737                 echo "and you have the 3 argument form of open()." >&4
7738                 val="$define"
7739         else
7740                 echo "but not the 3 argument form of open().  Oh, well." >&4
7741                 val="$undef"
7742         fi
7743 elif $test `./findhdr fcntl.h` && \
7744                 set open3 -DI_FCNTL && eval $compile; then
7745         h_fcntl=true;
7746         echo "<fcntl.h> defines the O_* constants..." >&4
7747         if ./open3; then
7748                 echo "and you have the 3 argument form of open()." >&4
7749                 val="$define"
7750         else
7751                 echo "but not the 3 argument form of open().  Oh, well." >&4
7752                 val="$undef"
7753         fi
7754 else
7755         val="$undef"
7756         echo "I can't find the O_* constant definitions!  You got problems." >&4
7757 fi
7758 set d_open3
7759 eval $setvar
7760 $rm -f open3*
7761
7762 : check for non-blocking I/O stuff
7763 case "$h_sysfile" in
7764 true) echo "#include <sys/file.h>" > head.c;;
7765 *)
7766         case "$h_fcntl" in
7767         true) echo "#include <fcntl.h>" > head.c;;
7768         *) echo "#include <sys/fcntl.h>" > head.c;;
7769         esac
7770         ;;
7771 esac
7772 echo " "
7773 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7774 case "$o_nonblock" in
7775 '')
7776         $cat head.c > try.c
7777         $cat >>try.c <<'EOCP'
7778 int main() {
7779 #ifdef O_NONBLOCK
7780         printf("O_NONBLOCK\n");
7781         exit(0);
7782 #endif
7783 #ifdef O_NDELAY
7784         printf("O_NDELAY\n");
7785         exit(0);
7786 #endif
7787 #ifdef FNDELAY
7788         printf("FNDELAY\n");
7789         exit(0);
7790 #endif
7791         exit(0);
7792 }
7793 EOCP
7794         set try
7795         if eval $compile_ok; then
7796                 o_nonblock=`./try`
7797                 case "$o_nonblock" in
7798                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7799                 *) echo "Seems like we can use $o_nonblock.";;
7800                 esac
7801         else
7802                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7803         fi
7804         ;;
7805 *) echo "Using $hint value $o_nonblock.";;
7806 esac
7807 $rm -f try try.* .out core
7808
7809 echo " "
7810 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7811 case "$eagain" in
7812 '')
7813         $cat head.c > try.c
7814         $cat >>try.c <<EOCP
7815 #include <errno.h>
7816 #include <sys/types.h>
7817 #include <signal.h>
7818 #define MY_O_NONBLOCK $o_nonblock
7819 #ifndef errno  /* XXX need better Configure test */
7820 extern int errno;
7821 #endif
7822 $signal_t blech(x) int x; { exit(3); }
7823 EOCP
7824         $cat >> try.c <<'EOCP'
7825 int main()
7826 {
7827         int pd[2];
7828         int pu[2];
7829         char buf[1];
7830         char string[100];
7831
7832         pipe(pd);       /* Down: child -> parent */
7833         pipe(pu);       /* Up: parent -> child */
7834         if (0 != fork()) {
7835                 int ret;
7836                 close(pd[1]);   /* Parent reads from pd[0] */
7837                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7838                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7839                         exit(1);
7840                 signal(SIGALRM, blech);
7841                 alarm(5);
7842                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7843                         exit(2);
7844                 sprintf(string, "%d\n", ret);
7845                 write(2, string, strlen(string));
7846                 alarm(0);
7847 #ifdef EAGAIN
7848                 if (errno == EAGAIN) {
7849                         printf("EAGAIN\n");
7850                         goto ok;
7851                 }
7852 #endif
7853 #ifdef EWOULDBLOCK
7854                 if (errno == EWOULDBLOCK)
7855                         printf("EWOULDBLOCK\n");
7856 #endif
7857         ok:
7858                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7859                 sleep(2);                               /* Give it time to close our pipe */
7860                 alarm(5);
7861                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7862                 alarm(0);
7863                 sprintf(string, "%d\n", ret);
7864                 write(3, string, strlen(string));
7865                 exit(0);
7866         }
7867
7868         close(pd[0]);                   /* We write to pd[1] */
7869         close(pu[1]);                   /* We read from pu[0] */
7870         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7871         close(pd[1]);                   /* Pipe pd is now fully closed! */
7872         exit(0);                                /* Bye bye, thank you for playing! */
7873 }
7874 EOCP
7875         set try
7876         if eval $compile_ok; then
7877                 echo "$startsh" >mtry
7878                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7879                 chmod +x mtry
7880                 ./mtry >/dev/null 2>&1
7881                 case $? in
7882                 0) eagain=`$cat try.out`;;
7883                 1) echo "Could not perform non-blocking setting!";;
7884                 2) echo "I did a successful read() for something that was not there!";;
7885                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7886                 *) echo "Something terribly wrong happened during testing.";;
7887                 esac
7888                 rd_nodata=`$cat try.ret`
7889                 echo "A read() system call with no data present returns $rd_nodata."
7890                 case "$rd_nodata" in
7891                 0|-1) ;;
7892                 *)
7893                         echo "(That's peculiar, fixing that to be -1.)"
7894                         rd_nodata=-1
7895                         ;;
7896                 esac
7897                 case "$eagain" in
7898                 '')
7899                         echo "Forcing errno EAGAIN on read() with no data available."
7900                         eagain=EAGAIN
7901                         ;;
7902                 *)
7903                         echo "Your read() sets errno to $eagain when no data is available."
7904                         ;;
7905                 esac
7906                 status=`$cat try.err`
7907                 case "$status" in
7908                 0) echo "And it correctly returns 0 to signal EOF.";;
7909                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7910                 *) echo "However, your read() returns '$status' on EOF??";;
7911                 esac
7912                 val="$define"
7913                 if test "$status" = "$rd_nodata"; then
7914                         echo "WARNING: you can't distinguish between EOF and no data!"
7915                         val="$undef"
7916                 fi
7917         else
7918                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7919                 eagain=EAGAIN
7920         fi
7921         set d_eofnblk
7922         eval $setvar
7923         ;;
7924 *)
7925         echo "Using $hint value $eagain."
7926         echo "Your read() returns $rd_nodata when no data is present."
7927         case "$d_eofnblk" in
7928         "$define") echo "And you can see EOF because read() returns 0.";;
7929         "$undef") echo "But you can't see EOF status from read() returned value.";;
7930         *)
7931                 echo "(Assuming you can't see EOF status from read anyway.)"
7932                 d_eofnblk=$undef
7933                 ;;
7934         esac
7935         ;;
7936 esac
7937 $rm -f try try.* .out core head.c mtry
7938
7939 : see if fchmod exists
7940 set fchmod d_fchmod
7941 eval $inlibc
7942
7943 : see if fchown exists
7944 set fchown d_fchown
7945 eval $inlibc
7946
7947 : see if this is an fcntl system
7948 set fcntl d_fcntl
7949 eval $inlibc
7950
7951 : see if sys/select.h has to be included
7952 set sys/select.h i_sysselct
7953 eval $inhdr
7954
7955 : see if we should include time.h, sys/time.h, or both
7956 echo " "
7957 if test "X$timeincl" = X; then
7958         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7959         $echo $n "I'm now running the test program...$c"
7960         $cat >try.c <<'EOCP'
7961 #include <sys/types.h>
7962 #ifdef I_TIME
7963 #include <time.h>
7964 #endif
7965 #ifdef I_SYSTIME
7966 #ifdef SYSTIMEKERNEL
7967 #define KERNEL
7968 #endif
7969 #include <sys/time.h>
7970 #endif
7971 #ifdef I_SYSSELECT
7972 #include <sys/select.h>
7973 #endif
7974 int main()
7975 {
7976         struct tm foo;
7977 #ifdef S_TIMEVAL
7978         struct timeval bar;
7979 #endif
7980 #ifdef S_TIMEZONE
7981         struct timezone tzp;
7982 #endif
7983         if (foo.tm_sec == foo.tm_sec)
7984                 exit(0);
7985 #ifdef S_TIMEVAL
7986         if (bar.tv_sec == bar.tv_sec)
7987                 exit(0);
7988 #endif
7989         exit(1);
7990 }
7991 EOCP
7992         flags=''
7993         for s_timezone in '-DS_TIMEZONE' ''; do
7994         sysselect=''
7995         for s_timeval in '-DS_TIMEVAL' ''; do
7996         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7997         for i_time in '' '-DI_TIME'; do
7998         for i_systime in '-DI_SYSTIME' ''; do
7999                 case "$flags" in
8000                 '') $echo $n ".$c"
8001                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8002                         if eval $compile; then
8003                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8004                                 shift
8005                                 flags="$*"
8006                                 echo " "
8007                                 $echo $n "Succeeded with $flags$c"
8008                         fi
8009                         ;;
8010                 esac
8011         done
8012         done
8013         done
8014         done
8015         done
8016         timeincl=''
8017         echo " "
8018         case "$flags" in
8019         *SYSTIMEKERNEL*) i_systimek="$define"
8020                 timeincl=`./findhdr sys/time.h`
8021                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8022         *) i_systimek="$undef";;
8023         esac
8024         case "$flags" in
8025         *I_TIME*) i_time="$define"
8026                 timeincl=`./findhdr time.h`" $timeincl"
8027                 echo "We'll include <time.h>." >&4;;
8028         *) i_time="$undef";;
8029         esac
8030         case "$flags" in
8031         *I_SYSTIME*) i_systime="$define"
8032                 timeincl=`./findhdr sys/time.h`" $timeincl"
8033                 echo "We'll include <sys/time.h>." >&4;;
8034         *) i_systime="$undef";;
8035         esac
8036         $rm -f try.c try
8037 fi
8038
8039 : check for fd_set items
8040 $cat <<EOM
8041
8042 Checking to see how well your C compiler handles fd_set and friends ...
8043 EOM
8044 $cat >fd_set.c <<EOCP
8045 #$i_systime I_SYS_TIME
8046 #$i_sysselct I_SYS_SELECT
8047 #$d_socket HAS_SOCKET
8048 #include <sys/types.h>
8049 #ifdef HAS_SOCKET
8050 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8051 #endif
8052 #ifdef I_SYS_TIME
8053 #include <sys/time.h>
8054 #endif
8055 #ifdef I_SYS_SELECT
8056 #include <sys/select.h>
8057 #endif
8058 int main() {
8059         fd_set fds;
8060
8061 #ifdef TRYBITS
8062         if(fds.fds_bits);
8063 #endif
8064
8065 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8066         exit(0);
8067 #else
8068         exit(1);
8069 #endif
8070 }
8071 EOCP
8072 set fd_set -DTRYBITS
8073 if eval $compile; then
8074         d_fds_bits="$define"
8075         d_fd_set="$define"
8076         echo "Well, your system knows about the normal fd_set typedef..." >&4
8077         if ./fd_set; then
8078                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8079                 d_fd_macros="$define"
8080         else
8081                 $cat >&4 <<'EOM'
8082 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8083 EOM
8084                 d_fd_macros="$undef"
8085         fi
8086 else
8087         $cat <<'EOM'
8088 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8089 EOM
8090         set fd_set
8091         if eval $compile; then
8092                 d_fds_bits="$undef"
8093                 d_fd_set="$define"
8094                 echo "Well, your system has some sort of fd_set available..." >&4
8095                 if ./fd_set; then
8096                         echo "and you have the normal fd_set macros." >&4
8097                         d_fd_macros="$define"
8098                 else
8099                         $cat <<'EOM'
8100 but not the normal fd_set macros!  Gross!  More work for me...
8101 EOM
8102                         d_fd_macros="$undef"
8103                 fi
8104         else
8105         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8106                 d_fd_set="$undef"
8107                 d_fds_bits="$undef"
8108                 d_fd_macros="$undef"
8109         fi
8110 fi
8111 $rm -f fd_set*
8112
8113 : see if fgetpos exists
8114 set fgetpos d_fgetpos
8115 eval $inlibc
8116
8117
8118 if $test X"$use64bits" = X"$define"; then
8119         : see if fgetpos64 exists
8120         set fgetpos64 d_fgetpos64
8121         eval $inlibc
8122
8123         : see if fopen64 exists
8124         set freopen64 d_fopen64
8125         eval $inlibc
8126
8127         : see if freopen64 exists
8128         set freopen64 d_freopen64
8129         eval $inlibc
8130
8131         : see if fseek64 exists
8132         set fseek64 d_fseek64
8133         eval $inlibc
8134
8135         : see if fseeko64 exists
8136         set fseeko64 d_fseeko64
8137         eval $inlibc
8138
8139         : see if fsetpos64 exists
8140         set fsetpos64 d_fsetpos64
8141         eval $inlibc
8142
8143         : see if ftell64 exists
8144         set ftell64 d_ftell64
8145         eval $inlibc
8146
8147         : see if ftello64 exists
8148         set ftello64 d_ftello64
8149         eval $inlibc
8150
8151         : see if tmpfile64 exists
8152         set tmpfile64 d_tmpfile64
8153         eval $inlibc
8154 else
8155         val="$undef"
8156         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8157         do
8158                 set $xxx
8159                 eval $setvar
8160         done
8161 fi
8162
8163 : see if flock exists
8164 set flock d_flock
8165 eval $inlibc
8166
8167 : see if fork exists
8168 set fork d_fork
8169 eval $inlibc
8170
8171 : see if pathconf exists
8172 set pathconf d_pathconf
8173 eval $inlibc
8174
8175 : see if fpathconf exists
8176 set fpathconf d_fpathconf
8177 eval $inlibc
8178
8179 : see if fseeko exists
8180 set fseeko d_fseeko
8181 eval $inlibc
8182
8183 : see if fsetpos exists
8184 set fsetpos d_fsetpos
8185 eval $inlibc
8186
8187 : see if this is a sys/param system
8188 set sys/param.h i_sysparam
8189 eval $inhdr
8190
8191 : see if this is a sys/mount.h system
8192 set sys/mount.h i_sysmount
8193 eval $inhdr
8194
8195
8196 : see if statfs exists
8197 set statfs d_statfs
8198 eval $inlibc
8199
8200 : see if fstatfs exists
8201 set fstatfs d_fstatfs
8202 eval $inlibc
8203
8204 : see if statfs knows about mount flags
8205 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8206 eval $hasfield
8207
8208
8209 : see if statvfs exists
8210 set statvfs d_statvfs
8211 eval $inlibc
8212
8213 : see if fstatvfs exists
8214 set fstatvfs d_fstatvfs
8215 eval $inlibc
8216
8217
8218 : see if ftello exists
8219 set ftello d_ftello
8220 eval $inlibc
8221
8222 : see if getgrent exists
8223 set getgrent d_getgrent
8224 eval $inlibc
8225
8226 : see if gethostbyaddr exists
8227 set gethostbyaddr d_gethbyaddr
8228 eval $inlibc
8229
8230 : see if gethostbyname exists
8231 set gethostbyname d_gethbyname
8232 eval $inlibc
8233
8234 : see if gethostent exists
8235 set gethostent d_gethent
8236 eval $inlibc
8237
8238 : see how we will look up host name
8239 echo " "
8240 call=''
8241 if set gethostname val -f d_gethname; eval $csym; $val; then
8242         echo 'gethostname() found.' >&4
8243         d_gethname="$define"
8244         call=gethostname
8245 fi
8246 if set uname val -f d_uname; eval $csym; $val; then
8247         if ./xenix; then
8248                 $cat <<'EOM'
8249 uname() was found, but you're running xenix, and older versions of xenix
8250 have a broken uname(). If you don't really know whether your xenix is old
8251 enough to have a broken system call, use the default answer.
8252
8253 EOM
8254                 dflt=y
8255                 case "$d_uname" in
8256                 "$define") dflt=n;;
8257                 esac
8258                 rp='Is your uname() broken?'
8259                 . ./myread
8260                 case "$ans" in
8261                 n*) d_uname="$define"; call=uname;;
8262                 esac
8263         else
8264                 echo 'uname() found.' >&4
8265                 d_uname="$define"
8266                 case "$call" in
8267                 '') call=uname ;;
8268                 esac
8269         fi
8270 fi
8271 case "$d_gethname" in
8272 '') d_gethname="$undef";;
8273 esac
8274 case "$d_uname" in
8275 '') d_uname="$undef";;
8276 esac
8277 case "$d_uname$d_gethname" in
8278 *define*)
8279         dflt=n
8280         cat <<EOM
8281  
8282 Every now and then someone has a $call() that lies about the hostname
8283 but can't be fixed for political or economic reasons.  If you wish, I can
8284 pretend $call() isn't there and maybe compute hostname at run-time
8285 thanks to the '$phostname' command.
8286
8287 EOM
8288         rp="Shall I ignore $call() from now on?"
8289         . ./myread
8290         case "$ans" in
8291         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8292         esac;;
8293 esac
8294 case "$phostname" in
8295 '') aphostname='';;
8296 *) case "$aphostname" in
8297         /*) ;;
8298         *) set X $phostname
8299                 shift
8300                 file=$1
8301                 shift
8302                 file=`./loc $file $file $pth`
8303                 aphostname=`echo $file $*`
8304                 ;;
8305         esac
8306         ;;
8307 esac
8308 case "$d_uname$d_gethname" in
8309 *define*) ;;
8310 *)
8311         case "$phostname" in
8312         '')
8313                 echo "There will be no way for $package to get your hostname." >&4;;
8314         *)
8315         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8316                 ;;
8317         esac;;
8318 esac
8319 case "$d_phostname" in
8320 '') d_phostname="$undef";;
8321 esac
8322
8323 : see if this is a netdb.h system
8324 set netdb.h i_netdb
8325 eval $inhdr
8326
8327 : see if prototypes for various gethostxxx netdb.h functions are available
8328 echo " "
8329 set d_gethostprotos gethostent $i_netdb netdb.h
8330 eval $hasproto
8331
8332 : see if getlogin exists
8333 set getlogin d_getlogin
8334 eval $inlibc
8335
8336 : see if getmntent exists
8337 set getmntent d_getmntent
8338 eval $inlibc
8339
8340 : see if getnetbyaddr exists
8341 set getnetbyaddr d_getnbyaddr
8342 eval $inlibc
8343
8344 : see if getnetbyname exists
8345 set getnetbyname d_getnbyname
8346 eval $inlibc
8347
8348 : see if getnetent exists
8349 set getnetent d_getnent
8350 eval $inlibc
8351
8352 : see if prototypes for various getnetxxx netdb.h functions are available
8353 echo " "
8354 set d_getnetprotos getnetent $i_netdb netdb.h
8355 eval $hasproto
8356
8357
8358 : see if getprotobyname exists
8359 set getprotobyname d_getpbyname
8360 eval $inlibc
8361
8362 : see if getprotobynumber exists
8363 set getprotobynumber d_getpbynumber
8364 eval $inlibc
8365
8366 : see if getprotoent exists
8367 set getprotoent d_getpent
8368 eval $inlibc
8369
8370 : see if getpgid exists
8371 set getpgid d_getpgid
8372 eval $inlibc
8373
8374 : see if getpgrp2 exists
8375 set getpgrp2 d_getpgrp2
8376 eval $inlibc
8377
8378 : see if getppid exists
8379 set getppid d_getppid
8380 eval $inlibc
8381
8382 : see if getpriority exists
8383 set getpriority d_getprior
8384 eval $inlibc
8385
8386 : see if prototypes for various getprotoxxx netdb.h functions are available
8387 echo " "
8388 set d_getprotoprotos getprotoent $i_netdb netdb.h
8389 eval $hasproto
8390
8391 : see if getpwent exists
8392 set getpwent d_getpwent
8393 eval $inlibc
8394
8395
8396 : see if getservbyname exists
8397 set getservbyname d_getsbyname
8398 eval $inlibc
8399
8400 : see if getservbyport exists
8401 set getservbyport d_getsbyport
8402 eval $inlibc
8403
8404 : see if getservent exists
8405 set getservent d_getsent
8406 eval $inlibc
8407
8408 : see if prototypes for various getservxxx netdb.h functions are available
8409 echo " "
8410 set d_getservprotos getservent $i_netdb netdb.h
8411 eval $hasproto
8412
8413 : see if getspent exists
8414 set getspent d_getspent
8415 eval $inlibc
8416
8417 : see if getspnam exists
8418 set getspnam d_getspnam
8419 eval $inlibc
8420
8421 : see if gettimeofday or ftime exists
8422 set gettimeofday d_gettimeod
8423 eval $inlibc
8424 case "$d_gettimeod" in
8425 "$undef")
8426         set ftime d_ftime 
8427         eval $inlibc
8428         ;;
8429 *)
8430         val="$undef"; set d_ftime; eval $setvar
8431         ;;
8432 esac
8433 case "$d_gettimeod$d_ftime" in
8434 "$undef$undef")
8435         echo " "
8436         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8437         ;;
8438 esac
8439
8440 : see if this is an grp system
8441 set grp.h i_grp
8442 eval $inhdr
8443
8444 case "$i_grp" in
8445 $define)
8446         xxx=`./findhdr grp.h`
8447         $cppstdin $cppflags $cppminus < $xxx >$$.h
8448
8449         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8450                 val="$define"
8451         else
8452                 val="$undef"
8453         fi
8454         set d_grpasswd
8455         eval $setvar
8456
8457         $rm -f $$.h
8458         ;;
8459 *)
8460         val="$undef";
8461         set d_grpasswd; eval $setvar
8462         ;;
8463 esac
8464
8465 : see if hasmntopt exists
8466 set hasmntopt d_hasmntopt
8467 eval $inlibc
8468
8469 : see if this is a netinet/in.h or sys/in.h system
8470 set netinet/in.h i_niin sys/in.h i_sysin
8471 eval $inhdr
8472
8473 : see if arpa/inet.h has to be included
8474 set arpa/inet.h i_arpainet
8475 eval $inhdr
8476
8477 : see if htonl --and friends-- exists
8478 val=''
8479 set htonl val
8480 eval $inlibc
8481
8482 : Maybe they are macros.
8483 case "$val" in
8484 $undef)
8485         $cat >htonl.c <<EOM
8486 #include <stdio.h>
8487 #include <sys/types.h>
8488 #$i_niin I_NETINET_IN
8489 #$i_sysin I_SYS_IN
8490 #$i_arpainet I_ARPA_INET
8491 #ifdef I_NETINET_IN
8492 #include <netinet/in.h>
8493 #endif
8494 #ifdef I_SYS_IN
8495 #include <sys/in.h>
8496 #endif
8497 #ifdef I_ARPA_INET
8498 #include <arpa/inet.h>
8499 #endif
8500 #ifdef htonl
8501 printf("Defined as a macro.");
8502 #endif
8503 EOM
8504         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8505         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8506                 val="$define"
8507                 echo "But it seems to be defined as a macro." >&4
8508         fi
8509         $rm -f htonl.?
8510         ;;
8511 esac
8512 set d_htonl
8513 eval $setvar
8514
8515 : see which of string.h or strings.h is needed
8516 echo " "
8517 strings=`./findhdr string.h`
8518 if $test "$strings" && $test -r "$strings"; then
8519         echo "Using <string.h> instead of <strings.h>." >&4
8520         val="$define"
8521 else
8522         val="$undef"
8523         strings=`./findhdr strings.h`
8524         if $test "$strings" && $test -r "$strings"; then
8525                 echo "Using <strings.h> instead of <string.h>." >&4
8526         else
8527                 echo "No string header found -- You'll surely have problems." >&4
8528         fi
8529 fi
8530 set i_string
8531 eval $setvar
8532 case "$i_string" in
8533 "$undef") strings=`./findhdr strings.h`;;
8534 *)        strings=`./findhdr string.h`;;
8535 esac
8536
8537 : index or strchr
8538 echo " "
8539 if set index val -f; eval $csym; $val; then
8540         if set strchr val -f d_strchr; eval $csym; $val; then
8541                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8542                         val="$define"
8543                         vali="$undef"
8544                         echo "strchr() found." >&4
8545                 else
8546                         val="$undef"
8547                         vali="$define"
8548                         echo "index() found." >&4
8549                 fi
8550         else
8551                 val="$undef"
8552                 vali="$define"
8553                 echo "index() found." >&4
8554         fi
8555 else
8556         if set strchr val -f d_strchr; eval $csym; $val; then
8557                 val="$define"
8558                 vali="$undef"
8559                 echo "strchr() found." >&4
8560         else
8561                 echo "No index() or strchr() found!" >&4
8562                 val="$undef"
8563                 vali="$undef"
8564         fi
8565 fi
8566 set d_strchr; eval $setvar
8567 val="$vali"
8568 set d_index; eval $setvar
8569
8570 : check whether inet_aton exists
8571 set inet_aton d_inetaton
8572 eval $inlibc
8573
8574 : see if inttypes.h is available
8575 : we want a real compile instead of Inhdr because some systems
8576 : have an inttypes.h which includes non-existent headers
8577 echo " "
8578 $cat >try.c <<EOCP
8579 #include <inttypes.h>
8580 int main() {
8581         static int32_t foo32 = 0x12345678;
8582 }
8583 EOCP
8584 set try
8585 if eval $compile; then
8586         echo "<inttypes.h> found." >&4
8587         val="$define"
8588 else
8589         echo "<inttypes.h> NOT found." >&4
8590         val="$undef"
8591 fi
8592 $rm -f try.c try
8593 set i_inttypes
8594 eval $setvar
8595
8596 : check for int64_t
8597 case "$use64bits" in
8598 "$define" )
8599         echo " "
8600         echo $n "Checking to see if your system supports int64_t...$c" >&4
8601         $cat >try.c <<EOCP
8602 #include <sys/types.h>
8603 #$i_inttypes I_INTTYPES
8604 #ifdef I_INTTYPES
8605 #include <inttypes.h>
8606 #endif
8607 int64_t foo() { int64_t x; x = 7; return x; }
8608 EOCP
8609         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8610                 val="$define"
8611                 echo " Yup, it does." >&4
8612         else
8613                 val="$undef"
8614                 echo " Nope, it doesn't." >&4
8615         fi
8616         $rm -f try.*
8617         ;;
8618 *)      val="$undef"
8619         ;;
8620 esac
8621 set d_int64t
8622 eval $setvar
8623
8624
8625 : Look for isascii
8626 echo " "
8627 $cat >isascii.c <<'EOCP'
8628 #include <stdio.h>
8629 #include <ctype.h>
8630 int main() {
8631         int c = 'A';
8632         if (isascii(c))
8633                 exit(0);
8634         else
8635                 exit(1);
8636 }
8637 EOCP
8638 set isascii
8639 if eval $compile; then
8640         echo "isascii() found." >&4
8641         val="$define"
8642 else
8643         echo "isascii() NOT found." >&4
8644         val="$undef"
8645 fi
8646 set d_isascii
8647 eval $setvar
8648 $rm -f isascii*
8649
8650 : see if killpg exists
8651 set killpg d_killpg
8652 eval $inlibc
8653
8654 : see if lchown exists
8655 echo " "
8656 $cat > try.c <<'EOCP'
8657 /* System header to define __stub macros and hopefully few prototypes,
8658     which can conflict with char lchown(); below.  */
8659 #include <assert.h>
8660 /* Override any gcc2 internal prototype to avoid an error.  */
8661 /* We use char because int might match the return type of a gcc2
8662    builtin and then its argument prototype would still apply.  */
8663 char lchown();
8664 int main() {
8665     /*  The GNU C library defines this for functions which it implements
8666         to always fail with ENOSYS.  Some functions are actually named
8667         something starting with __ and the normal name is an alias.  */
8668 #if defined (__stub_lchown) || defined (__stub___lchown)
8669 choke me
8670 #else
8671 lchown();
8672 #endif
8673 ; return 0; }
8674 EOCP
8675 set try
8676 if eval $compile; then
8677     $echo "lchown() found." >&4
8678     val="$define"
8679 else
8680     $echo "lchown() NOT found." >&4
8681     val="$undef"
8682 fi
8683 set d_lchown
8684 eval $setvar
8685
8686 : see if link exists
8687 set link d_link
8688 eval $inlibc
8689
8690 : see if localeconv exists
8691 set localeconv d_locconv
8692 eval $inlibc
8693
8694 : see if lockf exists
8695 set lockf d_lockf
8696 eval $inlibc
8697
8698 : check for length of double
8699 echo " "
8700 case "$doublesize" in
8701 '')
8702         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8703         $cat >try.c <<'EOCP'
8704 #include <stdio.h>
8705 int main()
8706 {
8707         printf("%d\n", sizeof(double));
8708 }
8709 EOCP
8710         set try
8711         if eval $compile_ok; then
8712                 doublesize=`./try`
8713                 $echo " $doublesize bytes." >&4
8714         else
8715                 dflt='8'
8716                 echo "(I can't seem to compile the test program.  Guessing...)"
8717                 rp="What is the size of a double precision number (in bytes)?"
8718                 . ./myread
8719                 doublesize="$ans"
8720         fi
8721         ;;
8722 esac
8723 $rm -f try.c try
8724
8725 : check for long doubles
8726 echo " "
8727 echo $n "Checking to see if your system supports long doubles...$c" >&4
8728 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8729 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8730         val="$define"
8731         echo " Yup, it does." >&4
8732 else
8733         val="$undef"
8734         echo " Nope, it doesn't." >&4
8735 fi
8736 $rm try.*
8737 set d_longdbl
8738 eval $setvar
8739
8740 : check for length of long double
8741 case "${d_longdbl}${longdblsize}" in
8742 $define)
8743         echo " "
8744         $echo $n "Checking to see how big your long doubles are...$c" >&4
8745         $cat >try.c <<'EOCP'
8746 #include <stdio.h>
8747 int main()
8748 {
8749         printf("%d\n", sizeof(long double));
8750 }
8751 EOCP
8752         set try
8753         if eval $compile; then
8754                 longdblsize=`./try`
8755                 $echo " $longdblsize bytes." >&4
8756         else
8757                 dflt='8'
8758                 echo " "
8759                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8760                 rp="What is the size of a long double (in bytes)?"
8761                 . ./myread
8762                 longdblsize="$ans"
8763         fi
8764         if $test "X$doublesize" = "X$longdblsize"; then
8765                 echo "(That isn't any different from an ordinary double.)"
8766         fi      
8767         ;;
8768 esac
8769 $rm -f try.c try
8770
8771 : check for long long
8772 echo " "
8773 echo $n "Checking to see if your system supports long long...$c" >&4
8774 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8775 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8776         val="$define"
8777         echo " Yup, it does." >&4
8778 else
8779         val="$undef"
8780         echo " Nope, it doesn't." >&4
8781 fi
8782 $rm try.*
8783 set d_longlong
8784 eval $setvar
8785
8786 : check for length of long long
8787 case "${d_longlong}${longlongsize}" in
8788 $define)
8789         echo " "
8790         $echo $n "Checking to see how big your long longs are...$c" >&4
8791         $cat >try.c <<'EOCP'
8792 #include <stdio.h>
8793 int main()
8794 {
8795         printf("%d\n", sizeof(long long));
8796 }
8797 EOCP
8798         set try
8799         if eval $compile_ok; then
8800                 longlongsize=`./try`
8801                 $echo " $longlongsize bytes." >&4
8802         else
8803                 dflt='8'
8804                 echo " "
8805                 echo "(I can't seem to compile the test program.  Guessing...)"
8806                 rp="What is the size of a long long (in bytes)?"
8807                 . ./myread
8808                 longlongsize="$ans"
8809         fi
8810         if $test "X$longsize" = "X$longlongsize"; then
8811                 echo "(That isn't any different from an ordinary long.)"
8812         fi      
8813         ;;
8814 esac
8815 $rm -f try.c try
8816
8817 : see if lstat exists
8818 set lstat d_lstat
8819 eval $inlibc
8820
8821 : see if madvise exists
8822 set madvise d_madvise
8823 eval $inlibc
8824
8825 : see if mblen exists
8826 set mblen d_mblen
8827 eval $inlibc
8828
8829 : see if mbstowcs exists
8830 set mbstowcs d_mbstowcs
8831 eval $inlibc
8832
8833 : see if mbtowc exists
8834 set mbtowc d_mbtowc
8835 eval $inlibc
8836
8837 : see if memchr exists
8838 set memchr d_memchr
8839 eval $inlibc
8840
8841 : see if memcmp exists
8842 set memcmp d_memcmp
8843 eval $inlibc
8844
8845 : see if memcpy exists
8846 set memcpy d_memcpy
8847 eval $inlibc
8848
8849 : see if memmove exists
8850 set memmove d_memmove
8851 eval $inlibc
8852
8853 : see if memset exists
8854 set memset d_memset
8855 eval $inlibc
8856
8857 : see if mkdir exists
8858 set mkdir d_mkdir
8859 eval $inlibc
8860
8861 : see if mkfifo exists
8862 set mkfifo d_mkfifo
8863 eval $inlibc
8864
8865 : see if mktime exists
8866 set mktime d_mktime
8867 eval $inlibc
8868
8869 : see if this is a sys/mman.h system
8870 set sys/mman.h i_sysmman
8871 eval $inhdr
8872
8873 : see if mmap exists
8874 set mmap d_mmap
8875 eval $inlibc
8876 : see what shmat returns
8877 : default to something harmless
8878 mmaptype='void *'
8879 case "$i_sysmman$d_mmap" in
8880 "$define$define")
8881         $cat >mmap.c <<'END'
8882 #include <sys/mman.h>
8883 void *mmap();
8884 END
8885         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8886                 mmaptype='void *'
8887         else
8888                 mmaptype='caddr_t'
8889         fi
8890         echo "and it returns ($mmaptype)." >&4
8891         ;;
8892 esac
8893
8894
8895
8896 : see if mprotect exists
8897 set mprotect d_mprotect
8898 eval $inlibc
8899
8900 : see if msgctl exists
8901 set msgctl d_msgctl
8902 eval $inlibc
8903
8904 : see if msgget exists
8905 set msgget d_msgget
8906 eval $inlibc
8907
8908 : see if msgsnd exists
8909 set msgsnd d_msgsnd
8910 eval $inlibc
8911
8912 : see if msgrcv exists
8913 set msgrcv d_msgrcv
8914 eval $inlibc
8915
8916 : see how much of the 'msg*(2)' library is present.
8917 h_msg=true
8918 echo " "
8919 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8920 *"$undef"*) h_msg=false;;
8921 esac
8922 case "$osname" in
8923 freebsd)
8924     case "`ipcs 2>&1`" in
8925     "SVID messages"*"not configured"*)
8926         echo "Your $osname does not have the msg*(2) configured." >&4
8927         h_msg=false
8928         val="$undef"
8929         set msgctl d_msgctl
8930         eval $setvar
8931         set msgget d_msgget
8932         eval $setvar
8933         set msgsnd d_msgsnd
8934         eval $setvar
8935         set msgrcv d_msgrcv
8936         eval $setvar
8937         ;;
8938     esac
8939     ;;
8940 esac
8941 : we could also check for sys/ipc.h ...
8942 if $h_msg && $test `./findhdr sys/msg.h`; then
8943         echo "You have the full msg*(2) library." >&4
8944         val="$define"
8945 else
8946         echo "You don't have the full msg*(2) library." >&4
8947         val="$undef"
8948 fi
8949 set d_msg
8950 eval $setvar
8951
8952 : see if msync exists
8953 set msync d_msync
8954 eval $inlibc
8955
8956 : see if munmap exists
8957 set munmap d_munmap
8958 eval $inlibc
8959
8960 : see if nice exists
8961 set nice d_nice
8962 eval $inlibc
8963
8964 : see if POSIX threads are available
8965 if test "X$usethreads" = "X$define"; then
8966         set pthread.h i_pthread
8967         eval $inhdr
8968 else
8969         i_pthread="$undef"
8970 fi
8971
8972
8973
8974 : how to create joinable pthreads
8975 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8976         echo " "
8977         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8978         $cat >try.c <<'EOCP'
8979 #include <pthread.h>
8980 int main() {
8981     int detachstate = JOINABLE;
8982 }
8983 EOCP
8984         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8985         if eval $compile; then
8986                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8987                 val="$undef" # Yes, undef.
8988                 set d_old_pthread_create_joinable
8989                 eval $setvar
8990                 val=""
8991                 set old_pthread_create_joinable
8992                 eval $setvar
8993         else
8994                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8995                 if eval $compile; then
8996                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8997                         val="$define"
8998                         set d_old_pthread_create_joinable
8999                         eval $setvar
9000                         val=PTHREAD_CREATE_UNDETACHED
9001                         set old_pthread_create_joinable
9002                         eval $setvar
9003                 else            
9004                         set try -DJOINABLE=__UNDETACHED
9005                         if eval $compile; then
9006                                 echo "You seem to use __UNDETACHED." >&4
9007                                 val="$define"
9008                                 set d_old_pthread_create_joinable
9009                                 eval $setvar
9010                                 val=__UNDETACHED
9011                                 set old_pthread_create_joinable
9012                                 eval $setvar
9013                         else
9014                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9015                                 val="$define"
9016                                 set d_old_pthread_create_joinable
9017                                 eval $setvar
9018                                 val=0
9019                                 set old_pthread_create_joinable
9020                                 eval $setvar
9021                         fi
9022                 fi
9023         fi
9024         $rm -f try try.*
9025 else
9026     d_old_pthread_create_joinable="$undef"
9027     old_pthread_create_joinable=""
9028 fi
9029
9030 : see if pause exists
9031 set pause d_pause
9032 eval $inlibc
9033
9034 : see if pipe exists
9035 set pipe d_pipe
9036 eval $inlibc
9037
9038 : see if poll exists
9039 set poll d_poll
9040 eval $inlibc
9041
9042
9043 : see whether the various POSIXish _yields exist
9044 $cat >try.c <<EOP
9045 #include <pthread.h>
9046 #include <stdio.h>
9047 int main() {
9048 #ifdef SCHED_YIELD
9049         sched_yield();
9050 #else
9051 #ifdef PTHREAD_YIELD
9052         pthread_yield();
9053 #else
9054 #ifdef PTHREAD_YIELD_NULL
9055         pthread_yield(NULL);
9056 #endif
9057 #endif
9058 #endif
9059 }
9060 EOP
9061 : see if sched_yield exists
9062 set try -DSCHED_YIELD
9063 if eval $compile; then
9064     val="$define"
9065     sched_yield='sched_yield()'
9066 else
9067     val="$undef"
9068 fi
9069 case "$usethreads" in
9070 $define)
9071         case "$val" in
9072         $define) echo 'sched_yield() found.' >&4        ;;
9073         *)       echo 'sched_yield() NOT found.' >&4    ;;
9074         esac
9075 esac
9076 set d_sched_yield
9077 eval $setvar
9078
9079 : see if pthread_yield exists
9080 set try -DPTHREAD_YIELD
9081 if eval $compile; then
9082     val="$define"
9083     case "$sched_yield" in
9084     '') sched_yield='pthread_yield()' ;;
9085     esac
9086 else
9087     set try -DPTHREAD_YIELD_NULL
9088     if eval $compile; then
9089         val="$define"
9090         case "$sched_yield" in
9091         '') sched_yield='pthread_yield(NULL)' ;;
9092         esac
9093     else
9094         val="$undef"
9095     fi
9096 fi
9097 case "$usethreads" in
9098 $define)
9099         case "$val" in
9100         $define) echo 'pthread_yield() found.' >&4      ;;
9101         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9102         esac
9103         ;;
9104 esac
9105 set d_pthread_yield
9106 eval $setvar
9107
9108 case "$sched_yield" in
9109 '') sched_yield=undef ;;
9110 esac
9111
9112 $rm -f try try.*
9113
9114 : see if this is a pwd.h system
9115 set pwd.h i_pwd
9116 eval $inhdr
9117
9118 case "$i_pwd" in
9119 $define)
9120         xxx=`./findhdr pwd.h`
9121         $cppstdin $cppflags $cppminus < $xxx >$$.h
9122
9123         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9124                 val="$define"
9125         else
9126                 val="$undef"
9127         fi
9128         set d_pwquota
9129         eval $setvar
9130
9131         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9132                 val="$define"
9133         else
9134                 val="$undef"
9135         fi
9136         set d_pwage
9137         eval $setvar
9138
9139         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9140                 val="$define"
9141         else
9142                 val="$undef"
9143         fi
9144         set d_pwchange
9145         eval $setvar
9146
9147         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9148                 val="$define"
9149         else
9150                 val="$undef"
9151         fi
9152         set d_pwclass
9153         eval $setvar
9154
9155         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9156                 val="$define"
9157         else
9158                 val="$undef"
9159         fi
9160         set d_pwexpire
9161         eval $setvar
9162
9163         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9164                 val="$define"
9165         else
9166                 val="$undef"
9167         fi
9168         set d_pwcomment
9169         eval $setvar
9170
9171         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9172                 val="$define"
9173         else
9174                 val="$undef"
9175         fi
9176         set d_pwgecos
9177         eval $setvar
9178
9179         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9180                 val="$define"
9181         else
9182                 val="$undef"
9183         fi
9184         set d_pwpasswd
9185         eval $setvar
9186
9187         $rm -f $$.h
9188         ;;
9189 *)
9190         val="$undef"; 
9191         set d_pwquota; eval $setvar
9192         set d_pwage; eval $setvar
9193         set d_pwchange; eval $setvar
9194         set d_pwclass; eval $setvar
9195         set d_pwexpire; eval $setvar
9196         set d_pwcomment; eval $setvar
9197         set d_pwgecos; eval $setvar
9198         set d_pwpasswd; eval $setvar
9199         ;;
9200 esac
9201
9202 : see if readdir and friends exist
9203 set readdir d_readdir
9204 eval $inlibc
9205 set seekdir d_seekdir
9206 eval $inlibc
9207 set telldir d_telldir
9208 eval $inlibc
9209 set rewinddir d_rewinddir
9210 eval $inlibc
9211
9212 : see if readlink exists
9213 set readlink d_readlink
9214 eval $inlibc
9215
9216 : see if readv exists
9217 set readv d_readv
9218 eval $inlibc
9219
9220 : see if rename exists
9221 set rename d_rename
9222 eval $inlibc
9223
9224 : see if rmdir exists
9225 set rmdir d_rmdir
9226 eval $inlibc
9227
9228 : see if memory.h is available.
9229 val=''
9230 set memory.h val
9231 eval $inhdr
9232
9233 : See if it conflicts with string.h
9234 case "$val" in
9235 $define)
9236         case "$strings" in
9237         '') ;;
9238         *)
9239                 $cppstdin $cppflags $cppminus < $strings > mem.h
9240                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9241                         echo " "
9242                         echo "We won't be including <memory.h>."
9243                         val="$undef"
9244                 fi
9245                 $rm -f mem.h
9246                 ;;
9247         esac
9248 esac
9249 set i_memory
9250 eval $setvar
9251
9252 : can bcopy handle overlapping blocks?
9253 val="$undef"
9254 case "$d_bcopy" in
9255 "$define")
9256         echo " "
9257         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9258         $cat >try.c <<EOCP
9259 #$i_memory I_MEMORY
9260 #$i_stdlib I_STDLIB
9261 #$i_string I_STRING
9262 #$i_unistd I_UNISTD
9263 EOCP
9264         $cat >>try.c <<'EOCP'
9265 #include <stdio.h>
9266 #ifdef I_MEMORY
9267 #  include <memory.h>
9268 #endif
9269 #ifdef I_STDLIB
9270 #  include <stdlib.h>
9271 #endif
9272 #ifdef I_STRING
9273 #  include <string.h>
9274 #else
9275 #  include <strings.h>
9276 #endif
9277 #ifdef I_UNISTD
9278 #  include <unistd.h>  /* Needed for NetBSD */
9279 #endif
9280 int main()
9281 {
9282 char buf[128], abc[128];
9283 char *b;
9284 int len;
9285 int off;
9286 int align;
9287
9288 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9289
9290 for (align = 7; align >= 0; align--) {
9291         for (len = 36; len; len--) {
9292                 b = buf+align;
9293                 bcopy(abc, b, len);
9294                 for (off = 1; off <= len; off++) {
9295                         bcopy(b, b+off, len);
9296                         bcopy(b+off, b, len);
9297                         if (bcmp(b, abc, len))
9298                                 exit(1);
9299                 }
9300         }
9301 }
9302 exit(0);
9303 }
9304 EOCP
9305         set try
9306         if eval $compile_ok; then
9307                 if ./try 2>/dev/null; then
9308                         echo "Yes, it can."
9309                         val="$define"
9310                 else
9311                         echo "It can't, sorry."
9312                         case "$d_memmove" in
9313                         "$define") echo "But that's Ok since you have memmove()." ;;
9314                         esac
9315                 fi
9316         else
9317                 echo "(I can't compile the test program, so we'll assume not...)"
9318                 case "$d_memmove" in
9319                 "$define") echo "But that's Ok since you have memmove()." ;;
9320                 esac
9321         fi
9322         ;;
9323 esac
9324 $rm -f try.* try core
9325 set d_safebcpy
9326 eval $setvar
9327
9328 : can memcpy handle overlapping blocks?
9329 val="$undef"
9330 case "$d_memcpy" in
9331 "$define")
9332         echo " "
9333         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9334         $cat >try.c <<EOCP
9335 #$i_memory I_MEMORY
9336 #$i_stdlib I_STDLIB
9337 #$i_string I_STRING
9338 #$i_unistd I_UNISTD
9339 EOCP
9340         $cat >>try.c <<'EOCP'
9341 #include <stdio.h>
9342 #ifdef I_MEMORY
9343 #  include <memory.h>
9344 #endif
9345 #ifdef I_STDLIB
9346 #  include <stdlib.h>
9347 #endif
9348 #ifdef I_STRING
9349 #  include <string.h>
9350 #else
9351 #  include <strings.h>
9352 #endif
9353 #ifdef I_UNISTD
9354 #  include <unistd.h>  /* Needed for NetBSD */
9355 #endif
9356 int main()
9357 {
9358 char buf[128], abc[128];
9359 char *b;
9360 int len;
9361 int off;
9362 int align;
9363
9364 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9365    try to store the string in read-only memory. */
9366 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9367
9368 for (align = 7; align >= 0; align--) {
9369         for (len = 36; len; len--) {
9370                 b = buf+align;
9371                 memcpy(b, abc, len);
9372                 for (off = 1; off <= len; off++) {
9373                         memcpy(b+off, b, len);
9374                         memcpy(b, b+off, len);
9375                         if (memcmp(b, abc, len))
9376                                 exit(1);
9377                 }
9378         }
9379 }
9380 exit(0);
9381 }
9382 EOCP
9383         set try
9384         if eval $compile_ok; then
9385                 if ./try 2>/dev/null; then
9386                         echo "Yes, it can."
9387                         val="$define"
9388                 else
9389                         echo "It can't, sorry."
9390                         case "$d_memmove" in
9391                         "$define") echo "But that's Ok since you have memmove()." ;;
9392                         esac
9393                 fi
9394         else
9395                 echo "(I can't compile the test program, so we'll assume not...)"
9396                 case "$d_memmove" in
9397                 "$define") echo "But that's Ok since you have memmove()." ;;
9398                 esac
9399         fi
9400         ;;
9401 esac
9402 $rm -f try.* try core
9403 set d_safemcpy
9404 eval $setvar
9405
9406 : can memcmp be trusted to compare relative magnitude?
9407 val="$undef"
9408 case "$d_memcmp" in
9409 "$define")
9410         echo " "
9411         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9412         $cat >try.c <<EOCP
9413 #$i_memory I_MEMORY
9414 #$i_stdlib I_STDLIB
9415 #$i_string I_STRING
9416 #$i_unistd I_UNISTD
9417 EOCP
9418         $cat >>try.c <<'EOCP'
9419 #include <stdio.h>
9420 #ifdef I_MEMORY
9421 #  include <memory.h>
9422 #endif
9423 #ifdef I_STDLIB
9424 #  include <stdlib.h>
9425 #endif
9426 #ifdef I_STRING
9427 #  include <string.h>
9428 #else
9429 #  include <strings.h>
9430 #endif
9431 #ifdef I_UNISTD
9432 #  include <unistd.h>  /* Needed for NetBSD */
9433 #endif
9434 int main()
9435 {
9436 char a = -1;
9437 char b = 0;
9438 if ((a < b) && memcmp(&a, &b, 1) < 0)
9439         exit(1);
9440 exit(0);
9441 }
9442 EOCP
9443         set try
9444         if eval $compile_ok; then
9445                 if ./try 2>/dev/null; then
9446                         echo "Yes, it can."
9447                         val="$define"
9448                 else
9449                         echo "No, it can't (it uses signed chars)."
9450                 fi
9451         else
9452                 echo "(I can't compile the test program, so we'll assume not...)"
9453         fi
9454         ;;
9455 esac
9456 $rm -f try.* try core
9457 set d_sanemcmp
9458 eval $setvar
9459
9460 : see if select exists
9461 set select d_select
9462 eval $inlibc
9463
9464 : see if semctl exists
9465 set semctl d_semctl
9466 eval $inlibc
9467
9468 : see if semget exists
9469 set semget d_semget
9470 eval $inlibc
9471
9472 : see if semop exists
9473 set semop d_semop
9474 eval $inlibc
9475
9476 : see how much of the 'sem*(2)' library is present.
9477 h_sem=true
9478 echo " "
9479 case "$d_semctl$d_semget$d_semop" in
9480 *"$undef"*) h_sem=false;;
9481 esac
9482 case "$osname" in
9483 freebsd)
9484     case "`ipcs 2>&1`" in
9485     "SVID messages"*"not configured"*)
9486         echo "Your $osname does not have the sem*(2) configured." >&4
9487         h_sem=false
9488         val="$undef"
9489         set semctl d_semctl
9490         eval $setvar
9491         set semget d_semget
9492         eval $setvar
9493         set semop d_semop
9494         eval $setvar
9495         ;;
9496     esac
9497     ;;
9498 esac
9499 : we could also check for sys/ipc.h ...
9500 if $h_sem && $test `./findhdr sys/sem.h`; then
9501         echo "You have the full sem*(2) library." >&4
9502         val="$define"
9503 else
9504         echo "You don't have the full sem*(2) library." >&4
9505         val="$undef"
9506 fi
9507 set d_sem
9508 eval $setvar
9509
9510 : see whether sys/sem.h defines union semun
9511 echo " "
9512 $cat > try.c <<'END'
9513 #include <sys/types.h>
9514 #include <sys/ipc.h>
9515 #include <sys/sem.h>
9516 int main () { union semun semun; semun.buf = 0; }
9517 END
9518 set try
9519 if eval $compile; then
9520     echo "You have union semun in <sys/sem.h>." >&4
9521     val="$define"
9522 else
9523     echo "You do not have union semun in <sys/sem.h>." >&4
9524     val="$undef"
9525 fi
9526 $rm -f try try.c try.h
9527 set d_union_semun
9528 eval $setvar
9529
9530 : see how to do semctl IPC_STAT
9531 case "$d_sem" in
9532 $define)
9533     : see whether semctl IPC_STAT can use union semun
9534     echo " "
9535     $cat > try.h <<END
9536 #ifndef S_IRUSR
9537 #   ifdef S_IREAD
9538 #       define S_IRUSR S_IREAD
9539 #       define S_IWUSR S_IWRITE
9540 #       define S_IXUSR S_IEXEC
9541 #   else
9542 #       define S_IRUSR 0400
9543 #       define S_IWUSR 0200
9544 #       define S_IXUSR 0100
9545 #   endif
9546 #   define S_IRGRP (S_IRUSR>>3)
9547 #   define S_IWGRP (S_IWUSR>>3)
9548 #   define S_IXGRP (S_IXUSR>>3)
9549 #   define S_IROTH (S_IRUSR>>6)
9550 #   define S_IWOTH (S_IWUSR>>6)
9551 #   define S_IXOTH (S_IXUSR>>6)
9552 #endif
9553 #ifndef S_IRWXU
9554 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9555 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9556 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9557 #endif
9558 END
9559
9560     $cat > try.c <<END
9561 #include <sys/types.h>
9562 #include <sys/ipc.h>
9563 #include <sys/sem.h>
9564 #include <sys/stat.h>
9565 #include <stdio.h>
9566 #include <errno.h>
9567 #include "try.h"
9568 #ifndef errno
9569 extern int errno;
9570 #endif
9571 #$d_union_semun HAS_UNION_SEMUN
9572 int main() {
9573     union semun
9574 #ifndef HAS_UNION_SEMUN
9575     {
9576         int val;
9577         struct semid_ds *buf;
9578         unsigned short *array;
9579     }
9580 #endif
9581     arg;
9582     int sem, st;
9583
9584 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9585     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9586     if (sem > -1) {
9587         struct semid_ds argbuf;
9588         arg.buf = &argbuf;
9589 #       ifdef IPC_STAT
9590         st = semctl(sem, 0, IPC_STAT, arg);
9591         if (st == 0)
9592             printf("semun\n");
9593         else
9594 #       endif /* IPC_STAT */
9595             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9596 #       ifdef IPC_RMID
9597         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9598 #       endif /* IPC_RMID */
9599             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9600     } else
9601 #endif /* IPC_PRIVATE && ... */
9602         printf("semget failed: errno = %d\n", errno);
9603   return 0;
9604 }
9605 END
9606     val="$undef"
9607     set try
9608     if eval $compile; then
9609         xxx=`./try`
9610         case "$xxx" in
9611         semun) val="$define" ;;
9612         esac
9613     fi
9614     $rm -f try try.c
9615     set d_semctl_semun
9616     eval $setvar
9617     case "$d_semctl_semun" in
9618     $define)
9619         echo "You can use union semun for semctl IPC_STAT." >&4
9620         also='also'
9621         ;;
9622     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9623         also=''
9624         ;;
9625     esac
9626
9627     : see whether semctl IPC_STAT can use struct semid_ds pointer
9628     $cat > try.c <<'END'
9629 #include <sys/types.h>
9630 #include <sys/ipc.h>
9631 #include <sys/sem.h>
9632 #include <sys/stat.h>
9633 #include "try.h"
9634 #include <stdio.h>
9635 #include <errno.h>
9636 #ifndef errno
9637 extern int errno;
9638 #endif
9639 int main() {
9640     struct semid_ds arg;
9641     int sem, st;
9642
9643 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9644     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9645     if (sem > -1) {
9646 #       ifdef IPC_STAT
9647         st = semctl(sem, 0, IPC_STAT, &arg);
9648         if (st == 0)
9649             printf("semid_ds\n");
9650         else
9651 #       endif /* IPC_STAT */
9652             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9653 #       ifdef IPC_RMID
9654         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9655 #       endif /* IPC_RMID */
9656             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9657     } else
9658 #endif /* IPC_PRIVATE && ... */
9659         printf("semget failed: errno = %d\n", errno);
9660
9661     return 0;
9662 }
9663 END
9664     val="$undef"
9665     set try
9666     if eval $compile; then
9667         xxx=`./try`
9668         case "$xxx" in
9669         semid_ds) val="$define" ;;
9670         esac
9671     fi
9672     $rm -f try try.c
9673     set d_semctl_semid_ds
9674     eval $setvar
9675     case "$d_semctl_semid_ds" in
9676     $define)
9677         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9678         ;;
9679     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9680         ;;
9681     esac
9682     $rm -f try.h
9683     ;;
9684 *)  val="$undef"
9685
9686     # We do not have the full sem*(2) library, so assume we can not
9687     # use either.
9688
9689     set d_semctl_semun
9690     eval $setvar
9691
9692     set d_semctl_semid_ds
9693     eval $setvar
9694     ;;
9695 esac
9696
9697 : see if setegid exists
9698 set setegid d_setegid
9699 eval $inlibc
9700
9701 : see if seteuid exists
9702 set seteuid d_seteuid
9703 eval $inlibc
9704
9705 : see if setgrent exists
9706 set setgrent d_setgrent
9707 eval $inlibc
9708
9709 : see if sethostent exists
9710 set sethostent d_sethent
9711 eval $inlibc
9712
9713 : see if setlinebuf exists
9714 set setlinebuf d_setlinebuf
9715 eval $inlibc
9716
9717 : see if setlocale exists
9718 set setlocale d_setlocale
9719 eval $inlibc
9720
9721 : see if setnetent exists
9722 set setnetent d_setnent
9723 eval $inlibc
9724
9725 : see if setprotoent exists
9726 set setprotoent d_setpent
9727 eval $inlibc
9728
9729 : see if setpgid exists
9730 set setpgid d_setpgid
9731 eval $inlibc
9732
9733 : see if setpgrp2 exists
9734 set setpgrp2 d_setpgrp2
9735 eval $inlibc
9736
9737 : see if setpriority exists
9738 set setpriority d_setprior
9739 eval $inlibc
9740
9741 : see if setpwent exists
9742 set setpwent d_setpwent
9743 eval $inlibc
9744
9745 : see if setregid exists
9746 set setregid d_setregid
9747 eval $inlibc
9748 set setresgid d_setresgid
9749 eval $inlibc
9750
9751 : see if setreuid exists
9752 set setreuid d_setreuid
9753 eval $inlibc
9754 set setresuid d_setresuid
9755 eval $inlibc
9756
9757 : see if setrgid exists
9758 set setrgid d_setrgid
9759 eval $inlibc
9760
9761 : see if setruid exists
9762 set setruid d_setruid
9763 eval $inlibc
9764
9765 : see if setservent exists
9766 set setservent d_setsent
9767 eval $inlibc
9768
9769 : see if setsid exists
9770 set setsid d_setsid
9771 eval $inlibc
9772
9773 : see if setspent exists
9774 set setspent d_setspent
9775 eval $inlibc
9776
9777 : see if setvbuf exists
9778 set setvbuf d_setvbuf
9779 eval $inlibc
9780
9781 : see if sfio.h is available
9782 set sfio.h i_sfio
9783 eval $inhdr
9784
9785
9786 : see if sfio library is available
9787 case "$i_sfio" in
9788 $define)
9789         val=''
9790         set sfreserve val
9791         eval $inlibc
9792         ;;
9793 *)
9794         val="$undef"
9795         ;;
9796 esac
9797 : Ok, but do we want to use it.
9798 case "$val" in
9799 $define)
9800         case "$usesfio" in
9801         true|$define|[yY]*) dflt='y';;
9802         *) dflt='n';;
9803         esac
9804         echo "$package can use the sfio library, but it is experimental."
9805         rp="You seem to have sfio available, do you want to try using it?"
9806         . ./myread
9807         case "$ans" in
9808         y|Y) ;;
9809         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9810                 val="$undef"
9811                 : Remove sfio from list of libraries to use
9812                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9813                 shift
9814                 libs="$*"
9815                 echo "libs = $libs" >&4
9816                 ;;
9817         esac
9818         ;;
9819 *)      case "$usesfio" in
9820         true|$define|[yY]*)
9821                 echo "Sorry, cannot find sfio on this machine" >&4
9822                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9823                 ;;
9824         esac
9825         ;;
9826 esac
9827 set d_sfio
9828 eval $setvar
9829 case "$d_sfio" in
9830 $define) usesfio='true';;
9831 *) usesfio='false';;
9832 esac
9833
9834 : see if shmctl exists
9835 set shmctl d_shmctl
9836 eval $inlibc
9837
9838 : see if shmget exists
9839 set shmget d_shmget
9840 eval $inlibc
9841
9842 : see if shmat exists
9843 set shmat d_shmat
9844 eval $inlibc
9845 : see what shmat returns
9846 case "$d_shmat" in
9847 "$define")
9848         $cat >shmat.c <<'END'
9849 #include <sys/shm.h>
9850 void *shmat();
9851 END
9852         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9853                 shmattype='void *'
9854         else
9855                 shmattype='char *'
9856         fi
9857         echo "and it returns ($shmattype)." >&4
9858         : see if a prototype for shmat is available
9859         xxx=`./findhdr sys/shm.h`
9860         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9861         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9862                 val="$define"
9863         else
9864                 val="$undef"
9865         fi
9866         $rm -f shmat.[co]
9867         ;;
9868 *)
9869         val="$undef"
9870         ;;
9871 esac
9872 set d_shmatprototype
9873 eval $setvar
9874
9875 : see if shmdt exists
9876 set shmdt d_shmdt
9877 eval $inlibc
9878
9879 : see how much of the 'shm*(2)' library is present.
9880 h_shm=true
9881 echo " "
9882 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9883 *"$undef"*) h_shm=false;;
9884 esac
9885 case "$osname" in
9886 freebsd)
9887     case "`ipcs 2>&1`" in
9888     "SVID shared memory"*"not configured"*)
9889         echo "Your $osname does not have the shm*(2) configured." >&4
9890         h_shm=false
9891         val="$undef"
9892         set shmctl d_shmctl
9893         evat $setvar
9894         set shmget d_shmget
9895         evat $setvar
9896         set shmat d_shmat
9897         evat $setvar
9898         set shmdt d_shmdt
9899         evat $setvar
9900         ;;
9901     esac
9902     ;;
9903 esac
9904 : we could also check for sys/ipc.h ...
9905 if $h_shm && $test `./findhdr sys/shm.h`; then
9906         echo "You have the full shm*(2) library." >&4
9907         val="$define"
9908 else
9909         echo "You don't have the full shm*(2) library." >&4
9910         val="$undef"
9911 fi
9912 set d_shm
9913 eval $setvar
9914
9915 echo " "
9916 : see if we have sigaction
9917 if set sigaction val -f d_sigaction; eval $csym; $val; then
9918         echo 'sigaction() found.' >&4
9919         $cat > try.c <<'EOP'
9920 #include <stdio.h>
9921 #include <sys/types.h>
9922 #include <signal.h>
9923 int main()
9924 {
9925     struct sigaction act, oact;
9926 }
9927 EOP
9928         set try
9929         if eval $compile_ok; then
9930                 val="$define"
9931         else
9932                 echo "But you don't seem to have a useable struct sigaction." >&4
9933                 val="$undef"
9934         fi
9935 else
9936         echo 'sigaction NOT found.' >&4
9937         val="$undef"
9938 fi
9939 set d_sigaction; eval $setvar
9940 $rm -f try try$_o try.c
9941
9942 : see if sigsetjmp exists
9943 echo " "
9944 case "$d_sigsetjmp" in
9945 '')
9946         $cat >try.c <<'EOP'
9947 #include <setjmp.h>
9948 sigjmp_buf env;
9949 int set = 1;
9950 int main()
9951 {
9952         if (sigsetjmp(env,1))
9953                 exit(set);
9954         set = 0;
9955         siglongjmp(env, 1);
9956         exit(1);
9957 }
9958 EOP
9959         set try
9960         if eval $compile; then
9961                 if ./try >/dev/null 2>&1; then
9962                         echo "POSIX sigsetjmp found." >&4
9963                         val="$define"
9964                 else
9965                         $cat >&4 <<EOM
9966 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9967 I'll ignore them.
9968 EOM
9969                         val="$undef"
9970                 fi
9971         else
9972                 echo "sigsetjmp not found." >&4
9973                 val="$undef"
9974         fi
9975         ;;
9976 *) val="$d_sigsetjmp"
9977         case "$d_sigsetjmp" in
9978         $define) echo "POSIX sigsetjmp found." >&4;;
9979         $undef) echo "sigsetjmp not found." >&4;;
9980         esac
9981         ;;
9982 esac
9983 set d_sigsetjmp
9984 eval $setvar
9985 $rm -f try.c try
9986
9987 : see if stat knows about block sizes
9988 echo " "
9989 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9990 eval $hasfield
9991
9992 : see if _ptr and _cnt from stdio act std
9993 echo " "
9994 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9995         echo "(Looks like you have stdio.h from Linux.)"
9996         case "$stdio_ptr" in
9997         '') stdio_ptr='((fp)->_IO_read_ptr)'
9998                 ptr_lval=$define
9999                 ;;
10000         *)      ptr_lval=$d_stdio_ptr_lval;;
10001         esac
10002         case "$stdio_cnt" in
10003         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10004                 cnt_lval=$undef
10005                 ;;
10006         *)      cnt_lval=$d_stdio_cnt_lval;;
10007         esac
10008         case "$stdio_base" in
10009         '') stdio_base='((fp)->_IO_read_base)';;
10010         esac
10011         case "$stdio_bufsiz" in
10012         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10013         esac
10014 else
10015         case "$stdio_ptr" in
10016         '') stdio_ptr='((fp)->_ptr)'
10017                 ptr_lval=$define
10018                 ;;
10019         *)      ptr_lval=$d_stdio_ptr_lval;;
10020         esac
10021         case "$stdio_cnt" in
10022         '') stdio_cnt='((fp)->_cnt)'
10023                 cnt_lval=$define
10024                 ;;
10025         *)      cnt_lval=$d_stdio_cnt_lval;;
10026         esac
10027         case "$stdio_base" in
10028         '') stdio_base='((fp)->_base)';;
10029         esac
10030         case "$stdio_bufsiz" in
10031         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10032         esac
10033 fi
10034 : test whether _ptr and _cnt really work
10035 echo "Checking how std your stdio is..." >&4
10036 $cat >try.c <<EOP
10037 #include <stdio.h>
10038 #define FILE_ptr(fp)    $stdio_ptr
10039 #define FILE_cnt(fp)    $stdio_cnt
10040 int main() {
10041         FILE *fp = fopen("try.c", "r");
10042         char c = getc(fp);
10043         if (
10044                 18 <= FILE_cnt(fp) &&
10045                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10046         )
10047                 exit(0);
10048         exit(1);
10049 }
10050 EOP
10051 val="$undef"
10052 set try
10053 if eval $compile; then
10054         if ./try; then
10055                 echo "Your stdio acts pretty std."
10056                 val="$define"
10057         else
10058                 echo "Your stdio isn't very std."
10059         fi
10060 else
10061         echo "Your stdio doesn't appear very std."
10062 fi
10063 $rm -f try.c try
10064 set d_stdstdio
10065 eval $setvar
10066
10067 : Can _ptr be used as an lvalue?
10068 case "$d_stdstdio$ptr_lval" in
10069 $define$define) val=$define ;;
10070 *) val=$undef ;;
10071 esac
10072 set d_stdio_ptr_lval
10073 eval $setvar
10074
10075 : Can _cnt be used as an lvalue?
10076 case "$d_stdstdio$cnt_lval" in
10077 $define$define) val=$define ;;
10078 *) val=$undef ;;
10079 esac
10080 set d_stdio_cnt_lval
10081 eval $setvar
10082
10083 : see if _base is also standard
10084 val="$undef"
10085 case "$d_stdstdio" in
10086 $define)
10087         $cat >try.c <<EOP
10088 #include <stdio.h>
10089 #define FILE_base(fp)   $stdio_base
10090 #define FILE_bufsiz(fp) $stdio_bufsiz
10091 int main() {
10092         FILE *fp = fopen("try.c", "r");
10093         char c = getc(fp);
10094         if (
10095                 19 <= FILE_bufsiz(fp) &&
10096                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10097         )
10098                 exit(0);
10099         exit(1);
10100 }
10101 EOP
10102         set try
10103         if eval $compile; then
10104                 if ./try; then
10105                         echo "And its _base field acts std."
10106                         val="$define"
10107                 else
10108                         echo "But its _base field isn't std."
10109                 fi
10110         else
10111                 echo "However, it seems to be lacking the _base field."
10112         fi
10113         $rm -f try.c try
10114         ;;
10115 esac
10116 set d_stdiobase
10117 eval $setvar
10118
10119 $cat >&4 <<EOM
10120 Checking how to access stdio streams by file descriptor number...
10121 EOM
10122 case "$stdio_stream_array" in
10123 '')     $cat >try.c <<EOCP
10124 #include <stdio.h>
10125 int main() {
10126   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10127     printf("yes\n");
10128 }
10129 EOCP
10130         for s in _iob __iob __sF
10131         do
10132                 set try -DSTDIO_STREAM_ARRAY=$s
10133                 if eval $compile; then
10134                         case "`./try$exe_ext`" in
10135                         yes)    stdio_stream_array=$s; break ;;
10136                         esac
10137                 fi
10138         done
10139         $rm -f try.* try$exe_ext
10140 esac
10141 case "$stdio_stream_array" in
10142 '')     $cat >&4 <<EOM
10143 I can't figure out how to access stdio streams by file descriptor number.
10144 EOM
10145         d_stdio_stream_array="$undef"
10146         ;;
10147 *)      $cat >&4 <<EOM
10148 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10149 EOM
10150         d_stdio_stream_array="$define"
10151         ;;
10152 esac
10153
10154 : see if strcoll exists
10155 set strcoll d_strcoll
10156 eval $inlibc
10157
10158 : check for structure copying
10159 echo " "
10160 echo "Checking to see if your C compiler can copy structs..." >&4
10161 $cat >try.c <<'EOCP'
10162 int main()
10163 {
10164         struct blurfl {
10165                 int dyick;
10166         } foo, bar;
10167
10168         foo = bar;
10169 }
10170 EOCP
10171 if $cc -c try.c >/dev/null 2>&1 ; then
10172         val="$define"
10173         echo "Yup, it can."
10174 else
10175         val="$undef"
10176         echo "Nope, it can't."
10177 fi
10178 set d_strctcpy
10179 eval $setvar
10180 $rm -f try.*
10181
10182 : see if strerror and/or sys_errlist[] exist
10183 echo " "
10184 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10185     if set strerror val -f d_strerror; eval $csym; $val; then
10186                 echo 'strerror() found.' >&4
10187                 d_strerror="$define"
10188                 d_strerrm='strerror(e)'
10189                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10190                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10191                         d_syserrlst="$define"
10192                 else
10193                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10194                         d_syserrlst="$undef"
10195                 fi
10196     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10197                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10198                 echo 'strerror() found in string header.' >&4
10199                 d_strerror="$define"
10200                 d_strerrm='strerror(e)'
10201                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10202                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10203                                 d_syserrlst="$define"
10204                 else
10205                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10206                         d_syserrlst="$undef"
10207                 fi
10208     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10209                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10210                 d_strerror="$undef"
10211                 d_syserrlst="$define"
10212                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10213     else
10214                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10215                 d_strerror="$undef"
10216                 d_syserrlst="$undef"
10217                 d_strerrm='"unknown"'
10218     fi
10219 fi
10220
10221 : see if strtod exists
10222 set strtod d_strtod
10223 eval $inlibc
10224
10225 : see if strtol exists
10226 set strtol d_strtol
10227 eval $inlibc
10228
10229 : see if strtoul exists
10230 set strtoul d_strtoul
10231 eval $inlibc
10232
10233 : see if strxfrm exists
10234 set strxfrm d_strxfrm
10235 eval $inlibc
10236
10237 : see if symlink exists
10238 set symlink d_symlink
10239 eval $inlibc
10240
10241 : see if syscall exists
10242 set syscall d_syscall
10243 eval $inlibc
10244
10245 : see if sysconf exists
10246 set sysconf d_sysconf
10247 eval $inlibc
10248
10249 : see if system exists
10250 set system d_system
10251 eval $inlibc
10252
10253 : see if tcgetpgrp exists
10254 set tcgetpgrp d_tcgetpgrp
10255 eval $inlibc
10256
10257 : see if tcsetpgrp exists
10258 set tcsetpgrp d_tcsetpgrp
10259 eval $inlibc
10260
10261 : see if sys/types.h has to be included
10262 set sys/types.h i_systypes
10263 eval $inhdr
10264
10265 : see if prototype for telldir is available
10266 echo " "
10267 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10268 eval $hasproto
10269
10270 : define an is-a-typedef? function
10271 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10272 case "$inclist" in
10273 "") inclist="sys/types.h";;
10274 esac;
10275 eval "varval=\$$var";
10276 case "$varval" in
10277 "")
10278         $rm -f temp.c;
10279         for inc in $inclist; do
10280                 echo "#include <$inc>" >>temp.c;
10281         done;
10282         echo "#ifdef $type" >> temp.c;
10283         echo "printf(\"We have $type\");" >> temp.c;
10284         echo "#endif" >> temp.c;
10285         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10286         if $contains $type temp.E >/dev/null 2>&1; then
10287                 eval "$var=\$type";
10288         else
10289                 eval "$var=\$def";
10290         fi;
10291         $rm -f temp.?;;
10292 *) eval "$var=\$varval";;
10293 esac'
10294
10295 : define an is-a-typedef? function that prompts if the type is not available.
10296 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10297 case "$inclist" in
10298 "") inclist="sys/types.h";;
10299 esac;
10300 eval "varval=\$$var";
10301 case "$varval" in
10302 "")
10303         $rm -f temp.c;
10304         for inc in $inclist; do
10305                 echo "#include <$inc>" >>temp.c;
10306         done;
10307         echo "#ifdef $type" >> temp.c;
10308         echo "printf(\"We have $type\");" >> temp.c;
10309         echo "#endif" >> temp.c;
10310         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10311         echo " " ;
10312         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10313         if $contains $type temp.E >/dev/null 2>&1; then
10314                 echo "$type found." >&4;
10315                 eval "$var=\$type";
10316         else
10317                 echo "$type NOT found." >&4;
10318                 dflt="$def";
10319                 . ./myread ;
10320                 eval "$var=\$ans";
10321         fi;
10322         $rm -f temp.?;;
10323 *) eval "$var=\$varval";;
10324 esac'
10325
10326 : see if this is a sys/times.h system
10327 set sys/times.h i_systimes
10328 eval $inhdr
10329
10330 : see if times exists
10331 echo " "
10332 if set times val -f d_times; eval $csym; $val; then
10333         echo 'times() found.' >&4
10334         d_times="$define"
10335         inc=''
10336         case "$i_systimes" in
10337         "$define") inc='sys/times.h';;
10338         esac
10339         rp="What is the type returned by times() on this system?"
10340         set clock_t clocktype long stdio.h sys/types.h $inc
10341         eval $typedef_ask
10342 else
10343         echo 'times() NOT found, hope that will do.' >&4
10344         d_times="$undef"
10345         clocktype='int'
10346 fi
10347
10348 : see if truncate exists
10349 set truncate d_truncate
10350 eval $inlibc
10351
10352 : see if tzname[] exists
10353 echo " "
10354 if set tzname val -a d_tzname; eval $csym; $val; then
10355         val="$define"
10356         echo 'tzname[] found.' >&4
10357 else
10358         val="$undef"
10359         echo 'tzname[] NOT found.' >&4
10360 fi
10361 set d_tzname
10362 eval $setvar
10363
10364 : see if umask exists
10365 set umask d_umask
10366 eval $inlibc
10367
10368 : backward compatibility for d_hvfork
10369 if test X$d_hvfork != X; then
10370         d_vfork="$d_hvfork"
10371         d_hvfork=''
10372 fi
10373 : see if there is a vfork
10374 val=''
10375 set vfork val
10376 eval $inlibc
10377
10378 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10379 : perl on Solaris 2.x, and probably elsewhere.
10380 case "$val" in
10381 $define)
10382         echo " "
10383         case "$usevfork" in
10384         false) dflt='n';;
10385         *) dflt='y';;
10386         esac
10387         cat <<'EOM'
10388  
10389 Perl can only use a vfork() that doesn't suffer from strict
10390 restrictions on calling functions or modifying global data in
10391 the child.  For example, glibc-2.1 contains such a vfork()
10392 that is unsuitable.  If your system provides a proper fork()
10393 call, chances are that you do NOT want perl to use vfork().
10394
10395 EOM
10396         rp="Do you still want to use vfork()?"
10397         . ./myread
10398         case "$ans" in
10399         y|Y) ;;
10400         *)
10401                 echo "Ok, we won't use vfork()."
10402                 val="$undef"
10403                 ;;
10404         esac
10405         ;;
10406 esac
10407 set d_vfork
10408 eval $setvar
10409 case "$d_vfork" in
10410 $define) usevfork='true';;
10411 *) usevfork='false';;
10412 esac
10413
10414 : see if this is an sysdir system
10415 set sys/dir.h i_sysdir
10416 eval $inhdr
10417
10418 : see if this is an sysndir system
10419 set sys/ndir.h i_sysndir
10420 eval $inhdr
10421
10422 : see if closedir exists
10423 set closedir d_closedir
10424 eval $inlibc
10425
10426 case "$d_closedir" in
10427 "$define")
10428         echo " "
10429         echo "Checking whether closedir() returns a status..." >&4
10430         cat > closedir.c <<EOM
10431 #$i_dirent I_DIRENT             /**/
10432 #$i_sysdir I_SYS_DIR            /**/
10433 #$i_sysndir I_SYS_NDIR          /**/
10434 #$i_systypes I_SYS_TYPES        /**/
10435
10436 #if defined(I_SYS_TYPES)
10437 #include <sys/types.h>
10438 #endif
10439 #if defined(I_DIRENT)
10440 #include <dirent.h>
10441 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10442 #include <sys/dir.h>
10443 #endif
10444 #else
10445 #ifdef I_SYS_NDIR
10446 #include <sys/ndir.h>
10447 #else
10448 #ifdef I_SYS_DIR
10449 #ifdef hp9000s500
10450 #include <ndir.h>       /* may be wrong in the future */
10451 #else
10452 #include <sys/dir.h>
10453 #endif
10454 #endif
10455 #endif
10456 #endif 
10457 int main() { return closedir(opendir(".")); }
10458 EOM
10459         set closedir
10460         if eval $compile_ok; then
10461                 if ./closedir > /dev/null 2>&1 ; then
10462                         echo "Yes, it does."
10463                         val="$undef"
10464                 else
10465                         echo "No, it doesn't."
10466                         val="$define"
10467                 fi
10468         else
10469                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10470                 val="$define"
10471         fi
10472         ;;
10473 *)
10474         val="$undef";
10475         ;;
10476 esac
10477 set d_void_closedir
10478 eval $setvar
10479 $rm -f closedir*
10480 : check for volatile keyword
10481 echo " "
10482 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10483 $cat >try.c <<'EOCP'
10484 int main()
10485 {
10486         typedef struct _goo_struct goo_struct;
10487         goo_struct * volatile goo = ((goo_struct *)0);
10488         struct _goo_struct {
10489                 long long_int;
10490                 int reg_int;
10491                 char char_var;
10492         };
10493         typedef unsigned short foo_t;
10494         char *volatile foo;
10495         volatile int bar;
10496         volatile foo_t blech;
10497         foo = foo;
10498 }
10499 EOCP
10500 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10501         val="$define"
10502         echo "Yup, it does."
10503 else
10504         val="$undef"
10505         echo "Nope, it doesn't."
10506 fi
10507 set d_volatile
10508 eval $setvar
10509 $rm -f try.*
10510
10511 : see if there is a wait4
10512 set wait4 d_wait4
10513 eval $inlibc
10514
10515 : see if waitpid exists
10516 set waitpid d_waitpid
10517 eval $inlibc
10518
10519 : see if wcstombs exists
10520 set wcstombs d_wcstombs
10521 eval $inlibc
10522
10523 : see if wctomb exists
10524 set wctomb d_wctomb
10525 eval $inlibc
10526
10527 : see if writev exists
10528 set writev d_writev
10529 eval $inlibc
10530
10531 : preserve RCS keywords in files with variable substitution, grrr
10532 Date='$Date'
10533 Id='$Id'
10534 Log='$Log'
10535 RCSfile='$RCSfile'
10536 Revision='$Revision'
10537
10538 case "$crosscompile" in
10539 ''|[nN]*) crosscompile="$undef" ;;
10540 esac
10541
10542 case "$osname" in
10543 next|rhapsody) multiarch="$define" ;;
10544 esac
10545 case "$multiarch" in
10546 ''|[nN]*) multiarch="$undef" ;;
10547 esac
10548
10549 : check for alignment requirements
10550 echo " "
10551 case "$crosscompile$multiarch" in
10552 *$define*)
10553         $cat <<EOM
10554 You seem to be either cross-compiling or doing a multiarchitecture build,
10555 skipping the memory alignment check.
10556
10557 EOM
10558         case "$alignbytes" in
10559         '') alignbytes=8 ;;
10560         esac
10561         ;;
10562 *)
10563         case "$alignbytes" in
10564         '') echo "Checking alignment constraints..." >&4
10565                 $cat >try.c <<'EOCP'
10566 struct foobar {
10567         char foo;
10568         double bar;
10569 } try_algn;
10570 int main()
10571 {
10572         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10573 }
10574 EOCP
10575                 set try
10576                 if eval $compile_ok; then
10577                         dflt=`./try`
10578                 else
10579                         dflt='8'
10580                         echo "(I can't seem to compile the test program...)"
10581                 fi
10582                 ;;
10583         *) dflt="$alignbytes"
10584                 ;;
10585         esac
10586         rp="Doubles must be aligned on a how-many-byte boundary?"
10587         . ./myread
10588         alignbytes="$ans"
10589         $rm -f try.c try
10590         ;;
10591 esac
10592
10593
10594 : check for ordering of bytes in a long
10595 echo " "
10596 case "$crosscompile$multiarch" in
10597 *$define*)
10598         $cat <<EOM
10599 You seem to be either cross-compiling or doing a multiarchitecture build,
10600 skipping the byteorder check.
10601
10602 EOM
10603         byteorder=''
10604         ;;
10605 *)
10606         case "$byteorder" in
10607         '')
10608                 $cat <<'EOM'
10609 In the following, larger digits indicate more significance.  A big-endian
10610 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10611 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10612 machines may have weird orders like 3412.  A Cray will report 87654321. If
10613 the test program works the default is probably right.
10614 I'm now running the test program...
10615 EOM
10616                 $cat >try.c <<'EOCP'
10617 #include <stdio.h>
10618 int main()
10619 {
10620         int i;
10621         union {
10622                 unsigned long l;
10623                 char c[sizeof(long)];
10624         } u;
10625
10626         if (sizeof(long) > 4)
10627                 u.l = (0x08070605L << 32) | 0x04030201L;
10628         else
10629                 u.l = 0x04030201L;
10630         for (i = 0; i < sizeof(long); i++)
10631                 printf("%c", u.c[i]+'0');
10632         printf("\n");
10633         exit(0);
10634 }
10635 EOCP
10636                 xxx_prompt=y
10637                 set try
10638                 if eval $compile && ./try > /dev/null; then
10639                         dflt=`./try`
10640                         case "$dflt" in
10641                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10642                                 echo "(The test program ran ok.)"
10643                                 echo "byteorder=$dflt"
10644                                 xxx_prompt=n
10645                         ;;
10646                         ????|????????) echo "(The test program ran ok.)" ;;
10647                         *) echo "(The test program didn't run right for some reason.)" ;;
10648                         esac
10649                 else
10650                         dflt='4321'
10651                         cat <<'EOM'
10652 (I can't seem to compile the test program.  Guessing big-endian...)
10653 EOM
10654                 fi
10655                 case "$xxx_prompt" in
10656                 y)
10657                         rp="What is the order of bytes in a long?"
10658                         . ./myread
10659                         byteorder="$ans"
10660                         ;;
10661                 *)      byteorder=$dflt
10662                         ;;
10663                 esac
10664                 ;;
10665         esac
10666         $rm -f try.c try
10667         ;;
10668 esac
10669
10670
10671 : how do we catenate cpp tokens here?
10672 echo " "
10673 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10674 $cat >cpp_stuff.c <<'EOCP'
10675 #define RCAT(a,b)a/**/b
10676 #define ACAT(a,b)a ## b
10677 RCAT(Rei,ser)
10678 ACAT(Cir,cus)
10679 EOCP
10680 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10681 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10682         echo "Oh!  Smells like ANSI's been here." >&4
10683         echo "We can catify or stringify, separately or together!"
10684         cpp_stuff=42
10685 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10686         echo "Ah, yes!  The good old days!" >&4
10687         echo "However, in the good old days we don't know how to stringify and"
10688         echo "catify at the same time."
10689         cpp_stuff=1
10690 else
10691         $cat >&4 <<EOM
10692 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10693 to have to edit the values of CAT[2-5] in config.h...
10694 EOM
10695         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10696 fi
10697 $rm -f cpp_stuff.*
10698
10699 : see if this is a db.h system
10700 set db.h i_db
10701 eval $inhdr
10702
10703 case "$i_db" in
10704 $define)
10705         : Check db version.
10706         echo " "
10707         echo "Checking Berkeley DB version ..." >&4
10708         $cat >try.c <<EOCP
10709 #$d_const HASCONST
10710 #ifndef HASCONST
10711 #define const
10712 #endif
10713 #include <sys/types.h>
10714 #include <stdio.h>
10715 #include <db.h>
10716 int main()
10717 {
10718 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10719     int Major, Minor, Patch ;
10720     unsigned long Version ;
10721     (void)db_version(&Major, &Minor, &Patch) ;
10722     printf("You have Berkeley DB Version 2 or greater\n");
10723
10724     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10725                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10726     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10727                 Major, Minor, Patch) ;
10728
10729     /* check that db.h & libdb are compatible */
10730     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10731         printf("db.h and libdb are incompatible\n") ;
10732         exit(3);        
10733     }
10734
10735     printf("db.h and libdb are compatible\n") ;
10736
10737     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10738                 + DB_VERSION_PATCH ;
10739
10740     /* needs to be >= 2.3.4 */
10741     if (Version < 2003004) {
10742     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10743         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10744         exit(2);        
10745     }
10746
10747     exit(0);
10748 #else
10749 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10750     printf("You have Berkeley DB Version 1\n");
10751     exit(0);    /* DB version < 2: the coast is clear. */
10752 #else
10753     exit(1);    /* <db.h> not Berkeley DB? */
10754 #endif
10755 #endif
10756 }
10757 EOCP
10758         set try
10759         if eval $compile && ./try; then
10760                 echo 'Looks OK.' >&4
10761         else
10762                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10763                 i_db=$undef
10764                 case " $libs " in
10765                 *"-ldb "*)
10766                         : Remove db from list of libraries to use
10767                         echo "Removing unusable -ldb from library list" >&4
10768                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10769                         shift
10770                         libs="$*"
10771                         echo "libs = $libs" >&4
10772                         ;;
10773                 esac
10774         fi
10775         $rm -f try.*
10776         ;;
10777 esac
10778
10779 case "$i_db" in
10780 define)
10781         : Check the return type needed for hash 
10782         echo " "
10783         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10784         $cat >try.c <<EOCP
10785 #$d_const HASCONST
10786 #ifndef HASCONST
10787 #define const
10788 #endif
10789 #include <sys/types.h>
10790 #include <db.h>
10791
10792 #ifndef DB_VERSION_MAJOR
10793 u_int32_t hash_cb (ptr, size)
10794 const void *ptr;
10795 size_t size;
10796 {
10797 }
10798 HASHINFO info;
10799 int main()
10800 {
10801         info.hash = hash_cb;
10802 }
10803 #endif
10804 EOCP
10805         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10806                 if $contains warning try.out >>/dev/null 2>&1 ; then
10807                         db_hashtype='int'
10808                 else
10809                         db_hashtype='u_int32_t'
10810                 fi
10811         else
10812                 : XXX Maybe we should just give up here.
10813                 db_hashtype=u_int32_t
10814                 $cat try.out >&4
10815                 echo "Help:  I can't seem to compile the db test program." >&4
10816                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10817         fi
10818         $rm -f try.*
10819         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10820         ;;
10821 *)      db_hashtype=u_int32_t
10822         ;;
10823 esac
10824 case "$i_db" in
10825 define)
10826         : Check the return type needed for prefix 
10827         echo " "
10828         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10829         cat >try.c <<EOCP
10830 #$d_const HASCONST
10831 #ifndef HASCONST
10832 #define const
10833 #endif
10834 #include <sys/types.h>
10835 #include <db.h>
10836
10837 #ifndef DB_VERSION_MAJOR
10838 size_t prefix_cb (key1, key2)
10839 const DBT *key1;
10840 const DBT *key2;
10841 {
10842 }
10843 BTREEINFO info;
10844 int main()
10845 {
10846         info.prefix = prefix_cb;
10847 }
10848 #endif
10849 EOCP
10850         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10851                 if $contains warning try.out >>/dev/null 2>&1 ; then
10852                         db_prefixtype='int'
10853                 else
10854                         db_prefixtype='size_t'
10855                 fi
10856         else
10857                 db_prefixtype='size_t'
10858                 : XXX Maybe we should just give up here.
10859                 $cat try.out >&4
10860                 echo "Help:  I can't seem to compile the db test program." >&4
10861                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10862         fi
10863         $rm -f try.*
10864         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10865         ;;
10866 *)      db_prefixtype='size_t'
10867         ;;
10868 esac
10869
10870 : check for void type
10871 echo " "
10872 echo "Checking to see how well your C compiler groks the void type..." >&4
10873 case "$voidflags" in
10874 '')
10875         $cat >try.c <<'EOCP'
10876 #if TRY & 1
10877 void sub() {
10878 #else
10879 sub() {
10880 #endif
10881         extern void moo();      /* function returning void */
10882         void (*goo)();          /* ptr to func returning void */
10883 #if TRY & 8
10884         void *hue;              /* generic ptr */
10885 #endif
10886 #if TRY & 2
10887         void (*foo[10])();
10888 #endif
10889
10890 #if TRY & 4
10891         if(goo == moo) {
10892                 exit(0);
10893         }
10894 #endif
10895         exit(0);
10896 }
10897 int main() { sub(); }
10898 EOCP
10899         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10900                 voidflags=$defvoidused
10901         echo "Good.  It appears to support void to the level $package wants.">&4
10902                 if $contains warning .out >/dev/null 2>&1; then
10903                         echo "However, you might get some warnings that look like this:"
10904                         $cat .out
10905                 fi
10906         else
10907 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10908                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10909                         echo "It supports 1..."
10910                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10911                                 echo "It also supports 2..."
10912                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10913                                         voidflags=7
10914                                         echo "And it supports 4 but not 8 definitely."
10915                                 else
10916                                         echo "It doesn't support 4..."
10917                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10918                                                 voidflags=11
10919                                                 echo "But it supports 8."
10920                                         else
10921                                                 voidflags=3
10922                                                 echo "Neither does it support 8."
10923                                         fi
10924                                 fi
10925                         else
10926                                 echo "It does not support 2..."
10927                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10928                                         voidflags=13
10929                                         echo "But it supports 4 and 8."
10930                                 else
10931                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10932                                                 voidflags=5
10933                                                 echo "And it supports 4 but has not heard about 8."
10934                                         else
10935                                                 echo "However it supports 8 but not 4."
10936                                         fi
10937                                 fi
10938                         fi
10939                 else
10940                         echo "There is no support at all for void."
10941                         voidflags=0
10942                 fi
10943         fi
10944 esac
10945 case "$voidflags" in
10946 "$defvoidused") ;;
10947 *)      $cat >&4 <<'EOM'
10948   Support flag bits are:
10949     1: basic void declarations.
10950     2: arrays of pointers to functions returning void.
10951     4: operations between pointers to and addresses of void functions.
10952     8: generic void pointers.
10953 EOM
10954         dflt="$voidflags";
10955         rp="Your void support flags add up to what?"
10956         . ./myread
10957         voidflags="$ans"
10958         ;;
10959 esac
10960 $rm -f try.* .out
10961
10962
10963 : How can we generate normalized random numbers ?
10964 echo " "
10965 echo "Looking for a random number function..." >&4
10966 case "$randfunc" in
10967 '')
10968         if set drand48 val -f; eval $csym; $val; then
10969                 dflt="drand48"
10970                 echo "Good, found drand48()." >&4
10971         elif set random val -f; eval $csym; $val; then
10972                 dflt="random"
10973                 echo "OK, found random()." >&4
10974         else
10975                 dflt="rand"
10976                 echo "Yick, looks like I have to use rand()." >&4
10977         fi
10978         echo " "
10979         ;;
10980 *)
10981         dflt="$randfunc"
10982         ;;
10983 esac
10984 cont=true
10985
10986 case "$ccflags" in
10987 *-Dmy_rand=*|*-Dmy_srand=*)
10988         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10989         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10990         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10991         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10992         ;;
10993 esac
10994
10995 while $test "$cont"; do
10996         rp="Use which function to generate random numbers?"
10997         . ./myread
10998         if $test "$ans" = "$dflt"; then
10999                 : null
11000         else
11001                 randbits=''
11002         fi
11003         randfunc="$ans"
11004         if set $ans val -f; eval $csym; $val; then
11005                 cont=''
11006         else
11007                 dflt=y
11008                 rp="I cannot find function $ans. Use that name anyway?"
11009                 . ./myread
11010                 dflt=rand
11011                 case "$ans" in
11012                         [yY]*) cont='';;
11013                 esac
11014         fi
11015         case "$cont" in
11016         '')
11017                 case "$randfunc" in
11018                 drand48)
11019                         drand01="drand48()"
11020                         seedfunc="srand48"
11021                         randbits=48
11022                         randseedtype=long
11023                         ;;
11024                 rand|random)
11025                         case "$randbits" in
11026                         '')
11027 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11028                                 $cat >try.c <<EOCP
11029 #$i_unistd I_UNISTD
11030 #$i_stdlib I_STDLIB
11031 #include <stdio.h>
11032 #ifdef I_UNISTD
11033 #  include <unistd.h>
11034 #endif
11035 #ifdef I_STDLIB
11036 #  include <stdlib.h>
11037 #endif
11038 int main()
11039 {
11040         register int i;
11041         register unsigned long tmp;
11042         register unsigned long max = 0L;
11043
11044         for (i = 1000; i; i--) {
11045                 tmp = (unsigned long) $randfunc();
11046                 if (tmp > max) max = tmp;
11047         }
11048         for (i = 0; max; i++)
11049                 max /= 2;
11050         printf("%d\n",i);
11051 }
11052 EOCP
11053                                 set try
11054                                 if eval $compile_ok; then
11055                                         dflt=`try`
11056                                 else
11057                                         dflt='?'
11058                                         echo "(I can't seem to compile the test program...)"
11059                                 fi
11060                                 ;;
11061                         *)
11062                                 dflt="$randbits"
11063                                 ;;
11064                         esac
11065                         rp="How many bits does your $randfunc() function produce?"
11066                         . ./myread
11067                         randbits="$ans"
11068                         $rm -f try.c try
11069                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11070                         seedfunc="s$randfunc"
11071                         randseedtype=unsigned
11072                         ;;
11073                 *)
11074                         dflt="31"
11075                         rp="How many bits does your $randfunc() function produce?"
11076                         . ./myread
11077                         randbits="$ans"
11078                         seedfunc="s$randfunc"
11079                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11080                         if set $seedfunc val -f; eval $csym; $val; then
11081                                 echo "(Using $seedfunc() to seed random generator)"
11082                         else
11083                                 echo "(Warning: no $seedfunc() to seed random generator)"
11084                                 seedfunc=rand
11085                         fi
11086                         randseedtype=unsigned
11087                         ;;
11088                 esac
11089                 ;;
11090         esac
11091 done
11092
11093 echo " "
11094 echo "Determining whether or not we are on an EBCDIC system..." >&4
11095 $cat >tebcdic.c <<'EOM'
11096 int main()
11097 {
11098   if ('M'==0xd4) return 0;
11099   return 1;
11100 }
11101 EOM
11102
11103 val=$undef
11104 set tebcdic
11105 if eval $compile_ok; then
11106         if ./tebcdic; then
11107                 echo "You have EBCDIC." >&4
11108                 val="$define"
11109         else
11110                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin, or UTF." >&4
11111         fi
11112 else
11113         echo "I'm unable to compile the test program." >&4
11114         echo "I'll assume ASCII or some ISO Latin." >&4
11115 fi
11116 $rm -f tebcdic.c tebcdic
11117 set ebcdic
11118 eval $setvar
11119
11120 echo " "
11121 $cat >&4 <<EOM
11122 Checking how to flush all pending stdio output...
11123 EOM
11124 # I only know how to find the first 32 possibly open files on SunOS.
11125 # See also hints/sunos_4_1.sh and util.c  --AD
11126 case "$osname" in
11127 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11128 esac
11129 $cat >>try.c <<EOCP
11130 #include <stdio.h>
11131 #$i_unistd I_UNISTD
11132 #ifdef I_UNISTD
11133 # include <unistd.h>
11134 #endif
11135 #$d_sysconf HAS_SYSCONF
11136 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11137 #ifdef HAS_STDIO_STREAM_ARRAY
11138 # define STDIO_STREAM_ARRAY $stdio_stream_array
11139 #endif
11140 int main() {
11141   FILE* p = fopen("try.out", "w");
11142 #ifdef TRY_FPUTC
11143   fputc('x', p);
11144 #else
11145 # ifdef TRY_FPRINTF
11146   fprintf(p, "x");
11147 # endif
11148 #endif
11149 #ifdef TRY_FFLUSH_NULL
11150   fflush(NULL);
11151 #endif
11152 #ifdef TRY_FFLUSH_ALL
11153   {
11154     long open_max = -1;
11155 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11156     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11157 # else
11158 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11159     open_max = sysconf(_SC_OPEN_MAX);
11160 #  else
11161 #   ifdef FOPEN_MAX
11162     open_max = FOPEN_MAX;
11163 #   else
11164 #    ifdef OPEN_MAX
11165     open_max = OPEN_MAX;
11166 #    else
11167 #     ifdef _NFILE
11168     open_max = _NFILE;
11169 #     endif
11170 #    endif
11171 #   endif
11172 #  endif
11173 # endif 
11174 # ifdef HAS_STDIO_STREAM_ARRAY
11175     if (open_max > 0) {
11176       long i;
11177       for (i = 0; i < open_max; i++)
11178             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11179                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11180                 STDIO_STREAM_ARRAY[i]._flag)
11181                 fflush(&STDIO_STREAM_ARRAY[i]);
11182     }   
11183   }
11184 # endif
11185 #endif
11186   _exit(42);
11187 }
11188 EOCP
11189 : first we have to find out how _not_ to flush
11190 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11191     output=''
11192     set try -DTRY_FPUTC
11193     if eval $compile; then
11194             $rm -f try.out
11195             ./try$exe_ext 2>/dev/null
11196             if $test ! -s try.out -a "X$?" = X42; then
11197                 output=-DTRY_FPUTC
11198             fi
11199     fi
11200     case "$output" in
11201     '')
11202             set try -DTRY_FPRINTF
11203             $rm -f try.out
11204             if eval $compile; then
11205                     $rm -f try.out
11206                     ./try$exe_ext 2>/dev/null
11207                     if $test ! -s try.out -a "X$?" = X42; then
11208                         output=-DTRY_FPRINTF
11209                     fi
11210             fi
11211         ;;
11212     esac
11213 fi
11214 : check for fflush NULL behaviour
11215 case "$fflushNULL" in
11216 '')     set try -DTRY_FFLUSH_NULL $output
11217         if eval $compile; then
11218                 $rm -f try.out
11219                 ./try$exe_ext 2>/dev/null
11220                 code="$?"
11221                 if $test -s try.out -a "X$code" = X42; then
11222                         fflushNULL="`$cat try.out`"
11223                 else
11224                         if $test "X$code" != X42; then
11225                                 $cat >&4 <<EOM
11226 (If this test failed, don't worry, we'll try another method shortly.)
11227 EOM
11228                         fi
11229                 fi
11230         fi
11231         $rm -f core try.core core.try.*
11232         case "$fflushNULL" in
11233         x)      $cat >&4 <<EOM
11234 Your fflush(NULL) works okay.
11235 EOM
11236                 fflushNULL="$define"
11237                 ;;
11238         '')     $cat >&4 <<EOM
11239 Your fflush(NULL) isn't working (contrary to ANSI C).
11240 EOM
11241                 fflushNULL="$undef"
11242                 ;;
11243         *)      $cat >&4 <<EOM
11244 Cannot figure out whether your fflush(NULL) works or not.
11245 I'm assuming it doesn't (contrary to ANSI C).
11246 EOM
11247                 fflushNULL="$undef"
11248                 ;;
11249         esac
11250         ;;
11251 $define|true|[yY]*)
11252         fflushNULL="$define"
11253         ;;
11254 *)
11255         fflushNULL="$undef"
11256         ;;
11257 esac
11258 : check explicit looping only if NULL did not work
11259 case "$fflushNULL" in
11260 "$undef")
11261         : check for fflush all behaviour
11262         case "$fflushall" in
11263         '')     set try -DTRY_FFLUSH_ALL $output
11264                 if eval $compile; then
11265                         $cat >&4 <<EOM
11266 (Now testing the other method--but note that also this may fail.)
11267 EOM
11268                         $rm -f try.out
11269                         ./try$exe_ext 2>/dev/null
11270                         if $test -s try.out -a "X$?" = X42; then
11271                                 fflushall="`$cat try.out`"
11272                         fi
11273                 fi
11274                 $rm -f core try.core core.try.*
11275                 case "$fflushall" in
11276                 x)      $cat >&4 <<EOM
11277 Whew. Flushing explicitly all the stdio streams works.
11278 EOM
11279                         fflushall="$define"
11280                         ;;
11281                 '')     $cat >&4 <<EOM
11282 Sigh. Flushing explicitly all the stdio streams doesn't work.
11283 EOM
11284                         fflushall="$undef"
11285                         ;;
11286                 *)      $cat >&4 <<EOM
11287 Cannot figure out whether flushing stdio streams explicitly works or not.
11288 I'm assuming it doesn't.
11289 EOM
11290                         fflushall="$undef"
11291                         ;;
11292                 esac
11293                 ;;
11294         "$define"|true|[yY]*)
11295                 fflushall="$define"
11296                 ;;
11297         *)
11298                 fflushall="$undef"
11299                 ;;
11300         esac
11301         ;;
11302 *)      fflushall="$undef"      
11303         ;;
11304 esac
11305 case "$fflushNULL$fflushall" in
11306 undefundef)
11307         $cat <<EOM
11308 I cannot figure out how to flush pending stdio output.
11309 EOM
11310         ;;
11311 esac
11312 $rm -f try.* try$exe_ext
11313
11314 : see what type file positions are declared as in the library
11315 rp="What is the type for file position used by fsetpos()?"
11316 set fpos_t fpostype long stdio.h sys/types.h
11317 eval $typedef_ask
11318
11319 : Store the full pathname to the ar program for use in the C program
11320 : Respect a hint or command line value for full_ar.
11321 case "$full_ar" in
11322 '') full_ar=$ar ;;
11323 esac
11324
11325 : Store the full pathname to the sed program for use in the C program
11326 full_sed=$sed
11327
11328 : see what type gids are declared as in the kernel
11329 echo " "
11330 echo "Looking for the type for group ids returned by getgid()."
11331 set gid_t gidtype xxx stdio.h sys/types.h
11332 eval $typedef
11333 case "$gidtype" in
11334 xxx)
11335         xxx=`./findhdr sys/user.h`
11336         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11337         case $1 in
11338         unsigned) dflt="$1 $2" ;;
11339         *) dflt="$1" ;;
11340         esac
11341         ;;
11342 *) dflt="$gidtype";;
11343 esac
11344 case "$gidtype" in
11345 gid_t) echo "gid_t found." ;;
11346 *)      rp="What is the type for group ids returned by getgid()?"
11347         . ./myread
11348         gidtype="$ans"
11349         ;;
11350 esac
11351
11352 : see if getgroups exists
11353 set getgroups d_getgrps
11354 eval $inlibc
11355
11356 : see if setgroups exists
11357 set setgroups d_setgrps
11358 eval $inlibc
11359
11360
11361 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11362 echo " "
11363 case "$d_getgrps$d_setgrps" in
11364 *define*)
11365         case "$groupstype" in
11366         '') dflt="$gidtype" ;;
11367         *)  dflt="$groupstype" ;;
11368         esac
11369         $cat <<EOM
11370 What type of pointer is the second argument to getgroups() and setgroups()?
11371 Usually this is the same as group ids, $gidtype, but not always.
11372
11373 EOM
11374         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11375         . ./myread
11376         groupstype="$ans"
11377         ;;
11378 *)  groupstype="$gidtype";;
11379 esac
11380
11381 : see what type lseek is declared as in the kernel
11382 rp="What is the type used for lseek's offset on this system?"
11383 set off_t lseektype long stdio.h sys/types.h
11384 eval $typedef_ask
11385
11386 echo " "
11387 $echo $n "Checking to see how big your file offsets are...$c" >&4
11388 $cat >try.c <<EOCP
11389 #include <sys/types.h>
11390 #include <stdio.h>
11391 int main()
11392 {
11393         printf("%d\n", sizeof($lseektype));
11394 }
11395 EOCP
11396 set try
11397 if eval $compile_ok; then
11398         lseeksize=`./try`
11399         $echo " $lseeksize bytes." >&4
11400 else
11401         dflt='4'
11402         echo " "
11403         echo "(I can't seem to compile the test program.  Guessing...)"
11404         rp="What is the size of your file offsets (in bytes)?"
11405         . ./myread
11406         lseeksize="$ans"
11407 fi
11408 $rm -f try.c try
11409
11410 echo " "
11411 echo "Checking if your $make program sets \$(MAKE)..." >&4
11412 case "$make_set_make" in
11413 '')
11414         $sed 's/^X //' > testmake.mak << 'EOF'
11415 Xall:
11416 X       @echo 'maketemp="$(MAKE)"'
11417 EOF
11418         case "`$make -f testmake.mak 2>/dev/null`" in
11419         *maketemp=*) make_set_make='#' ;;
11420         *)      make_set_make="MAKE=$make" ;;
11421         esac
11422         $rm -f testmake.mak
11423         ;;
11424 esac
11425 case "$make_set_make" in
11426 '#') echo "Yup, it does.";;
11427 *) echo "Nope, it doesn't.";;
11428 esac
11429
11430 : see what type is used for mode_t
11431 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11432 set mode_t modetype int stdio.h sys/types.h
11433 eval $typedef_ask
11434
11435 : define a fucntion to check prototypes
11436 $cat > protochk <<EOSH
11437 $startsh
11438 cc="$cc"
11439 optimize="$optimize"
11440 ccflags="$ccflags"
11441 prototype="$prototype"
11442 define="$define"
11443 rm=$rm
11444 EOSH
11445
11446 $cat >> protochk <<'EOSH'
11447
11448 $rm -f try.c
11449 foo="$1"
11450 shift
11451 while test $# -ge 2; do
11452         case "$1" in
11453                 $define) echo "#include <$2>" >> try.c ;;
11454                 literal) echo "$2" >> try.c ;;
11455         esac
11456     shift 2
11457 done
11458 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11459 cat >> try.c <<'EOCP'
11460 #ifdef CAN_PROTOTYPE
11461 #define _(args) args
11462 #else
11463 #define _(args) ()
11464 #endif
11465 EOCP
11466 echo "$foo" >> try.c
11467 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11468 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11469 status=$?
11470 $rm -f try.[co]
11471 exit $status
11472 EOSH
11473 chmod +x protochk
11474 $eunicefix protochk
11475
11476 : see what type is used for size_t
11477 rp="What is the type used for the length parameter for string functions?"
11478 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11479 eval $typedef_ask
11480
11481 : check for type of arguments to gethostbyaddr. 
11482 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11483         case "$d_gethbyaddr" in
11484         $define)
11485                 $cat <<EOM
11486
11487 Checking to see what type of arguments are accepted by gethostbyaddr().
11488 EOM
11489                 hdrs="$define sys/types.h
11490                         $d_socket sys/socket.h 
11491                         $i_niin netinet/in.h 
11492                         $i_netdb netdb.h
11493                         $i_unistd unistd.h"
11494                 : The first arg can 'char *' or 'void *'
11495                 : The second arg is some of integral type
11496                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11497                         for yyy in size_t long int; do
11498                                 case "$netdb_host_type" in
11499                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11500                                         if ./protochk "$try" $hdrs; then
11501                                                 echo "Your system accepts $xxx for the first arg."
11502                                                 echo "...and $yyy for the second arg."
11503                                                 netdb_host_type="$xxx"
11504                                                 netdb_hlen_type="$yyy"
11505                                         fi
11506                                         ;;
11507                                 esac
11508                         done
11509                 done
11510                 : In case none of those worked, prompt the user.
11511                 case "$netdb_host_type" in
11512                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11513                         dflt='char *'
11514                         . ./myread
11515                         netdb_host_type=$ans
11516                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11517                         dflt="$sizetype"
11518                         . ./myread
11519                         netdb_hlen_type=$ans
11520                         ;;
11521                 esac
11522                 ;;
11523         *)      : no gethostbyaddr, so pick harmless defaults
11524                 netdb_host_type='char *'
11525                 netdb_hlen_type="$sizetype"
11526                 ;;
11527         esac
11528         # Remove the "const" if needed. -- but then we'll have a 
11529         # prototype clash!
11530         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11531 fi
11532
11533 : check for type of argument to gethostbyname. 
11534 if test "X$netdb_name_type" = X ; then
11535         case "$d_gethbyname" in
11536         $define)
11537                 $cat <<EOM
11538
11539 Checking to see what type of argument is accepted by gethostbyname().
11540 EOM
11541                 hdrs="$define sys/types.h
11542                         $d_socket sys/socket.h 
11543                         $i_niin netinet/in.h 
11544                         $i_netdb netdb.h
11545                         $i_unistd unistd.h"
11546                 for xxx in "const char *" "char *"; do
11547                         case "$netdb_name_type" in
11548                         '')     try="extern struct hostent *gethostbyname($xxx);"
11549                                 if ./protochk "$try" $hdrs; then
11550                                         echo "Your system accepts $xxx."
11551                                         netdb_name_type="$xxx"
11552                                 fi
11553                                 ;;
11554                         esac
11555                 done
11556                 : In case none of those worked, prompt the user.
11557                 case "$netdb_name_type" in
11558                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11559                         dflt='char *'
11560                         . ./myread
11561                         netdb_name_type=$ans
11562                         ;;
11563                 esac
11564                 ;;
11565         *)      : no gethostbyname, so pick harmless default
11566                 netdb_name_type='char *'
11567                 ;;
11568         esac
11569 fi
11570
11571 : check for type of 1st argument to getnetbyaddr. 
11572 if test "X$netdb_net_type" = X ; then
11573         case "$d_getnbyaddr" in
11574         $define)
11575                 $cat <<EOM
11576
11577 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11578 EOM
11579                 hdrs="$define sys/types.h
11580                         $d_socket sys/socket.h 
11581                         $i_niin netinet/in.h 
11582                         $i_netdb netdb.h
11583                         $i_unistd unistd.h"
11584                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11585                         case "$netdb_net_type" in
11586                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11587                                 if ./protochk "$try" $hdrs; then
11588                                         echo "Your system accepts $xxx."
11589                                         netdb_net_type="$xxx"
11590                                 fi
11591                                 ;;
11592                         esac
11593                 done
11594                 : In case none of those worked, prompt the user.
11595                 case "$netdb_net_type" in
11596                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11597                         dflt='long'
11598                         . ./myread
11599                         netdb_net_type=$ans
11600                         ;;
11601                 esac
11602                 ;;
11603         *)      : no getnetbyaddr, so pick harmless default
11604                 netdb_net_type='long'
11605                 ;;
11606         esac
11607 fi
11608 : locate the preferred pager for this system
11609 case "$pager" in
11610 '')
11611         dflt=''
11612         case "$pg" in
11613         /*) dflt=$pg;;
11614         esac
11615         case "$more" in
11616         /*) dflt=$more;;
11617         esac
11618         case "$less" in
11619         /*) dflt=$less;;
11620         esac
11621         case "$dflt" in
11622         '') dflt=/usr/ucb/more;;
11623         esac
11624         ;;
11625 *) dflt="$pager";;
11626 esac
11627 echo " "
11628 fn=f/
11629 rp='What pager is used on your system?'
11630 . ./getfile
11631 pager="$ans"
11632
11633 : see what type pids are declared as in the kernel
11634 rp="What is the type of process ids on this system?"
11635 set pid_t pidtype int stdio.h sys/types.h
11636 eval $typedef_ask
11637
11638 : check for length of pointer
11639 echo " "
11640 case "$ptrsize" in
11641 '')
11642         $echo $n "Checking to see how big your pointers are...$c" >&4
11643         if test "$voidflags" -gt 7; then
11644                 echo '#define VOID_PTR char *' > try.c
11645         else
11646                 echo '#define VOID_PTR void *' > try.c
11647         fi
11648         $cat >>try.c <<'EOCP'
11649 #include <stdio.h>
11650 int main()
11651 {
11652         printf("%d\n", sizeof(VOID_PTR));
11653         exit(0);
11654 }
11655 EOCP
11656         set try
11657         if eval $compile_ok; then
11658                 ptrsize=`./try`
11659                 $echo " $ptrsize bytes." >&4
11660         else
11661                 dflt='4'
11662                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11663                 rp="What is the size of a pointer (in bytes)?"
11664                 . ./myread
11665                 ptrsize="$ans"
11666         fi
11667         ;;
11668 esac
11669 $rm -f try.c try
11670
11671 : see if ar generates random libraries by itself
11672 echo " "
11673 echo "Checking how to generate random libraries on your machine..." >&4
11674 echo 'int bar1() { return bar2(); }' > bar1.c
11675 echo 'int bar2() { return 2; }' > bar2.c
11676 $cat > foo.c <<'EOP'
11677 int main() { printf("%d\n", bar1()); exit(0); }
11678 EOP
11679 $cc $ccflags -c bar1.c >/dev/null 2>&1
11680 $cc $ccflags -c bar2.c >/dev/null 2>&1
11681 $cc $ccflags -c foo.c >/dev/null 2>&1
11682 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11683 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11684         ./foobar >/dev/null 2>&1; then
11685         echo "$ar appears to generate random libraries itself."
11686         orderlib=false
11687         ranlib=":"
11688 elif $ar ts bar$_a >/dev/null 2>&1 &&
11689         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11690         ./foobar >/dev/null 2>&1; then
11691                 echo "a table of contents needs to be added with '$ar ts'."
11692                 orderlib=false
11693                 ranlib="$ar ts"
11694 else
11695         case "$ranlib" in
11696         :) ranlib='';;
11697         '')
11698                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11699                 $test -f $ranlib || ranlib=''
11700                 ;;
11701         esac
11702         if $test -n "$ranlib"; then
11703                 echo "your system has '$ranlib'; we'll use that."
11704                 orderlib=false
11705         else
11706                 echo "your system doesn't seem to support random libraries"
11707                 echo "so we'll use lorder and tsort to order the libraries."
11708                 orderlib=true
11709                 ranlib=":"
11710         fi
11711 fi
11712 $rm -f foo* bar* 
11713
11714 : check for type of arguments to select. 
11715 case "$selecttype" in
11716 '') case "$d_select" in
11717         $define)
11718                 $cat <<EOM
11719 Checking to see what type of arguments are accepted by select().
11720 EOM
11721                 hdrs="$define sys/types.h
11722                         $i_systime sys/time.h 
11723                         $i_sysselct sys/select.h
11724                         $d_socket sys/socket.h"
11725                 : The first arg can be int, unsigned, or size_t
11726                 : The last arg may or may not be 'const'
11727                 val=''
11728                 : void pointer has been seen but using that
11729                 : breaks the selectminbits test
11730                 for xxx in 'fd_set *' 'int *'; do
11731                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11732                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11733                                         case "$val" in
11734                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11735                                                 if ./protochk "$try" $hdrs; then
11736                                                         echo "Your system accepts $xxx."
11737                                                         val="$xxx"
11738                                                 fi
11739                                                 ;;
11740                                         esac
11741                                 done
11742                         done
11743                 done
11744                 case "$val" in
11745                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11746                         case "$d_fd_set" in
11747                                 $define) dflt="fd_set *" ;;
11748                                 *)              dflt="int *" ;;
11749                         esac
11750                         . ./myread
11751                         val=$ans
11752                         ;;
11753                 esac
11754                 selecttype="$val"
11755                 ;;
11756         *)      : no select, so pick a harmless default
11757                 selecttype='int *'
11758                 ;;
11759         esac
11760         ;;
11761 esac
11762
11763 : check for the select 'width'
11764 case "$selectminbits" in
11765 '') case "$d_select" in
11766         $define)
11767                 $cat <<EOM
11768
11769 Checking to see on how many bits at a time your select() operates...
11770 EOM
11771                 $cat >try.c <<EOCP
11772 #include <sys/types.h>
11773 #$i_time I_TIME
11774 #$i_systime I_SYS_TIME
11775 #$i_systimek I_SYS_TIME_KERNEL
11776 #ifdef I_TIME
11777 #   include <time.h>
11778 #endif
11779 #ifdef I_SYS_TIME
11780 #   ifdef I_SYS_TIME_KERNEL
11781 #       define KERNEL
11782 #   endif
11783 #   include <sys/time.h>
11784 #   ifdef I_SYS_TIME_KERNEL
11785 #       undef KERNEL
11786 #   endif
11787 #endif
11788 #$i_sysselct I_SYS_SELECT
11789 #ifdef I_SYS_SELECT
11790 #include <sys/select.h>
11791 #endif
11792 #$d_socket HAS_SOCKET
11793 #ifdef HAS_SOCKET
11794 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11795 #endif
11796 #include <stdio.h>
11797 $selecttype b;
11798 #define S sizeof(*(b))
11799 #define MINBITS 64
11800 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11801 #define NBITS  (NBYTES * 8)
11802 int main() {
11803     char s[NBYTES];
11804     struct timeval t;
11805     int i;
11806     FILE* fp;
11807     int fd;
11808
11809     fclose(stdin);
11810     fp = fopen("try.c", "r");
11811     if (fp == 0)
11812       exit(1);
11813     fd = fileno(fp);
11814     if (fd < 0)
11815       exit(2);
11816     b = ($selecttype)s;
11817     for (i = 0; i < NBITS; i++)
11818         FD_SET(i, b);
11819     t.tv_sec  = 0;
11820     t.tv_usec = 0;
11821     select(fd + 1, b, 0, 0, &t);
11822     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11823     printf("%d\n", i + 1);
11824     return 0;
11825 }
11826 EOCP
11827                 set try
11828                 if eval $compile_ok; then
11829                         selectminbits=`./try`
11830                         case "$selectminbits" in
11831                         '')     cat >&4 <<EOM
11832 Cannot figure out on how many bits at a time your select() operates.
11833 I'll play safe and guess it is 32 bits.
11834 EOM
11835                                 selectminbits=32
11836                                 bits="32 bits"
11837                                 ;;
11838                         1)      bits="1 bit" ;;
11839                         *)      bits="$selectminbits bits" ;;
11840                         esac
11841                         echo "Your select() operates on $bits at a time." >&4
11842                 else
11843                         rp='What is the minimum number of bits your select() operates on?'
11844                         case "$byteorder" in
11845                         1234|12345678)  dflt=32 ;;
11846                         *)              dflt=1  ;;
11847                         esac
11848                         . ./myread
11849                         val=$ans
11850                         selectminbits="$val"
11851                 fi
11852                 $rm -f try.* try
11853                 ;;
11854         *)      : no select, so pick a harmless default
11855                 selectminbits='32'
11856                 ;;
11857         esac
11858         ;;
11859 esac
11860
11861 : Trace out the files included by signal.h, then look for SIGxxx names.
11862 : Remove SIGARRAYSIZE used by HPUX.
11863 : Remove SIGSTKSIZE used by Linux.
11864 : Remove SIGSTKSZ used by Posix.
11865 : Remove SIGTYP void lines used by OS2.
11866 xxx=`echo '#include <signal.h>' |
11867         $cppstdin $cppminus $cppflags 2>/dev/null |
11868         $grep '^[       ]*#.*include' | 
11869         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11870 : Check this list of files to be sure we have parsed the cpp output ok.
11871 : This will also avoid potentially non-existent files, such 
11872 : as ../foo/bar.h
11873 xxxfiles=''
11874 for xx in $xxx /dev/null ; do
11875         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11876 done
11877 : If we have found no files, at least try signal.h
11878 case "$xxxfiles" in
11879 '')     xxxfiles=`./findhdr signal.h` ;;
11880 esac
11881 xxx=`awk '
11882 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11883         print substr($2, 4, 20)
11884 }
11885 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11886         print substr($3, 4, 20)
11887 }' $xxxfiles`
11888 : Append some common names just in case the awk scan failed.
11889 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11890 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11891 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11892 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11893 : generate a few handy files for later
11894 $cat > signal.c <<'EOCP'
11895 #include <sys/types.h>
11896 #include <signal.h>
11897 #include <stdio.h>
11898 int main() {
11899
11900 /* Strange style to avoid deeply-nested #if/#else/#endif */
11901 #ifndef NSIG
11902 #  ifdef _NSIG
11903 #    define NSIG (_NSIG)
11904 #  endif
11905 #endif
11906
11907 #ifndef NSIG
11908 #  ifdef SIGMAX
11909 #    define NSIG (SIGMAX+1)
11910 #  endif
11911 #endif
11912
11913 #ifndef NSIG
11914 #  ifdef SIG_MAX
11915 #    define NSIG (SIG_MAX+1)
11916 #  endif
11917 #endif
11918
11919 #ifndef NSIG
11920 #  ifdef MAXSIG
11921 #    define NSIG (MAXSIG+1)
11922 #  endif
11923 #endif
11924
11925 #ifndef NSIG
11926 #  ifdef MAX_SIG
11927 #    define NSIG (MAX_SIG+1)
11928 #  endif
11929 #endif
11930
11931 #ifndef NSIG
11932 #  ifdef SIGARRAYSIZE
11933 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11934 #  endif
11935 #endif
11936
11937 #ifndef NSIG
11938 #  ifdef _sys_nsig
11939 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11940 #  endif
11941 #endif
11942
11943 /* Default to some arbitrary number that's big enough to get most
11944    of the common signals.
11945 */
11946 #ifndef NSIG
11947 #    define NSIG 50
11948 #endif
11949
11950 printf("NSIG %d\n", NSIG);
11951
11952 #ifndef JUST_NSIG
11953
11954 EOCP
11955
11956 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11957 {
11958         printf "#ifdef SIG"; printf $1; printf "\n"
11959         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11960         printf $1; printf ");\n"
11961         printf "#endif\n"
11962 }
11963 END {
11964         printf "#endif /* JUST_NSIG */\n";
11965         printf "}\n";
11966 }
11967 ' >>signal.c
11968 $cat >signal.awk <<'EOP'
11969 BEGIN { ndups = 0 }
11970 $1 ~ /^NSIG$/ { nsig = $2 }
11971 ($1 !~ /^NSIG$/) && (NF == 2) {
11972     if ($2 > maxsig) { maxsig = $2 }
11973     if (sig_name[$2]) {
11974         dup_name[ndups] = $1
11975         dup_num[ndups] = $2
11976         ndups++ 
11977     }
11978     else {
11979         sig_name[$2] = $1
11980         sig_num[$2] = $2
11981     }
11982 }
11983 END { 
11984     if (nsig == 0) {
11985         nsig = maxsig + 1
11986     }
11987     printf("NSIG %d\n", nsig);
11988     for (n = 1; n < nsig; n++) {
11989         if (sig_name[n]) {
11990             printf("%s %d\n", sig_name[n], sig_num[n])
11991         }
11992         else {
11993             printf("NUM%d %d\n", n, n) 
11994         }
11995     }
11996     for (n = 0; n < ndups; n++) {
11997         printf("%s %d\n", dup_name[n], dup_num[n])
11998     }
11999 }
12000 EOP
12001 $cat >signal_cmd <<EOS
12002 $startsh
12003 if $test -s signal.lst; then
12004     echo "Using your existing signal.lst file"
12005         exit 0
12006 fi
12007 xxx="$xxx"
12008 EOS
12009 $cat >>signal_cmd <<'EOS'
12010
12011 set signal
12012 if eval $compile_ok; then
12013         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12014 else
12015         echo "(I can't seem be able to compile the whole test program)" >&4
12016         echo "(I'll try it in little pieces.)" >&4
12017         set signal -DJUST_NSIG
12018         if eval $compile_ok; then
12019                 ./signal$_exe > signal.nsg
12020                 $cat signal.nsg
12021         else
12022                 echo "I can't seem to figure out how many signals you have." >&4
12023                 echo "Guessing 50." >&4
12024                 echo 'NSIG 50' > signal.nsg
12025         fi
12026         : Now look at all the signal names, one at a time.
12027         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12028                 $cat > signal.c <<EOCP
12029 #include <sys/types.h>
12030 #include <signal.h>
12031 #include <stdio.h>
12032 int main() {
12033 printf("$xx %d\n", SIG${xx});
12034 return 0;
12035 }
12036 EOCP
12037                 set signal
12038                 if eval $compile; then
12039                         echo "SIG${xx} found."
12040                         ./signal$_exe  >> signal.ls1
12041                 else
12042                         echo "SIG${xx} NOT found."
12043                 fi
12044         done
12045         if $test -s signal.ls1; then
12046                 $cat signal.nsg signal.ls1 |
12047                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12048         fi
12049
12050 fi
12051 if $test -s signal.lst; then
12052         :
12053 else
12054         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12055         echo 'kill -l' >signal
12056         set X `csh -f <signal`
12057         $rm -f signal
12058         shift
12059         case $# in
12060         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12061         esac
12062         echo $@ | $tr ' ' $trnl | \
12063             $awk '{ printf "%s %d\n", $1, ++s; }
12064                   END { printf "NSIG %d\n", ++s }' >signal.lst
12065 fi
12066 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12067 EOS
12068 chmod a+x signal_cmd
12069 $eunicefix signal_cmd
12070
12071 : generate list of signal names
12072 echo " "
12073 case "$sig_name_init" in
12074 '') doinit=yes ;;
12075 *)  case "$sig_num_init" in
12076     ''|*,*) doinit=yes ;;
12077     esac ;;
12078 esac
12079 case "$doinit" in
12080 yes)
12081         echo "Generating a list of signal names and numbers..." >&4
12082         . ./signal_cmd
12083         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12084         sig_name=`$awk 'BEGIN { printf "ZERO " }
12085                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12086         sig_num=`$awk  'BEGIN { printf "0 " }
12087                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12088         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12089                              !/^NSIG/   { printf "\"%s\", ", $1 }
12090                              END        { printf "0\n" }' signal.lst`
12091         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12092                              !/^NSIG/   { printf "%d, ", $2}
12093                              END        { printf "0\n"}' signal.lst`
12094         ;;
12095 esac
12096 echo "The following $sig_count signals are available:"
12097 echo " "
12098 echo $sig_name | $awk \
12099 'BEGIN { linelen = 0 }
12100 {
12101         for (i = 1; i <= NF; i++) {
12102                 name = "SIG" $i " "
12103                 linelen = linelen + length(name)
12104                 if (linelen > 70) {
12105                         printf "\n"
12106                         linelen = length(name)
12107                 }
12108                 printf "%s", name
12109         }
12110         printf "\n"
12111 }'
12112 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12113
12114 : see what type is used for signed size_t
12115 set ssize_t ssizetype int stdio.h sys/types.h
12116 eval $typedef
12117 dflt="$ssizetype"
12118 $cat > ssize.c <<EOM
12119 #include <stdio.h>
12120 #include <sys/types.h>
12121 #define Size_t $sizetype
12122 #define SSize_t $dflt
12123 int main()
12124 {
12125         if (sizeof(Size_t) == sizeof(SSize_t))
12126                 printf("$dflt\n");
12127         else if (sizeof(Size_t) == sizeof(int))
12128                 printf("int\n");
12129         else 
12130                 printf("long\n");
12131         exit(0);
12132 }
12133 EOM
12134 echo " "
12135 set ssize
12136 if eval $compile_ok && ./ssize > /dev/null; then
12137         ssizetype=`./ssize`
12138         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12139 else
12140         $cat >&4 <<EOM
12141 Help! I can't compile and run the ssize_t test program: please enlighten me!
12142 (This is probably a misconfiguration in your system or libraries, and
12143 you really ought to fix it.  Still, I'll try anyway.)
12144
12145 I need a type that is the same size as $sizetype, but is guaranteed to
12146 be signed.  Common values are ssize_t, int and long.
12147
12148 EOM
12149         rp="What signed type is the same size as $sizetype?"
12150         . ./myread
12151         ssizetype="$ans"
12152 fi
12153 $rm -f ssize ssize.*
12154
12155 : see what type of char stdio uses.
12156 echo " "
12157 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12158         echo "Your stdio uses unsigned chars." >&4
12159         stdchar="unsigned char"
12160 else
12161         echo "Your stdio uses signed chars." >&4
12162         stdchar="char"
12163 fi
12164
12165 : see if time exists
12166 echo " "
12167 if test "X$d_time" = X -o X"$timetype" = X; then
12168     if set time val -f d_time; eval $csym; $val; then
12169                 echo 'time() found.' >&4
12170                 val="$define"
12171                 rp="What is the type returned by time() on this system?"
12172                 set time_t timetype long stdio.h sys/types.h
12173                 eval $typedef_ask
12174     else
12175                 echo 'time() not found, hope that will do.' >&4
12176                 val="$undef"
12177                 timetype='int';
12178     fi
12179     set d_time
12180     eval $setvar
12181 fi
12182
12183 : see what type uids are declared as in the kernel
12184 echo " "
12185 echo "Looking for the type for user ids returned by getuid()."
12186 set uid_t uidtype xxx stdio.h sys/types.h
12187 eval $typedef
12188 case "$uidtype" in
12189 xxx)
12190         xxx=`./findhdr sys/user.h`
12191         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12192         case $1 in
12193         unsigned) dflt="$1 $2" ;;
12194         *) dflt="$1" ;;
12195         esac
12196         ;;
12197 *) dflt="$uidtype";;
12198 esac
12199 case "$uidtype" in
12200 uid_t)  echo "uid_t found." ;;
12201 *)      rp="What is the type for user ids returned by getuid()?"
12202         . ./myread
12203         uidtype="$ans"
12204         ;;
12205 esac
12206
12207 : see if dbm.h is available
12208 : see if dbmclose exists
12209 set dbmclose d_dbmclose
12210 eval $inlibc
12211
12212 case "$d_dbmclose" in
12213 $define)
12214         set dbm.h i_dbm
12215         eval $inhdr
12216         case "$i_dbm" in
12217         $define)
12218                 val="$undef"
12219                 set i_rpcsvcdbm
12220                 eval $setvar
12221                 ;;
12222         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12223                 eval $inhdr
12224                 ;;
12225         esac
12226         ;;
12227 *)      echo "We won't be including <dbm.h>"
12228         val="$undef"
12229         set i_dbm
12230         eval $setvar
12231         val="$undef"
12232         set i_rpcsvcdbm
12233         eval $setvar
12234         ;;
12235 esac
12236
12237 : see if this is a sys/file.h system
12238 val=''
12239 set sys/file.h val
12240 eval $inhdr
12241
12242 : do we need to include sys/file.h ?
12243 case "$val" in
12244 "$define")
12245         echo " "
12246         if $h_sysfile; then
12247                 val="$define"
12248                 echo "We'll be including <sys/file.h>." >&4
12249         else
12250                 val="$undef"
12251                 echo "We won't be including <sys/file.h>." >&4
12252         fi
12253         ;;
12254 *)
12255         h_sysfile=false
12256         ;;
12257 esac
12258 set i_sysfile
12259 eval $setvar
12260
12261 : see if fcntl.h is there
12262 val=''
12263 set fcntl.h val
12264 eval $inhdr
12265
12266 : see if we can include fcntl.h
12267 case "$val" in
12268 "$define")
12269         echo " "
12270         if $h_fcntl; then
12271                 val="$define"
12272                 echo "We'll be including <fcntl.h>." >&4
12273         else
12274                 val="$undef"
12275                 if $h_sysfile; then
12276         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12277                 else
12278                         echo "We won't be including <fcntl.h>." >&4
12279                 fi
12280         fi
12281         ;;
12282 *)
12283         h_fcntl=false
12284         val="$undef"
12285         ;;
12286 esac
12287 set i_fcntl
12288 eval $setvar
12289
12290 : see if locale.h is available
12291 set locale.h i_locale
12292 eval $inhdr
12293
12294 : see if mach cthreads are available
12295 if test "X$usethreads" = "X$define"; then
12296         set mach/cthreads.h i_machcthr
12297         eval $inhdr
12298 else
12299         i_machcthr="$undef"
12300 fi
12301
12302
12303
12304 : see if this is a math.h system
12305 set math.h i_math
12306 eval $inhdr
12307
12308 : see if this is a mntent.h system
12309 set mntent.h i_mntent
12310 eval $inhdr
12311
12312 : see if ndbm.h is available
12313 set ndbm.h t_ndbm
12314 eval $inhdr
12315 case "$t_ndbm" in
12316 $define)
12317         : see if dbm_open exists
12318         set dbm_open d_dbm_open
12319         eval $inlibc
12320         case "$d_dbm_open" in
12321         $undef)
12322                 t_ndbm="$undef"
12323                 echo "We won't be including <ndbm.h>"
12324                 ;;
12325         esac
12326         ;;
12327 esac
12328 val="$t_ndbm"
12329 set i_ndbm
12330 eval $setvar
12331
12332 : see if net/errno.h is available
12333 val=''
12334 set net/errno.h val
12335 eval $inhdr
12336
12337 : Unfortunately, it causes problems on some systems.  Arrgh.
12338 case "$val" in
12339 $define)
12340         cat > try.c <<'EOM'
12341 #include <stdio.h>
12342 #include <errno.h>
12343 #include <net/errno.h>
12344 int func()
12345 {
12346         return ENOTSOCK;
12347 }
12348 EOM
12349         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12350                 echo "We'll be including <net/errno.h>." >&4
12351         else
12352                 echo "We won't be including <net/errno.h>." >&4
12353                 val="$undef"
12354         fi
12355         $rm -f try.* try
12356         ;;
12357 esac
12358 set i_neterrno
12359 eval $setvar
12360
12361 : see if netinet/tcp.h is available
12362 set netinet/tcp.h i_netinettcp
12363 eval $inhdr
12364
12365 : see if this is a poll.h system
12366 set poll.h i_poll
12367 eval $inhdr
12368
12369 : get C preprocessor symbols handy
12370 echo " "
12371 $echo $n "Hmm... $c"
12372 echo $al | $tr ' ' $trnl >Cppsym.know
12373 $cat <<EOSS >Cppsym
12374 $startsh
12375 case "\$1" in
12376 -l) list=true
12377         shift
12378         ;;
12379 esac
12380 unknown=''
12381 case "\$list\$#" in
12382 1|2)
12383         for sym do
12384                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12385                         exit 0
12386                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12387                         :
12388                 else
12389                         unknown="\$unknown \$sym"
12390                 fi
12391         done
12392         set X \$unknown
12393         shift
12394         ;;
12395 esac
12396 case \$# in
12397 0) exit 1;;
12398 esac
12399 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12400 #ifdef \1\\
12401 exit 0; _ _ _ _\1\\      \1\\
12402 #endif\\
12403 /' >Cppsym\$\$
12404 echo "exit 1; _ _ _" >>Cppsym\$\$
12405 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12406 case "\$list" in
12407 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12408 *)
12409         sh Cppsym2\$\$
12410         status=\$?
12411         ;;
12412 esac
12413 $rm -f Cppsym\$\$ Cppsym2\$\$
12414 exit \$status
12415 EOSS
12416 chmod +x Cppsym
12417 $eunicefix Cppsym
12418 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12419
12420 : now check the C compiler for additional symbols
12421 postprocess_cc_v=''
12422 case "$osname" in
12423 aix) postprocess_cc_v="|$tr , ' '" ;;
12424 esac
12425 $cat >ccsym <<EOS
12426 $startsh
12427 $cat >tmp.c <<EOF
12428 extern int foo;
12429 EOF
12430 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12431 do
12432         case "\$i" in
12433         -D*) echo "\$i" | $sed 's/^-D//';;
12434         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12435         esac
12436 done
12437 $rm -f try.c
12438 EOS
12439 postprocess_cc_v=''
12440 chmod +x ccsym
12441 $eunicefix ccsym
12442 ./ccsym > ccsym1.raw
12443 if $test -s ccsym1.raw; then
12444        $sort ccsym1.raw | $uniq >ccsym.raw
12445 else
12446        mv ccsym1.raw ccsym.raw
12447 fi
12448
12449 $awk '/\=/ { print $0; next }
12450         { print $0"=1" }' ccsym.raw >ccsym.list
12451 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12452 $comm -13 ccsym.true ccsym.list >ccsym.own
12453 $comm -12 ccsym.true ccsym.list >ccsym.com
12454 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12455 also=''
12456 if $test -z ccsym.raw; then
12457         echo "Your C compiler doesn't seem to define any symbols!" >&4
12458         echo " "
12459         echo "However, your C preprocessor defines the following symbols:"
12460         $cat Cppsym.true
12461         ccsymbols=''
12462         cppsymbols=`$cat Cppsym.true`
12463         cppsymbols=`echo $cppsymbols`
12464         cppccsymbols="$cppsymbols"
12465 else
12466         if $test -s ccsym.com; then
12467                 echo "Your C compiler and pre-processor define these symbols:"
12468                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12469                 also='also '
12470                 symbols='ones'
12471                 cppccsymbols=`$cat ccsym.com`
12472                 cppccsymbols=`echo $cppccsymbols`
12473                 $test "$silent" || sleep 1
12474         fi
12475         if $test -s ccsym.cpp; then
12476                 $test "$also" && echo " "
12477                 echo "Your C pre-processor ${also}defines the following symbols:"
12478                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12479                 also='further '
12480                 cppsymbols=`$cat ccsym.cpp`
12481                 cppsymbols=`echo $cppsymbols`
12482                 $test "$silent" || sleep 1
12483         fi
12484         if $test -s ccsym.own; then
12485                 $test "$also" && echo " "
12486                 echo "Your C compiler ${also}defines the following cpp symbols:"
12487                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12488                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12489                 ccsymbols=`$cat ccsym.own`
12490                 ccsymbols=`echo $ccsymbols`
12491                 $test "$silent" || sleep 1
12492         fi
12493 fi
12494 $rm -f ccsym*
12495
12496 : see if this is a termio system
12497 val="$undef"
12498 val2="$undef"
12499 val3="$undef"
12500 if $test `./findhdr termios.h`; then
12501         set tcsetattr i_termios
12502         eval $inlibc
12503         val3="$i_termios"
12504 fi
12505 echo " "
12506 case "$val3" in
12507 "$define") echo "You have POSIX termios.h... good!" >&4;;
12508 *) if ./Cppsym pyr; then
12509                 case "`/bin/universe`" in
12510                 ucb) if $test `./findhdr sgtty.h`; then
12511                                 val2="$define"
12512                                 echo "<sgtty.h> found." >&4
12513                         else
12514                                 echo "System is pyramid with BSD universe."
12515                                 echo "<sgtty.h> not found--you could have problems." >&4
12516                         fi;;
12517                 *) if $test `./findhdr termio.h`; then
12518                                 val="$define"
12519                                 echo "<termio.h> found." >&4
12520                         else
12521                                 echo "System is pyramid with USG universe."
12522                                 echo "<termio.h> not found--you could have problems." >&4
12523                         fi;;
12524                 esac
12525         elif ./usg; then
12526                 if $test `./findhdr termio.h`; then
12527                         echo "<termio.h> found." >&4
12528                         val="$define"
12529                 elif $test `./findhdr sgtty.h`; then
12530                         echo "<sgtty.h> found." >&4
12531                         val2="$define"
12532                 else
12533 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12534                 fi
12535         else
12536                 if $test `./findhdr sgtty.h`; then
12537                         echo "<sgtty.h> found." >&4
12538                         val2="$define"
12539                 elif $test `./findhdr termio.h`; then
12540                         echo "<termio.h> found." >&4
12541                         val="$define"
12542                 else
12543 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12544                 fi
12545         fi;;
12546 esac
12547 set i_termio; eval $setvar
12548 val=$val2; set i_sgtty; eval $setvar
12549 val=$val3; set i_termios; eval $setvar
12550
12551 : see if this is a shadow.h system
12552 set shadow.h i_shadow
12553 eval $inhdr
12554
12555 : see if this is a socks.h system
12556 set socks.h i_socks
12557 eval $inhdr
12558
12559 : see if stdarg is available
12560 echo " "
12561 if $test `./findhdr stdarg.h`; then
12562         echo "<stdarg.h> found." >&4
12563         valstd="$define"
12564 else
12565         echo "<stdarg.h> NOT found." >&4
12566         valstd="$undef"
12567 fi
12568
12569 : see if varags is available
12570 echo " "
12571 if $test `./findhdr varargs.h`; then
12572         echo "<varargs.h> found." >&4
12573 else
12574         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12575 fi
12576
12577 : set up the varargs testing programs
12578 $cat > varargs.c <<EOP
12579 #ifdef I_STDARG
12580 #include <stdarg.h>
12581 #endif
12582 #ifdef I_VARARGS
12583 #include <varargs.h>
12584 #endif
12585
12586 #ifdef I_STDARG
12587 int f(char *p, ...)
12588 #else
12589 int f(va_alist)
12590 va_dcl
12591 #endif
12592 {
12593         va_list ap;
12594 #ifndef I_STDARG
12595         char *p;
12596 #endif
12597 #ifdef I_STDARG
12598         va_start(ap,p);
12599 #else
12600         va_start(ap);
12601         p = va_arg(ap, char *);
12602 #endif
12603         va_end(ap);
12604 }
12605 EOP
12606 $cat > varargs <<EOP
12607 $startsh
12608 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12609         echo "true"
12610 else
12611         echo "false"
12612 fi
12613 $rm -f varargs$_o
12614 EOP
12615 chmod +x varargs
12616
12617 : now check which varargs header should be included
12618 echo " "
12619 i_varhdr=''
12620 case "$valstd" in
12621 "$define")
12622         if `./varargs I_STDARG`; then
12623                 val='stdarg.h'
12624         elif `./varargs I_VARARGS`; then
12625                 val='varargs.h'
12626         fi
12627         ;;
12628 *)
12629         if `./varargs I_VARARGS`; then
12630                 val='varargs.h'
12631         fi
12632         ;;
12633 esac
12634 case "$val" in
12635 '')
12636 echo "I could not find the definition for va_dcl... You have problems..." >&4
12637         val="$undef"; set i_stdarg; eval $setvar
12638         val="$undef"; set i_varargs; eval $setvar
12639         ;;
12640 *) 
12641         set i_varhdr
12642         eval $setvar
12643         case "$i_varhdr" in
12644         stdarg.h)
12645                 val="$define"; set i_stdarg; eval $setvar
12646                 val="$undef"; set i_varargs; eval $setvar
12647                 ;;
12648         varargs.h)
12649                 val="$undef"; set i_stdarg; eval $setvar
12650                 val="$define"; set i_varargs; eval $setvar
12651                 ;;
12652         esac
12653         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12654 esac
12655 $rm -f varargs*
12656
12657 : see if stddef is available
12658 set stddef.h i_stddef
12659 eval $inhdr
12660
12661 : see if sys/access.h is available
12662 set sys/access.h i_sysaccess
12663 eval $inhdr
12664
12665 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12666 set sys/filio.h i_sysfilio
12667 eval $inhdr
12668 echo " "
12669 if $test `./findhdr sys/ioctl.h`; then
12670         val="$define"
12671         echo '<sys/ioctl.h> found.' >&4
12672 else
12673         val="$undef"
12674         if $test $i_sysfilio = "$define"; then
12675             echo '<sys/ioctl.h> NOT found.' >&4
12676         else
12677                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12678                 $test $i_termio = "$define" && xxx="termio.h"
12679                 $test $i_termios = "$define" && xxx="termios.h"
12680 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12681         fi
12682 fi
12683 set i_sysioctl
12684 eval $setvar
12685
12686 : see if sys/resource.h has to be included
12687 set sys/resource.h i_sysresrc
12688 eval $inhdr
12689
12690 : see if sys/security.h is available
12691 set sys/security.h i_syssecrt
12692 eval $inhdr
12693
12694 : see if this is a sys/statvfs.h system
12695 set sys/statvfs.h i_sysstatvfs
12696 eval $inhdr
12697
12698 : see if this is a sys/un.h system
12699 set sys/un.h i_sysun
12700 eval $inhdr
12701
12702 : see if this is a syswait system
12703 set sys/wait.h i_syswait
12704 eval $inhdr
12705
12706 : see if this is an utime system
12707 set utime.h i_utime
12708 eval $inhdr
12709
12710 : see if this is a values.h system
12711 set values.h i_values
12712 eval $inhdr
12713
12714 : see if this is a vfork system
12715 case "$d_vfork" in
12716 "$define")
12717         set vfork.h i_vfork
12718         eval $inhdr
12719         ;;
12720 *)
12721         i_vfork="$undef"
12722         ;;
12723 esac
12724
12725 : see if gdbm.h is available
12726 set gdbm.h t_gdbm
12727 eval $inhdr
12728 case "$t_gdbm" in
12729 $define)
12730         : see if gdbm_open exists
12731         set gdbm_open d_gdbm_open
12732         eval $inlibc
12733         case "$d_gdbm_open" in
12734         $undef)
12735                 t_gdbm="$undef"
12736                 echo "We won't be including <gdbm.h>"
12737                 ;;
12738         esac
12739         ;;
12740 esac
12741 val="$t_gdbm"
12742 set i_gdbm
12743 eval $setvar
12744
12745 echo " "
12746 echo "Looking for extensions..." >&4
12747 : If we are using the old config.sh, known_extensions may contain
12748 : old or inaccurate or duplicate values.
12749 known_extensions=''
12750 nonxs_extensions=''
12751 : We do not use find because it might not be available.
12752 : We do not just use MANIFEST because the user may have dropped
12753 : some additional extensions into the source tree and expect them
12754 : to be built.
12755
12756 : Function to recursively find available extensions, ignoring DynaLoader
12757 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12758 find_extensions='
12759     for xxx in *; do
12760        case "$xxx" in
12761            DynaLoader|dynaload) ;;
12762            *)
12763            if $test -f $xxx/$xxx.xs; then
12764                known_extensions="$known_extensions $1$xxx";
12765            elif $test -f $xxx/Makefile.PL; then
12766                nonxs_extensions="$nonxs_extensions $1$xxx";
12767            else
12768                if $test -d $xxx -a $# -lt 10; then
12769                    set $1$xxx/ $*;
12770                    cd $xxx;
12771                    eval $find_extensions;
12772                    cd ..;
12773                    shift;
12774                fi
12775            fi
12776            ;;
12777        esac
12778     done'
12779 tdir=`pwd`
12780 cd $rsrc/ext
12781 set X
12782 shift
12783 eval $find_extensions
12784 set X $nonxs_extensions
12785 shift
12786 nonxs_extensions="$*"
12787 set X $known_extensions
12788 shift
12789 known_extensions="$*"
12790 cd $tdir
12791
12792 : Now see which are supported on this system.
12793 avail_ext=''
12794 for xxx in $known_extensions ; do
12795         case "$xxx" in
12796         DB_File|db_file)
12797                 case "$i_db" in
12798                 $define) avail_ext="$avail_ext $xxx" ;;
12799                 esac
12800                 ;;
12801         GDBM_File|gdbm_fil)
12802                 case "$i_gdbm" in 
12803                 $define) avail_ext="$avail_ext $xxx" ;;
12804                 esac
12805                 ;;
12806         NDBM_File|ndbm_fil)
12807                 case "$i_ndbm" in
12808                 $define) avail_ext="$avail_ext $xxx" ;;
12809                 esac
12810                 ;;
12811         ODBM_File|odbm_fil) 
12812                 case "${i_dbm}${i_rpcsvcdbm}" in
12813                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12814                 esac
12815                 ;;
12816         POSIX|posix)
12817                 case "$useposix" in
12818                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12819                 esac
12820                 ;;
12821         Opcode|opcode)
12822                 case "$useopcode" in
12823                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12824                 esac
12825                 ;;
12826         Socket|socket)
12827                 case "$d_socket" in 
12828                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12829                 esac
12830                 ;;
12831         Thread|thread)
12832                 case "$usethreads" in 
12833                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12834                 esac
12835                 ;;
12836         IPC/SysV|ipc/sysv)
12837                 : XXX Do we need a useipcsysv variable here
12838                 case "${d_msg}${d_sem}${d_shm}" in 
12839                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12840                 esac
12841                 ;;
12842         *)      avail_ext="$avail_ext $xxx"
12843                 ;;
12844         esac
12845 done
12846
12847 set X $avail_ext
12848 shift
12849 avail_ext="$*"
12850
12851 : Now see which nonxs extensions are supported on this system.
12852 : For now assume all are.
12853 nonxs_ext=''
12854 for xxx in $nonxs_extensions ; do
12855         case "$xxx" in
12856         *)      nonxs_ext="$nonxs_ext $xxx"
12857                 ;;
12858         esac
12859 done
12860
12861 set X $nonxs_ext
12862 shift
12863 nonxs_ext="$*"
12864
12865 case $usedl in
12866 $define)
12867         $cat <<EOM
12868 A number of extensions are supplied with $package.  You may choose to
12869 compile these extensions for dynamic loading (the default), compile
12870 them into the $package executable (static loading), or not include
12871 them at all.  Answer "none" to include no extensions.
12872 Note that DynaLoader is always built and need not be mentioned here.
12873
12874 EOM
12875         case "$dynamic_ext" in
12876         '') dflt="$avail_ext" ;;
12877         *)      dflt="$dynamic_ext"
12878                 # Perhaps we are reusing an old out-of-date config.sh.
12879                 case "$hint" in
12880                 previous)
12881                         if test X"$dynamic_ext" != X"$avail_ext"; then
12882                                 $cat <<EOM
12883 NOTICE:  Your previous config.sh list may be incorrect. 
12884 The extensions now available to you are 
12885         ${avail_ext}
12886 but the default list from your previous config.sh is
12887         ${dynamic_ext} 
12888
12889 EOM
12890                         fi
12891                         ;;
12892                 esac
12893                 ;;
12894         esac
12895         case "$dflt" in
12896         '')     dflt=none;;
12897         esac
12898         rp="What extensions do you wish to load dynamically?"
12899         . ./myread
12900         case "$ans" in
12901         none) dynamic_ext=' ' ;;
12902         *) dynamic_ext="$ans" ;;
12903         esac
12904
12905         case "$static_ext" in
12906         '')
12907                 : Exclude those already listed in dynamic linking
12908                 dflt=''
12909                 for xxx in $avail_ext; do
12910                         case " $dynamic_ext " in
12911                         *" $xxx "*) ;;
12912                         *) dflt="$dflt $xxx" ;;
12913                         esac
12914                 done
12915                 set X $dflt
12916                 shift
12917                 dflt="$*"
12918                 ;;
12919         *)  dflt="$static_ext" 
12920                 ;;
12921         esac
12922
12923         case "$dflt" in
12924         '')     dflt=none;;
12925         esac
12926         rp="What extensions do you wish to load statically?"
12927         . ./myread
12928         case "$ans" in
12929         none) static_ext=' ' ;;
12930         *) static_ext="$ans" ;;
12931         esac
12932         ;;
12933 *)
12934         $cat <<EOM
12935 A number of extensions are supplied with $package.  Answer "none" 
12936 to include no extensions. 
12937 Note that DynaLoader is always built and need not be mentioned here.
12938
12939 EOM
12940         case "$static_ext" in
12941         '') dflt="$avail_ext" ;;
12942         *)      dflt="$static_ext"
12943                 # Perhaps we are reusing an old out-of-date config.sh.
12944                 case "$hint" in
12945                 previous)
12946                         if test X"$static_ext" != X"$avail_ext"; then
12947                                 $cat <<EOM
12948 NOTICE:  Your previous config.sh list may be incorrect. 
12949 The extensions now available to you are 
12950         ${avail_ext}
12951 but the default list from your previous config.sh is
12952         ${static_ext} 
12953
12954 EOM
12955                         fi
12956                         ;;
12957                 esac
12958                 ;;
12959         esac
12960         : Exclude those that are not xs extensions
12961         case "$dflt" in
12962         '')     dflt=none;;
12963         esac
12964         rp="What extensions do you wish to include?"
12965         . ./myread
12966         case "$ans" in
12967         none) static_ext=' ' ;;
12968         *) static_ext="$ans" ;;
12969         esac
12970         ;;
12971 esac
12972
12973 set X $dynamic_ext $static_ext $nonxs_ext
12974 shift
12975 extensions="$*"
12976
12977 : Remove build directory name from cppstdin so it can be used from
12978 : either the present location or the final installed location.
12979 echo " "
12980 : Get out of the UU directory to get correct path name.
12981 cd ..
12982 case "$cppstdin" in
12983 `pwd`/cppstdin)
12984         echo "Stripping down cppstdin path name"
12985         cppstdin=cppstdin
12986         ;;
12987 esac
12988 cd UU
12989
12990 : end of configuration questions
12991 echo " "
12992 echo "End of configuration questions."
12993 echo " "
12994
12995 : back to where it started
12996 if test -d ../UU; then
12997         cd ..
12998 fi
12999
13000 : configuration may be patched via a 'config.over' file
13001 if $test -f config.over; then
13002         echo " "
13003         dflt=y
13004         rp='I see a config.over file.  Do you wish to load it?'
13005         . UU/myread
13006         case "$ans" in
13007         n*) echo "OK, I'll ignore it.";;
13008         *)      . ./config.over
13009                 echo "Configuration override changes have been loaded."
13010                 ;;
13011         esac
13012 fi
13013
13014 : in case they want portability, strip down executable paths
13015 case "$d_portable" in
13016 "$define")
13017         echo " "
13018         echo "Stripping down executable paths..." >&4
13019         for file in $loclist $trylist; do
13020                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
13021                         eval $file="\$file"
13022                 fi
13023         done
13024         ;;
13025 esac
13026
13027 : create config.sh file
13028 echo " "
13029 echo "Creating config.sh..." >&4
13030 $spitshell <<EOT >config.sh
13031 $startsh
13032 #
13033 # This file was produced by running the Configure script. It holds all the
13034 # definitions figured out by Configure. Should you modify one of these values,
13035 # do not forget to propagate your changes by running "Configure -der". You may
13036 # instead choose to run each of the .SH files by yourself, or "Configure -S".
13037 #
13038
13039 # Package name      : $package
13040 # Source directory  : $src
13041 # Configuration time: $cf_time
13042 # Configured by     : $cf_by
13043 # Target system     : $myuname
13044
13045 Author='$Author'
13046 Date='$Date'
13047 Header='$Header'
13048 Id='$Id'
13049 Locker='$Locker'
13050 Log='$Log'
13051 Mcc='$Mcc'
13052 RCSfile='$RCSfile'
13053 Revision='$Revision'
13054 Source='$Source'
13055 State='$State'
13056 _a='$_a'
13057 _exe='$_exe'
13058 _o='$_o'
13059 afs='$afs'
13060 alignbytes='$alignbytes'
13061 ansi2knr='$ansi2knr'
13062 aphostname='$aphostname'
13063 apiversion='$apiversion'
13064 ar='$ar'
13065 archlib='$archlib'
13066 archlibexp='$archlibexp'
13067 archname64='$archname64'
13068 archname='$archname'
13069 archobjs='$archobjs'
13070 awk='$awk'
13071 baserev='$baserev'
13072 bash='$bash'
13073 bin='$bin'
13074 binexp='$binexp'
13075 bison='$bison'
13076 byacc='$byacc'
13077 byteorder='$byteorder'
13078 c='$c'
13079 castflags='$castflags'
13080 cat='$cat'
13081 cc='$cc'
13082 cccdlflags='$cccdlflags'
13083 ccdlflags='$ccdlflags'
13084 ccflags='$ccflags'
13085 ccsymbols='$ccsymbols'
13086 cf_by='$cf_by'
13087 cf_email='$cf_email'
13088 cf_time='$cf_time'
13089 chgrp='$chgrp'
13090 chmod='$chmod'
13091 chown='$chown'
13092 clocktype='$clocktype'
13093 comm='$comm'
13094 compress='$compress'
13095 contains='$contains'
13096 cp='$cp'
13097 cpio='$cpio'
13098 cpp='$cpp'
13099 cpp_stuff='$cpp_stuff'
13100 cppccsymbols='$cppccsymbols'
13101 cppflags='$cppflags'
13102 cpplast='$cpplast'
13103 cppminus='$cppminus'
13104 cpprun='$cpprun'
13105 cppstdin='$cppstdin'
13106 cppsymbols='$cppsymbols'
13107 crosscompile='$crosscompile'
13108 cryptlib='$cryptlib'
13109 csh='$csh'
13110 d_Gconvert='$d_Gconvert'
13111 d_access='$d_access'
13112 d_accessx='$d_accessx'
13113 d_alarm='$d_alarm'
13114 d_archlib='$d_archlib'
13115 d_attribut='$d_attribut'
13116 d_bcmp='$d_bcmp'
13117 d_bcopy='$d_bcopy'
13118 d_bsd='$d_bsd'
13119 d_bsdgetpgrp='$d_bsdgetpgrp'
13120 d_bsdsetpgrp='$d_bsdsetpgrp'
13121 d_bzero='$d_bzero'
13122 d_casti32='$d_casti32'
13123 d_castneg='$d_castneg'
13124 d_charvspr='$d_charvspr'
13125 d_chown='$d_chown'
13126 d_chroot='$d_chroot'
13127 d_chsize='$d_chsize'
13128 d_closedir='$d_closedir'
13129 d_cmsghdr_s='$d_cmsghdr_s'
13130 d_const='$d_const'
13131 d_crypt='$d_crypt'
13132 d_csh='$d_csh'
13133 d_cuserid='$d_cuserid'
13134 d_dbl_dig='$d_dbl_dig'
13135 d_dbmclose64='$d_dbmclose64'
13136 d_dbminit64='$d_dbminit64'
13137 d_delete64='$d_delete64'
13138 d_difftime='$d_difftime'
13139 d_dirent64_s='$d_dirent64_s'
13140 d_dirnamlen='$d_dirnamlen'
13141 d_dlerror='$d_dlerror'
13142 d_dlopen='$d_dlopen'
13143 d_dlsymun='$d_dlsymun'
13144 d_dosuid='$d_dosuid'
13145 d_drand48proto='$d_drand48proto'
13146 d_dup2='$d_dup2'
13147 d_eaccess='$d_eaccess'
13148 d_endgrent='$d_endgrent'
13149 d_endhent='$d_endhent'
13150 d_endnent='$d_endnent'
13151 d_endpent='$d_endpent'
13152 d_endpwent='$d_endpwent'
13153 d_endsent='$d_endsent'
13154 d_endspent='$d_endspent'
13155 d_eofnblk='$d_eofnblk'
13156 d_eunice='$d_eunice'
13157 d_fchmod='$d_fchmod'
13158 d_fchown='$d_fchown'
13159 d_fcntl='$d_fcntl'
13160 d_fd_macros='$d_fd_macros'
13161 d_fd_set='$d_fd_set'
13162 d_fds_bits='$d_fds_bits'
13163 d_fetch64='$d_fetch64'
13164 d_fgetpos64='$d_fgetpos64'
13165 d_fgetpos='$d_fgetpos'
13166 d_firstkey64='$d_firstkey64'
13167 d_flexfnam='$d_flexfnam'
13168 d_flock64_s='$d_flock64_s'
13169 d_flock='$d_flock'
13170 d_fopen64='$d_fopen64'
13171 d_fork='$d_fork'
13172 d_fpathconf='$d_fpathconf'
13173 d_freopen64='$d_freopen64'
13174 d_fseek64='$d_fseek64'
13175 d_fseeko64='$d_fseeko64'
13176 d_fseeko='$d_fseeko'
13177 d_fsetpos64='$d_fsetpos64'
13178 d_fsetpos='$d_fsetpos'
13179 d_fstat64='$d_fstat64'
13180 d_fstatfs='$d_fstatfs'
13181 d_fstatvfs='$d_fstatvfs'
13182 d_ftell64='$d_ftell64'
13183 d_ftello64='$d_ftello64'
13184 d_ftello='$d_ftello'
13185 d_ftime='$d_ftime'
13186 d_ftruncate64='$d_ftruncate64'
13187 d_getgrent='$d_getgrent'
13188 d_getgrps='$d_getgrps'
13189 d_gethbyaddr='$d_gethbyaddr'
13190 d_gethbyname='$d_gethbyname'
13191 d_gethent='$d_gethent'
13192 d_gethname='$d_gethname'
13193 d_gethostprotos='$d_gethostprotos'
13194 d_getlogin='$d_getlogin'
13195 d_getmntent='$d_getmntent'
13196 d_getnbyaddr='$d_getnbyaddr'
13197 d_getnbyname='$d_getnbyname'
13198 d_getnent='$d_getnent'
13199 d_getnetprotos='$d_getnetprotos'
13200 d_getpbyname='$d_getpbyname'
13201 d_getpbynumber='$d_getpbynumber'
13202 d_getpent='$d_getpent'
13203 d_getpgid='$d_getpgid'
13204 d_getpgrp2='$d_getpgrp2'
13205 d_getpgrp='$d_getpgrp'
13206 d_getppid='$d_getppid'
13207 d_getprior='$d_getprior'
13208 d_getprotoprotos='$d_getprotoprotos'
13209 d_getpwent='$d_getpwent'
13210 d_getsbyname='$d_getsbyname'
13211 d_getsbyport='$d_getsbyport'
13212 d_getsent='$d_getsent'
13213 d_getservprotos='$d_getservprotos'
13214 d_getspent='$d_getspent'
13215 d_getspnam='$d_getspnam'
13216 d_gettimeod='$d_gettimeod'
13217 d_gnulibc='$d_gnulibc'
13218 d_grpasswd='$d_grpasswd'
13219 d_hasmntopt='$d_hasmntopt'
13220 d_htonl='$d_htonl'
13221 d_index='$d_index'
13222 d_inetaton='$d_inetaton'
13223 d_ino64_t='$d_ino64_t'
13224 d_int64t='$d_int64t'
13225 d_iovec_s='$d_iovec_s'
13226 d_isascii='$d_isascii'
13227 d_killpg='$d_killpg'
13228 d_lchown='$d_lchown'
13229 d_link='$d_link'
13230 d_llseek='$d_llseek'
13231 d_locconv='$d_locconv'
13232 d_lockf64='$d_lockf64'
13233 d_lockf='$d_lockf'
13234 d_longdbl='$d_longdbl'
13235 d_longlong='$d_longlong'
13236 d_lseek64='$d_lseek64'
13237 d_lstat64='$d_lstat64'
13238 d_lstat='$d_lstat'
13239 d_madvise='$d_madvise'
13240 d_mblen='$d_mblen'
13241 d_mbstowcs='$d_mbstowcs'
13242 d_mbtowc='$d_mbtowc'
13243 d_memchr='$d_memchr'
13244 d_memcmp='$d_memcmp'
13245 d_memcpy='$d_memcpy'
13246 d_memmove='$d_memmove'
13247 d_memset='$d_memset'
13248 d_mkdir='$d_mkdir'
13249 d_mkfifo='$d_mkfifo'
13250 d_mktime='$d_mktime'
13251 d_mmap='$d_mmap'
13252 d_mprotect='$d_mprotect'
13253 d_msg='$d_msg'
13254 d_msg_ctrunc='$d_msg_ctrunc'
13255 d_msg_dontroute='$d_msg_dontroute'
13256 d_msg_oob='$d_msg_oob'
13257 d_msg_peek='$d_msg_peek'
13258 d_msg_proxy='$d_msg_proxy'
13259 d_msgctl='$d_msgctl'
13260 d_msgget='$d_msgget'
13261 d_msghdr_s='$d_msghdr_s'
13262 d_msgrcv='$d_msgrcv'
13263 d_msgsnd='$d_msgsnd'
13264 d_msync='$d_msync'
13265 d_munmap='$d_munmap'
13266 d_mymalloc='$d_mymalloc'
13267 d_nextkey64='$d_nextkey64'
13268 d_nice='$d_nice'
13269 d_off64_t='$d_off64_t'
13270 d_offset_t='$d_offset_t'
13271 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13272 d_oldpthreads='$d_oldpthreads'
13273 d_oldsock='$d_oldsock'
13274 d_open3='$d_open3'
13275 d_open64='$d_open64'
13276 d_opendir64='$d_opendir64'
13277 d_pathconf='$d_pathconf'
13278 d_pause='$d_pause'
13279 d_phostname='$d_phostname'
13280 d_pipe='$d_pipe'
13281 d_poll='$d_poll'
13282 d_portable='$d_portable'
13283 d_pthread_yield='$d_pthread_yield'
13284 d_pwage='$d_pwage'
13285 d_pwchange='$d_pwchange'
13286 d_pwclass='$d_pwclass'
13287 d_pwcomment='$d_pwcomment'
13288 d_pwexpire='$d_pwexpire'
13289 d_pwgecos='$d_pwgecos'
13290 d_pwpasswd='$d_pwpasswd'
13291 d_pwquota='$d_pwquota'
13292 d_readdir64='$d_readdir64'
13293 d_readdir='$d_readdir'
13294 d_readlink='$d_readlink'
13295 d_readv='$d_readv'
13296 d_recvmsg='$d_recvmsg'
13297 d_rename='$d_rename'
13298 d_rewinddir='$d_rewinddir'
13299 d_rmdir='$d_rmdir'
13300 d_safebcpy='$d_safebcpy'
13301 d_safemcpy='$d_safemcpy'
13302 d_sanemcmp='$d_sanemcmp'
13303 d_sched_yield='$d_sched_yield'
13304 d_scm_rights='$d_scm_rights'
13305 d_seekdir64='$d_seekdir64'
13306 d_seekdir='$d_seekdir'
13307 d_select='$d_select'
13308 d_sem='$d_sem'
13309 d_semctl='$d_semctl'
13310 d_semctl_semid_ds='$d_semctl_semid_ds'
13311 d_semctl_semun='$d_semctl_semun'
13312 d_semget='$d_semget'
13313 d_semop='$d_semop'
13314 d_sendmsg='$d_sendmsg'
13315 d_setegid='$d_setegid'
13316 d_seteuid='$d_seteuid'
13317 d_setgrent='$d_setgrent'
13318 d_setgrps='$d_setgrps'
13319 d_sethent='$d_sethent'
13320 d_setlinebuf='$d_setlinebuf'
13321 d_setlocale='$d_setlocale'
13322 d_setnent='$d_setnent'
13323 d_setpent='$d_setpent'
13324 d_setpgid='$d_setpgid'
13325 d_setpgrp2='$d_setpgrp2'
13326 d_setpgrp='$d_setpgrp'
13327 d_setprior='$d_setprior'
13328 d_setpwent='$d_setpwent'
13329 d_setregid='$d_setregid'
13330 d_setresgid='$d_setresgid'
13331 d_setresuid='$d_setresuid'
13332 d_setreuid='$d_setreuid'
13333 d_setrgid='$d_setrgid'
13334 d_setruid='$d_setruid'
13335 d_setsent='$d_setsent'
13336 d_setsid='$d_setsid'
13337 d_setspent='$d_setspent'
13338 d_setvbuf='$d_setvbuf'
13339 d_sfio='$d_sfio'
13340 d_shm='$d_shm'
13341 d_shmat='$d_shmat'
13342 d_shmatprototype='$d_shmatprototype'
13343 d_shmctl='$d_shmctl'
13344 d_shmdt='$d_shmdt'
13345 d_shmget='$d_shmget'
13346 d_sigaction='$d_sigaction'
13347 d_sigsetjmp='$d_sigsetjmp'
13348 d_socket='$d_socket'
13349 d_sockpair='$d_sockpair'
13350 d_stat64='$d_stat64'
13351 d_statblks='$d_statblks'
13352 d_statfs='$d_statfs'
13353 d_statfsflags='$d_statfsflags'
13354 d_statvfs='$d_statvfs'
13355 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13356 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13357 d_stdio_stream_array='$d_stdio_stream_array'
13358 d_stdiobase='$d_stdiobase'
13359 d_stdstdio='$d_stdstdio'
13360 d_store64='$d_store64'
13361 d_strchr='$d_strchr'
13362 d_strcoll='$d_strcoll'
13363 d_strctcpy='$d_strctcpy'
13364 d_strerrm='$d_strerrm'
13365 d_strerror='$d_strerror'
13366 d_strtod='$d_strtod'
13367 d_strtol='$d_strtol'
13368 d_strtoul='$d_strtoul'
13369 d_strxfrm='$d_strxfrm'
13370 d_suidsafe='$d_suidsafe'
13371 d_symlink='$d_symlink'
13372 d_syscall='$d_syscall'
13373 d_sysconf='$d_sysconf'
13374 d_sysernlst='$d_sysernlst'
13375 d_syserrlst='$d_syserrlst'
13376 d_system='$d_system'
13377 d_tcgetpgrp='$d_tcgetpgrp'
13378 d_tcsetpgrp='$d_tcsetpgrp'
13379 d_telldir64='$d_telldir64'
13380 d_telldir='$d_telldir'
13381 d_telldirproto='$d_telldirproto'
13382 d_time='$d_time'
13383 d_times='$d_times'
13384 d_tmpfile64='$d_tmpfile64'
13385 d_truncate64='$d_truncate64'
13386 d_truncate='$d_truncate'
13387 d_tzname='$d_tzname'
13388 d_umask='$d_umask'
13389 d_uname='$d_uname'
13390 d_union_semun='$d_union_semun'
13391 d_vendorlib='$d_vendorlib'
13392 d_vfork='$d_vfork'
13393 d_void_closedir='$d_void_closedir'
13394 d_voidsig='$d_voidsig'
13395 d_voidtty='$d_voidtty'
13396 d_volatile='$d_volatile'
13397 d_vprintf='$d_vprintf'
13398 d_wait4='$d_wait4'
13399 d_waitpid='$d_waitpid'
13400 d_wcstombs='$d_wcstombs'
13401 d_wctomb='$d_wctomb'
13402 d_writev='$d_writev'
13403 d_xenix='$d_xenix'
13404 date='$date'
13405 db_hashtype='$db_hashtype'
13406 db_prefixtype='$db_prefixtype'
13407 defvoidused='$defvoidused'
13408 direntrytype='$direntrytype'
13409 dlext='$dlext'
13410 dlsrc='$dlsrc'
13411 doublesize='$doublesize'
13412 drand01='$drand01'
13413 dynamic_ext='$dynamic_ext'
13414 eagain='$eagain'
13415 ebcdic='$ebcdic'
13416 echo='$echo'
13417 egrep='$egrep'
13418 emacs='$emacs'
13419 eunicefix='$eunicefix'
13420 exe_ext='$exe_ext'
13421 expr='$expr'
13422 extensions='$extensions'
13423 fflushNULL='$fflushNULL'
13424 fflushall='$fflushall'
13425 find='$find'
13426 firstmakefile='$firstmakefile'
13427 flex='$flex'
13428 fpostype='$fpostype'
13429 freetype='$freetype'
13430 full_ar='$full_ar'
13431 full_csh='$full_csh'
13432 full_sed='$full_sed'
13433 gccversion='$gccversion'
13434 gidtype='$gidtype'
13435 glibpth='$glibpth'
13436 grep='$grep'
13437 groupcat='$groupcat'
13438 groupstype='$groupstype'
13439 gzip='$gzip'
13440 h_fcntl='$h_fcntl'
13441 h_sysfile='$h_sysfile'
13442 hint='$hint'
13443 hostcat='$hostcat'
13444 huge='$huge'
13445 i_arpainet='$i_arpainet'
13446 i_bsdioctl='$i_bsdioctl'
13447 i_db='$i_db'
13448 i_dbm='$i_dbm'
13449 i_dirent='$i_dirent'
13450 i_dld='$i_dld'
13451 i_dlfcn='$i_dlfcn'
13452 i_fcntl='$i_fcntl'
13453 i_float='$i_float'
13454 i_gdbm='$i_gdbm'
13455 i_grp='$i_grp'
13456 i_inttypes='$i_inttypes'
13457 i_limits='$i_limits'
13458 i_locale='$i_locale'
13459 i_machcthr='$i_machcthr'
13460 i_malloc='$i_malloc'
13461 i_math='$i_math'
13462 i_memory='$i_memory'
13463 i_mntent='$i_mntent'
13464 i_ndbm='$i_ndbm'
13465 i_netdb='$i_netdb'
13466 i_neterrno='$i_neterrno'
13467 i_netinettcp='$i_netinettcp'
13468 i_niin='$i_niin'
13469 i_poll='$i_poll'
13470 i_pthread='$i_pthread'
13471 i_pwd='$i_pwd'
13472 i_rpcsvcdbm='$i_rpcsvcdbm'
13473 i_sfio='$i_sfio'
13474 i_sgtty='$i_sgtty'
13475 i_shadow='$i_shadow'
13476 i_socks='$i_socks'
13477 i_stdarg='$i_stdarg'
13478 i_stddef='$i_stddef'
13479 i_stdlib='$i_stdlib'
13480 i_string='$i_string'
13481 i_sysaccess='$i_sysaccess'
13482 i_sysdir='$i_sysdir'
13483 i_sysfile='$i_sysfile'
13484 i_sysfilio='$i_sysfilio'
13485 i_sysin='$i_sysin'
13486 i_sysioctl='$i_sysioctl'
13487 i_sysmman='$i_sysmman'
13488 i_sysmount='$i_sysmount'
13489 i_sysndir='$i_sysndir'
13490 i_sysparam='$i_sysparam'
13491 i_sysresrc='$i_sysresrc'
13492 i_syssecrt='$i_syssecrt'
13493 i_sysselct='$i_sysselct'
13494 i_syssockio='$i_syssockio'
13495 i_sysstat='$i_sysstat'
13496 i_sysstatvfs='$i_sysstatvfs'
13497 i_systime='$i_systime'
13498 i_systimek='$i_systimek'
13499 i_systimes='$i_systimes'
13500 i_systypes='$i_systypes'
13501 i_sysuio='$i_sysuio'
13502 i_sysun='$i_sysun'
13503 i_syswait='$i_syswait'
13504 i_termio='$i_termio'
13505 i_termios='$i_termios'
13506 i_time='$i_time'
13507 i_unistd='$i_unistd'
13508 i_utime='$i_utime'
13509 i_values='$i_values'
13510 i_varargs='$i_varargs'
13511 i_varhdr='$i_varhdr'
13512 i_vfork='$i_vfork'
13513 ignore_versioned_solibs='$ignore_versioned_solibs'
13514 incpath='$incpath'
13515 inews='$inews'
13516 installarchlib='$installarchlib'
13517 installbin='$installbin'
13518 installman1dir='$installman1dir'
13519 installman3dir='$installman3dir'
13520 installprefix='$installprefix'
13521 installprefixexp='$installprefixexp'
13522 installprivlib='$installprivlib'
13523 installscript='$installscript'
13524 installsitearch='$installsitearch'
13525 installsitelib='$installsitelib'
13526 installstyle='$installstyle'
13527 installusrbinperl='$installusrbinperl'
13528 installvendorlib='$installvendorlib'
13529 intsize='$intsize'
13530 known_extensions='$known_extensions'
13531 ksh='$ksh'
13532 large='$large'
13533 ld='$ld'
13534 lddlflags='$lddlflags'
13535 ldflags='$ldflags'
13536 ldlibpthname='$ldlibpthname'
13537 less='$less'
13538 lib_ext='$lib_ext'
13539 libc='$libc'
13540 libperl='$libperl'
13541 libpth='$libpth'
13542 libs='$libs'
13543 libswanted='$libswanted'
13544 line='$line'
13545 lint='$lint'
13546 lkflags='$lkflags'
13547 ln='$ln'
13548 lns='$lns'
13549 locincpth='$locincpth'
13550 loclibpth='$loclibpth'
13551 longdblsize='$longdblsize'
13552 longlongsize='$longlongsize'
13553 longsize='$longsize'
13554 lp='$lp'
13555 lpr='$lpr'
13556 ls='$ls'
13557 lseeksize='$lseeksize'
13558 lseektype='$lseektype'
13559 mail='$mail'
13560 mailx='$mailx'
13561 make='$make'
13562 make_set_make='$make_set_make'
13563 mallocobj='$mallocobj'
13564 mallocsrc='$mallocsrc'
13565 malloctype='$malloctype'
13566 man1dir='$man1dir'
13567 man1direxp='$man1direxp'
13568 man1ext='$man1ext'
13569 man3dir='$man3dir'
13570 man3direxp='$man3direxp'
13571 man3ext='$man3ext'
13572 medium='$medium'
13573 mips='$mips'
13574 mips_type='$mips_type'
13575 mkdir='$mkdir'
13576 mmaptype='$mmaptype'
13577 models='$models'
13578 modetype='$modetype'
13579 more='$more'
13580 multiarch='$multiarch'
13581 mv='$mv'
13582 myarchname='$myarchname'
13583 mydomain='$mydomain'
13584 myhostname='$myhostname'
13585 myuname='$myuname'
13586 n='$n'
13587 netdb_hlen_type='$netdb_hlen_type'
13588 netdb_host_type='$netdb_host_type'
13589 netdb_name_type='$netdb_name_type'
13590 netdb_net_type='$netdb_net_type'
13591 nm='$nm'
13592 nm_opt='$nm_opt'
13593 nm_so_opt='$nm_so_opt'
13594 nonxs_ext='$nonxs_ext'
13595 nroff='$nroff'
13596 o_nonblock='$o_nonblock'
13597 obj_ext='$obj_ext'
13598 old_pthread_create_joinable='$old_pthread_create_joinable'
13599 optimize='$optimize'
13600 orderlib='$orderlib'
13601 osname='$osname'
13602 osvers='$osvers'
13603 package='$package'
13604 pager='$pager'
13605 passcat='$passcat'
13606 patchlevel='$patchlevel'
13607 path_sep='$path_sep'
13608 perl='$perl'
13609 perladmin='$perladmin'
13610 perlpath='$perlpath'
13611 pg='$pg'
13612 phostname='$phostname'
13613 pidtype='$pidtype'
13614 plibpth='$plibpth'
13615 pmake='$pmake'
13616 pr='$pr'
13617 prefix='$prefix'
13618 prefixexp='$prefixexp'
13619 privlib='$privlib'
13620 privlibexp='$privlibexp'
13621 prototype='$prototype'
13622 ptrsize='$ptrsize'
13623 randbits='$randbits'
13624 randfunc='$randfunc'
13625 randseedtype='$randseedtype'
13626 ranlib='$ranlib'
13627 rd_nodata='$rd_nodata'
13628 rm='$rm'
13629 rmail='$rmail'
13630 runnm='$runnm'
13631 sched_yield='$sched_yield'
13632 scriptdir='$scriptdir'
13633 scriptdirexp='$scriptdirexp'
13634 sed='$sed'
13635 seedfunc='$seedfunc'
13636 selectminbits='$selectminbits'
13637 selecttype='$selecttype'
13638 sendmail='$sendmail'
13639 sh='$sh'
13640 shar='$shar'
13641 sharpbang='$sharpbang'
13642 shmattype='$shmattype'
13643 shortsize='$shortsize'
13644 shrpenv='$shrpenv'
13645 shsharp='$shsharp'
13646 sig_count='$sig_count'
13647 sig_name='$sig_name'
13648 sig_name_init='$sig_name_init'
13649 sig_num='$sig_num'
13650 sig_num_init='$sig_num_init'
13651 signal_t='$signal_t'
13652 sitearch='$sitearch'
13653 sitearchexp='$sitearchexp'
13654 sitelib='$sitelib'
13655 sitelibexp='$sitelibexp'
13656 siteprefix='$siteprefix'
13657 siteprefixexp='$siteprefixexp'
13658 sizetype='$sizetype'
13659 sleep='$sleep'
13660 smail='$smail'
13661 small='$small'
13662 so='$so'
13663 sockethdr='$sockethdr'
13664 socketlib='$socketlib'
13665 sort='$sort'
13666 spackage='$spackage'
13667 spitshell='$spitshell'
13668 split='$split'
13669 src='$src'
13670 ssizetype='$ssizetype'
13671 startperl='$startperl'
13672 startsh='$startsh'
13673 static_ext='$static_ext'
13674 stdchar='$stdchar'
13675 stdio_base='$stdio_base'
13676 stdio_bufsiz='$stdio_bufsiz'
13677 stdio_cnt='$stdio_cnt'
13678 stdio_filbuf='$stdio_filbuf'
13679 stdio_ptr='$stdio_ptr'
13680 stdio_stream_array='$stdio_stream_array'
13681 strings='$strings'
13682 submit='$submit'
13683 subversion='$subversion'
13684 sysman='$sysman'
13685 tail='$tail'
13686 tar='$tar'
13687 tbl='$tbl'
13688 tee='$tee'
13689 test='$test'
13690 timeincl='$timeincl'
13691 timetype='$timetype'
13692 touch='$touch'
13693 tr='$tr'
13694 trnl='$trnl'
13695 troff='$troff'
13696 uidtype='$uidtype'
13697 uname='$uname'
13698 uniq='$uniq'
13699 use64bits='$use64bits'
13700 usedl='$usedl'
13701 usemultiplicity='$usemultiplicity'
13702 usemymalloc='$usemymalloc'
13703 usenm='$usenm'
13704 useopcode='$useopcode'
13705 useperlio='$useperlio'
13706 useposix='$useposix'
13707 usesfio='$usesfio'
13708 useshrplib='$useshrplib'
13709 usesocks='$usesocks'
13710 usethreads='$usethreads'
13711 usevendorprefix='$usevendorprefix'
13712 usevfork='$usevfork'
13713 usrinc='$usrinc'
13714 uuname='$uuname'
13715 vendorlib='$vendorlib'
13716 vendorlibexp='$vendorlibexp'
13717 vendorprefix='$vendorprefix'
13718 vendorprefixexp='$vendorprefixexp'
13719 version='$version'
13720 vi='$vi'
13721 voidflags='$voidflags'
13722 xlibpth='$xlibpth'
13723 zcat='$zcat'
13724 zip='$zip'
13725 EOT
13726
13727 : Add in command line options if available
13728 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13729
13730 : add special variables
13731 $test -f $src/patchlevel.h && \
13732 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13733 echo "CONFIGDOTSH=true" >>config.sh
13734
13735 : propagate old symbols
13736 if $test -f UU/config.sh; then
13737         <UU/config.sh sort | uniq >UU/oldconfig.sh
13738         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13739         sort | uniq -u >UU/oldsyms
13740         set X `cat UU/oldsyms`
13741         shift
13742         case $# in
13743         0) ;;
13744         *)
13745                 cat <<EOM
13746 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13747 EOM
13748                 echo "# Variables propagated from previous config.sh file." >>config.sh
13749                 for sym in `cat UU/oldsyms`; do
13750                         echo "    Propagating $hint variable "'$'"$sym..."
13751                         eval 'tmp="$'"${sym}"'"'
13752                         echo "$tmp" | \
13753                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13754                 done
13755                 ;;
13756         esac
13757 fi
13758
13759 : Finish up by extracting the .SH files
13760 case "$alldone" in
13761 exit)
13762         $rm -rf UU
13763         echo "Done."
13764         exit 0
13765         ;;
13766 cont)
13767         ;;
13768 '')
13769         dflt=''
13770         nostick=true
13771         $cat <<EOM
13772
13773 If you'd like to make any changes to the config.sh file before I begin
13774 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13775
13776 EOM
13777         rp="Press return or use a shell escape to edit config.sh:"
13778         . UU/myread
13779         nostick=''
13780         case "$ans" in
13781         '') ;;
13782         *) : in case they cannot read
13783                 sh 1>&4 -c "$ans";;
13784         esac
13785         ;;
13786 esac
13787
13788 : if this fails, just run all the .SH files by hand
13789 . ./config.sh
13790
13791 echo " "
13792 exec 1>&4
13793 . ./UU/extract
13794
13795 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13796         dflt=y
13797         case "$silent" in
13798         true) ;;
13799         *)
13800                 $cat <<EOM
13801
13802 Now you need to generate make dependencies by running "$make depend".
13803 You might prefer to run it in background: "$make depend > makedepend.out &"
13804 It can take a while, so you might not want to run it right now.
13805
13806 EOM
13807                 ;;
13808         esac
13809         rp="Run $make depend now?"
13810         . UU/myread
13811         case "$ans" in
13812         y*)
13813                 $make depend && echo "Now you must run a $make."
13814                 ;;
13815         *)
13816                 echo "You must run '$make depend' then '$make'."
13817                 ;;
13818         esac
13819 elif test -f [Mm]akefile; then
13820         echo " "
13821         echo "Now you must run a $make."
13822 else
13823         echo "Done."
13824 fi
13825
13826 if $test -f Policy.sh; then
13827     $cat <<EOM
13828
13829 If you compile $package on a different machine or from a different object
13830 directory, copy the Policy.sh file from this object directory to the
13831 new one before you run Configure -- this will help you with most of
13832 the policy defaults.
13833
13834 EOM
13835 fi
13836 if $test -f config.msg; then
13837     echo "Hmm.  I also noted the following information while running:"
13838     echo " "
13839     $cat config.msg >&4
13840     $rm -f config.msg
13841 fi
13842 $rm -f kit*isdone ark*isdone
13843 $rm -rf UU
13844
13845 : End of Configure
13846