This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
setstate stop-gap from Vishal Bhatia
[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
4480 : define an alternate in-header-list? function
4481 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4482 cont=true; xxf="echo \"<\$1> found.\" >&4";
4483 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4484 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4485 esac;
4486 case $# in 4) instead=instead;; *) instead="at last";; esac;
4487 while $test "$cont"; do
4488         xxx=`./findhdr $1`
4489         var=$2; eval "was=\$$2";
4490         if $test "$xxx" && $test -r "$xxx";
4491         then eval $xxf;
4492         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4493                 cont="";
4494         else eval $xxnf;
4495         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4496         set $yyy; shift; shift; yyy=$@;
4497         case $# in 0) cont="";;
4498         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4499                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4500         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4501                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4502         esac;
4503 done;
4504 while $test "$yyy";
4505 do set $yyy; var=$2; eval "was=\$$2";
4506         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4507         set $yyy; shift; shift; yyy=$@;
4508 done'
4509
4510 : see if this is a malloc.h system
4511 set malloc.h i_malloc
4512 eval $inhdr
4513
4514 : see if stdlib is available
4515 set stdlib.h i_stdlib
4516 eval $inhdr
4517
4518 : determine which malloc to compile in
4519 echo " "
4520 case "$usemymalloc" in
4521 ''|[yY]*|true|$define)  dflt='y' ;;
4522 *)      dflt='n' ;;
4523 esac
4524 rp="Do you wish to attempt to use the malloc that comes with $package?"
4525 . ./myread
4526 usemymalloc="$ans"
4527 case "$ans" in
4528 y*|true)
4529         usemymalloc='y'
4530         mallocsrc='malloc.c'
4531         mallocobj="malloc$_o"
4532         d_mymalloc="$define"
4533         case "$libs" in
4534         *-lmalloc*)
4535                 : Remove malloc from list of libraries to use
4536                 echo "Removing unneeded -lmalloc from library list" >&4
4537                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4538                 shift
4539                 libs="$*"
4540                 echo "libs = $libs" >&4
4541                 ;;
4542         esac
4543         ;;
4544 *)
4545         usemymalloc='n'
4546         mallocsrc=''
4547         mallocobj=''
4548         d_mymalloc="$undef"
4549         ;;
4550 esac
4551
4552 : compute the return types of malloc and free
4553 echo " "
4554 $cat >malloc.c <<END
4555 #$i_malloc I_MALLOC
4556 #$i_stdlib I_STDLIB
4557 #include <stdio.h>
4558 #include <sys/types.h>
4559 #ifdef I_MALLOC
4560 #include <malloc.h>
4561 #endif
4562 #ifdef I_STDLIB
4563 #include <stdlib.h>
4564 #endif
4565 #ifdef TRY_MALLOC
4566 void *malloc();
4567 #endif
4568 #ifdef TRY_FREE
4569 void free();
4570 #endif
4571 END
4572 case "$malloctype" in
4573 '')
4574         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4575                 malloctype='void *'
4576         else
4577                 malloctype='char *'
4578         fi
4579         ;;
4580 esac
4581 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4582
4583 case "$freetype" in
4584 '')
4585         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4586                 freetype='void'
4587         else
4588                 freetype='int'
4589         fi
4590         ;;
4591 esac
4592 echo "Your system uses $freetype free(), it would seem." >&4
4593 $rm -f malloc.[co]
4594 $cat <<EOM
4595
4596 The installation process will also create a directory for
4597 vendor-supplied add-ons.  Vendors who supply perl with their system
4598 may find it convenient to place all vendor-supplied files in this
4599 directory rather than in the main distribution directory.  This will
4600 ease upgrades between binary-compatible maintenance versions of perl.
4601
4602 Of course you may also use these directories in whatever way you see
4603 fit.  For example, you might use them to access modules shared over a
4604 company-wide network.
4605
4606 The default answer should be fine for most people.
4607 This causes further questions about vendor add-ons to be skipped
4608 and no vendor-specific directories will be configured for perl.
4609
4610 EOM
4611 rp='Do you want to configure vendor-specific add-on directories?'
4612 case "$usevendorprefix" in
4613 define|true|[yY]*) dflt=y ;;
4614 *) dflt=n ;;
4615 esac
4616 . ./myread
4617 case "$ans" in
4618 [yY]*)  fn=d~+
4619         rp='Installation prefix to use for vendor-supplied add-ons?'
4620         case "$vendorprefix" in
4621         '') dflt='' ;;
4622         *)  dflt=$vendorprefix ;;
4623         esac
4624         . ./getfile
4625         oldvendorprefix=''
4626         case "$vendorprefix" in
4627         '') ;;
4628         *)      case "$ans" in
4629                 "$prefix") ;;
4630                 *) oldvendorprefix="$prefix";;
4631                 esac
4632                 ;;
4633         esac
4634         usevendorprefix="$define"
4635         vendorprefix="$ans"
4636         vendorprefixexp="$ansexp"
4637         ;;
4638 *)      usevendorprefix="$undef"
4639         vendorprefix=''
4640         vendorprefixexp=''
4641         ;;
4642 esac
4643
4644 case "$vendorprefix" in
4645 '')     d_vendorlib="$undef"
4646         vendorlib=''
4647         vendorlibexp=''
4648         ;;
4649 *)      d_vendorlib="$define"
4650         : determine where vendor-supplied modules go.
4651         : Usual default is /usr/local/lib/perl5/vendor_perl
4652         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4653         case "$installstyle" in
4654         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4655         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4656         esac
4657         fn=d~+
4658         rp='Pathname for the vendor-supplied library files?'
4659         . ./getfile
4660         vendorlib="$ans"
4661         vendorlibexp="$ansexp"
4662         : Change installation prefix, if necessary.
4663         if $test X"$prefix" != X"$installprefix"; then
4664                 installvendorlib=`echo $vendorlibexp | $sed 's#^$prefix#$installprefix#'`
4665         else
4666                 installvendorlib="$vendorlibexp"
4667         fi
4668         ;;
4669 esac
4670
4671 : Cruising for prototypes
4672 echo " "
4673 echo "Checking out function prototypes..." >&4
4674 $cat >prototype.c <<'EOCP'
4675 int main(int argc, char *argv[]) {
4676         exit(0);}
4677 EOCP
4678 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4679         echo "Your C compiler appears to support function prototypes."
4680         val="$define"
4681 else
4682         echo "Your C compiler doesn't seem to understand function prototypes."
4683         val="$undef"
4684 fi
4685 set prototype
4686 eval $setvar
4687 $rm -f prototype*
4688
4689 case "$prototype" in
4690 "$define") ;;
4691 *)      ansi2knr='ansi2knr'
4692         echo " "
4693         cat <<EOM >&4
4694
4695 $me:  FATAL ERROR:
4696 This version of $package can only be compiled by a compiler that 
4697 understands function prototypes.  Unfortunately, your C compiler 
4698         $cc $ccflags
4699 doesn't seem to understand them.  Sorry about that.
4700
4701 If GNU cc is available for your system, perhaps you could try that instead.  
4702
4703 Eventually, we hope to support building Perl with pre-ANSI compilers.
4704 If you would like to help in that effort, please contact <perlbug@perl.org>.
4705
4706 Aborting Configure now.
4707 EOM
4708         exit 2
4709         ;;
4710 esac
4711
4712 : determine where public executables go
4713 echo " "
4714 set dflt bin bin
4715 eval $prefixit
4716 fn=d~
4717 rp='Pathname where the public executables will reside?'
4718 . ./getfile
4719 if $test "X$ansexp" != "X$binexp"; then
4720         installbin=''
4721 fi
4722 bin="$ans"
4723 binexp="$ansexp"
4724 : Change installation prefix, if necessary.
4725 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4726 if $test X"$prefix" != X"$installprefix"; then
4727         installbin=`echo $binexp | sed 's#^$prefix#$installprefix#'`
4728 else
4729         installbin="$binexp"
4730 fi
4731
4732 : determine whether to install perl also as /usr/bin/perl
4733
4734 echo " "
4735 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4736         $cat <<EOM
4737 Many scripts expect to perl to be installed as /usr/bin/perl.
4738 I can install the perl you are about to compile also as /usr/bin/perl
4739 (in addition to $installbin/perl).
4740 EOM
4741         case "$installusrbinperl" in
4742         "$undef"|[nN]*) dflt='n';;
4743         *)              dflt='y';;
4744         esac
4745         rp="Do you want to install perl as /usr/bin/perl?"
4746         . ./myread
4747         case "$ans" in
4748         [yY]*)  val="$define";;
4749         *)      val="$undef" ;;
4750         esac
4751 else
4752         val="$undef"
4753 fi
4754 set installusrbinperl
4755 eval $setvar
4756
4757 : define a shorthand compile call
4758 compile='
4759 mc_file=$1;
4760 shift;
4761 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4762 : define a shorthand compile call for compilations that should be ok.
4763 compile_ok='
4764 mc_file=$1;
4765 shift;
4766 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4767
4768 echo " "
4769 echo "Checking for GNU C Library..." >&4
4770 cat >gnulibc.c <<EOM
4771 #include <stdio.h>
4772 int main()
4773 {
4774 #ifdef __GLIBC__
4775     exit(0);
4776 #else
4777     exit(1);
4778 #endif
4779 }
4780 EOM
4781 set gnulibc
4782 if eval $compile_ok && ./gnulibc; then
4783         val="$define"
4784         echo "You are using the GNU C Library"
4785 else
4786         val="$undef"
4787         echo "You are not using the GNU C Library"
4788 fi
4789 $rm -f gnulibc*
4790 set d_gnulibc
4791 eval $setvar
4792
4793 : see if nm is to be used to determine whether a symbol is defined or not
4794 case "$usenm" in
4795 '')
4796         dflt=''
4797         case "$d_gnulibc" in
4798         "$define")
4799                 echo " "
4800                 echo "nm probably won't work on the GNU C Library." >&4
4801                 dflt=n
4802                 ;;
4803         esac
4804         case "$dflt" in
4805         '') 
4806                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4807                         echo " "
4808                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4809                         echo "'nm' won't be sufficient on this sytem." >&4
4810                         dflt=n
4811                 fi
4812                 ;;
4813         esac
4814         case "$dflt" in
4815         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4816                 if $test $dflt -gt 20; then
4817                         dflt=y
4818                 else
4819                         dflt=n
4820                 fi
4821                 ;;
4822         esac
4823         ;;
4824 *)
4825         case "$usenm" in
4826         true|$define) dflt=y;;
4827         *) dflt=n;;
4828         esac
4829         ;;
4830 esac
4831 $cat <<EOM
4832
4833 I can use $nm to extract the symbols from your C libraries. This
4834 is a time consuming task which may generate huge output on the disk (up
4835 to 3 megabytes) but that should make the symbols extraction faster. The
4836 alternative is to skip the 'nm' extraction part and to compile a small
4837 test program instead to determine whether each symbol is present. If
4838 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4839 this may be the best solution.
4840
4841 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4842
4843 EOM
4844 rp="Shall I use $nm to extract C symbols from the libraries?"
4845 . ./myread
4846 case "$ans" in
4847 [Nn]*) usenm=false;;
4848 *) usenm=true;;
4849 esac
4850
4851 runnm=$usenm
4852 case "$reuseval" in
4853 true) runnm=false;;
4854 esac
4855
4856 : nm options which may be necessary
4857 case "$nm_opt" in
4858 '') if $test -f /mach_boot; then
4859                 nm_opt=''       # Mach
4860         elif $test -d /usr/ccs/lib; then
4861                 nm_opt='-p'     # Solaris (and SunOS?)
4862         elif $test -f /dgux; then
4863                 nm_opt='-p'     # DG-UX
4864         elif $test -f /lib64/rld; then
4865                 nm_opt='-p'     # 64-bit Irix
4866         else
4867                 nm_opt=''
4868         fi;;
4869 esac
4870
4871 : nm options which may be necessary for shared libraries but illegal
4872 : for archive libraries.  Thank you, Linux.
4873 case "$nm_so_opt" in
4874 '')     case "$myuname" in
4875         *linux*)
4876                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4877                         nm_so_opt='--dynamic'
4878                 fi
4879                 ;;
4880         esac
4881         ;;
4882 esac
4883
4884 case "$runnm" in
4885 true)
4886 : get list of predefined functions in a handy place
4887 echo " "
4888 case "$libc" in
4889 '') libc=unknown
4890         case "$libs" in
4891         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4892         esac
4893         ;;
4894 esac
4895 libnames='';
4896 case "$libs" in
4897 '') ;;
4898 *)  for thislib in $libs; do
4899         case "$thislib" in
4900         -lc|-lc_s)
4901                 : Handle C library specially below.
4902                 ;;
4903         -l*)
4904                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4905                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4906                         :
4907                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4908                         :
4909                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4910                         :
4911                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4912                         :
4913                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4914                         :
4915                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4916                         :
4917                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4918                         :
4919                 else
4920                         try=''
4921                 fi
4922                 libnames="$libnames $try"
4923                 ;;
4924         *) libnames="$libnames $thislib" ;;
4925         esac
4926         done
4927         ;;
4928 esac
4929 xxx=normal
4930 case "$libc" in
4931 unknown)
4932         set /lib/libc.$so
4933         for xxx in $libpth; do
4934                 $test -r $1 || set $xxx/libc.$so
4935                 : The messy sed command sorts on library version numbers.
4936                 $test -r $1 || \
4937                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4938                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4939                                 h
4940                                 s/[0-9][0-9]*/0000&/g
4941                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4942                                 G
4943                                 s/\n/ /' | \
4944                          sort | $sed -e 's/^.* //'`
4945                 eval set \$$#
4946         done
4947         $test -r $1 || set /usr/ccs/lib/libc.$so
4948         $test -r $1 || set /lib/libsys_s$_a
4949         ;;
4950 *)
4951         set blurfl
4952         ;;
4953 esac
4954 if $test -r "$1"; then
4955         echo "Your (shared) C library seems to be in $1."
4956         libc="$1"
4957 elif $test -r /lib/libc && $test -r /lib/clib; then
4958         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4959         xxx=apollo
4960         libc='/lib/clib /lib/libc'
4961         if $test -r /lib/syslib; then
4962                 echo "(Your math library is in /lib/syslib.)"
4963                 libc="$libc /lib/syslib"
4964         fi
4965 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4966         echo "Your C library seems to be in $libc, as you said before."
4967 elif $test -r $incpath/usr/lib/libc$_a; then
4968         libc=$incpath/usr/lib/libc$_a;
4969         echo "Your C library seems to be in $libc.  That's fine."
4970 elif $test -r /lib/libc$_a; then
4971         libc=/lib/libc$_a;
4972         echo "Your C library seems to be in $libc.  You're normal."
4973 else
4974         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4975                 :
4976         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4977                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4978         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4979                 :
4980         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4981                 :
4982         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4983                 :
4984         else
4985                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4986         fi
4987         if $test -r "$tans"; then
4988                 echo "Your C library seems to be in $tans, of all places."
4989                 libc=$tans
4990         else
4991                 libc='blurfl'
4992         fi
4993 fi
4994 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4995         dflt="$libc"
4996         cat <<EOM
4997
4998 If the guess above is wrong (which it might be if you're using a strange
4999 compiler, or your machine supports multiple models), you can override it here.
5000
5001 EOM
5002 else
5003         dflt=''
5004         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5005         cat >&4 <<EOM
5006 I can't seem to find your C library.  I've looked in the following places:
5007
5008 EOM
5009         $sed 's/^/      /' libpath
5010         cat <<EOM
5011
5012 None of these seems to contain your C library. I need to get its name...
5013
5014 EOM
5015 fi
5016 fn=f
5017 rp='Where is your C library?'
5018 . ./getfile
5019 libc="$ans"
5020
5021 echo " "
5022 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5023 set X `cat libnames`
5024 shift
5025 xxx=files
5026 case $# in 1) xxx=file; esac
5027 echo "Extracting names from the following $xxx for later perusal:" >&4
5028 echo " "
5029 $sed 's/^/      /' libnames >&4
5030 echo " "
5031 $echo $n "This may take a while...$c" >&4
5032
5033 for file in $*; do
5034         case $file in
5035         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5036         *) $nm $nm_opt $file 2>/dev/null;;
5037         esac
5038 done >libc.tmp
5039
5040 $echo $n ".$c"
5041 $grep fprintf libc.tmp > libc.ptf
5042 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5043 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5044 xxx='[ADTSIW]'
5045 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5046         eval $xscan;\
5047         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5048                 eval $xrun
5049 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5050         eval $xscan;\
5051         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5052                 eval $xrun
5053 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5054         eval $xscan;\
5055         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5056                 eval $xrun
5057 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5058         eval $xscan;\
5059         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5060                 eval $xrun
5061 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5062         eval $xscan;\
5063         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5064                 eval $xrun
5065 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5066         eval $xscan;\
5067         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5068                 eval $xrun
5069 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5070                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5071         eval $xscan;\
5072         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5073                 eval $xrun
5074 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5075         eval $xscan;\
5076         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5077                 eval $xrun
5078 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5079         eval $xscan;\
5080         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5081                 eval $xrun
5082 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5083         eval $xscan;\
5084         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5085                 eval $xrun
5086 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5087         eval $xscan;\
5088         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5089                 eval $xrun
5090 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5091         eval $xscan;\
5092         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5093                 eval $xrun
5094 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5095         eval $xscan;\
5096         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5097                 eval $xrun
5098 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5099         eval $xscan;\
5100         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5101                 eval $xrun
5102 else
5103         $nm -p $* 2>/dev/null >libc.tmp
5104         $grep fprintf libc.tmp > libc.ptf
5105         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5106                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5107         then
5108                 nm_opt='-p'
5109                 eval $xrun
5110         else
5111                 echo " "
5112                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5113                 com=''
5114                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5115                         for thisname in $libnames $libc; do
5116                                 $ar t $thisname >>libc.tmp
5117                         done
5118                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5119                         echo "Ok." >&4
5120                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5121                         # Repeat libc to extract forwarders to DLL entries too
5122                         for thisname in $libnames $libc; do
5123                                 $ar tv $thisname >>libc.tmp
5124                                 # Revision 50 of EMX has bug in $ar.
5125                                 # it will not extract forwarders to DLL entries
5126                                 # Use emximp which will extract exactly them.
5127                                 emximp -o tmp.imp $thisname \
5128                                     2>/dev/null && \
5129                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5130                                     < tmp.imp >>libc.tmp
5131                                 $rm tmp.imp
5132                         done
5133                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5134                         echo "Ok." >&4
5135                 else
5136                         echo "$ar didn't seem to work right." >&4
5137                         echo "Maybe this is a Cray...trying bld instead..." >&4
5138                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5139                         then
5140                                 for thisname in $libnames; do
5141                                         bld t $libnames | \
5142                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5143                                         $ar t $thisname >>libc.tmp
5144                                 done
5145                                 echo "Ok." >&4
5146                         else
5147                                 echo "That didn't work either.  Giving up." >&4
5148                                 exit 1
5149                         fi
5150                 fi
5151         fi
5152 fi
5153 nm_extract="$com"
5154 if $test -f /lib/syscalls.exp; then
5155         echo " "
5156         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5157         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5158 fi
5159 ;;
5160 esac
5161 $rm -f libnames libpath
5162
5163 : see if dld is available
5164 set dld.h i_dld
5165 eval $inhdr
5166
5167 : is a C symbol defined?
5168 csym='tlook=$1;
5169 case "$3" in
5170 -v) tf=libc.tmp; tc=""; tdc="";;
5171 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5172 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5173 esac;
5174 tx=yes;
5175 case "$reuseval-$4" in
5176 true-) ;;
5177 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5178 esac;
5179 case "$tx" in
5180 yes)
5181         case "$runnm" in
5182         true)
5183                 if $contains $tlook $tf >/dev/null 2>&1;
5184                 then tval=true;
5185                 else tval=false;
5186                 fi;;
5187         *)
5188                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5189                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5190                 then tval=true;
5191                 else tval=false;
5192                 fi;
5193                 $rm -f t t.c;;
5194         esac;;
5195 *)
5196         case "$tval" in
5197         $define) tval=true;;
5198         *) tval=false;;
5199         esac;;
5200 esac;
5201 eval "$2=$tval"'
5202
5203 : define an is-in-libc? function
5204 inlibc='echo " "; td=$define; tu=$undef;
5205 sym=$1; var=$2; eval "was=\$$2";
5206 tx=yes;
5207 case "$reuseval$was" in
5208 true) ;;
5209 true*) tx=no;;
5210 esac;
5211 case "$tx" in
5212 yes)
5213         set $sym tres -f;
5214         eval $csym;
5215         case "$tres" in
5216         true)
5217                 echo "$sym() found." >&4;
5218                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5219         *)
5220                 echo "$sym() NOT found." >&4;
5221                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5222         esac;;
5223 *)
5224         case "$was" in
5225         $define) echo "$sym() found." >&4;;
5226         *) echo "$sym() NOT found." >&4;;
5227         esac;;
5228 esac'
5229
5230 : see if dlopen exists
5231 xxx_runnm="$runnm"
5232 runnm=false
5233 set dlopen d_dlopen
5234 eval $inlibc
5235 runnm="$xxx_runnm"
5236
5237 : determine which dynamic loading, if any, to compile in
5238 echo " "
5239 dldir="ext/DynaLoader"
5240 case "$usedl" in
5241 $define|y|true)
5242         dflt='y'
5243         usedl="$define"
5244         ;;
5245 $undef|n|false)
5246         dflt='n'
5247         usedl="$undef"
5248         ;;
5249 *) 
5250         dflt='n'
5251         case "$d_dlopen" in
5252             $define) dflt='y' ;;
5253         esac
5254         case "$i_dld" in
5255             $define) dflt='y' ;;
5256         esac
5257         : Does a dl_xxx.xs file exist for this operating system
5258         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5259         ;;
5260 esac
5261 rp="Do you wish to use dynamic loading?"
5262 . ./myread
5263 usedl="$ans"
5264 case "$ans" in
5265 y*) usedl="$define"
5266         case "$dlsrc" in
5267         '')
5268                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5269                         dflt="$dldir/dl_${osname}.xs"
5270                 elif $test "$d_dlopen" = "$define" ; then
5271                         dflt="$dldir/dl_dlopen.xs"
5272                 elif $test "$i_dld" = "$define" ; then
5273                         dflt="$dldir/dl_dld.xs"
5274                 else
5275                         dflt=''
5276                 fi
5277                 ;;
5278         *)      dflt="$dldir/$dlsrc"
5279                 ;;
5280         esac
5281     echo "The following dynamic loading files are available:"
5282         : Can not go over to $dldir because getfile has path hard-coded in.
5283         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5284         rp="Source file to use for dynamic loading"
5285         fn="fne"
5286         gfpth="$src"
5287         . ./getfile
5288         usedl="$define"
5289         : emulate basename
5290         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5291
5292         $cat << EOM
5293
5294 Some systems may require passing special flags to $cc -c to
5295 compile modules that will be used to create a shared library.
5296 To use no flags, say "none".
5297
5298 EOM
5299     case "$cccdlflags" in
5300     '') case "$gccversion" in
5301                 '') case "$osname" in
5302                         hpux)   dflt='+z' ;;
5303                         next)   dflt='none' ;;
5304                         irix*)  dflt='-KPIC' ;;
5305                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5306                         sunos)  dflt='-pic' ;;
5307                         *)      dflt='none' ;;
5308                     esac
5309                         ;;
5310                 *)  case "$osname" in
5311                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5312                         *)      dflt='-fpic' ;;
5313                     esac ;;
5314             esac ;;
5315         ' ') dflt='none' ;;
5316     *)  dflt="$cccdlflags" ;;
5317     esac
5318     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5319     . ./myread
5320     case "$ans" in
5321     none) cccdlflags=' ' ;;
5322     *) cccdlflags="$ans" ;;
5323     esac
5324
5325     cat << EOM
5326
5327 Some systems use ld to create libraries that can be dynamically loaded,
5328 while other systems (such as those using ELF) use $cc.
5329
5330 EOM
5331         case "$ld" in
5332         '')     $cat >try.c <<'EOM'
5333 /* Test for whether ELF binaries are produced */
5334 #include <fcntl.h>
5335 #include <stdlib.h>
5336 int main() {
5337         char b[4];
5338         int i = open("a.out",O_RDONLY);
5339         if(i == -1) 
5340                 exit(1); /* fail */
5341         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5342                 exit(0); /* succeed (yes, it's ELF) */
5343         else
5344                 exit(1); /* fail */
5345 }
5346 EOM
5347                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5348                         cat <<EOM
5349 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5350 EOM
5351                         dflt="$cc"
5352                 else
5353                         echo "I'll use ld to build dynamic libraries."
5354                         dflt='ld'
5355                 fi
5356                 rm -f try.c a.out
5357                 ;;
5358         *)      dflt="$ld"
5359                 ;;
5360         esac
5361
5362     rp="What command should be used to create dynamic libraries?"
5363     . ./myread
5364         ld="$ans"
5365
5366     cat << EOM
5367
5368 Some systems may require passing special flags to $ld to create a
5369 library that can be dynamically loaded.  If your ld flags include
5370 -L/other/path options to locate libraries outside your loader's normal
5371 search path, you may need to specify those -L options here as well.  To
5372 use no flags, say "none".
5373
5374 EOM
5375     case "$lddlflags" in
5376     '') case "$osname" in
5377                         beos) dflt='-nostart' ;;
5378                         hpux)  dflt='-b' ;;
5379                         linux|irix*)    dflt='-shared' ;;
5380                         next)  dflt='none' ;;
5381                         solaris) dflt='-G' ;;
5382                         sunos) dflt='-assert nodefinitions' ;;
5383                         svr4*|esix*) dflt="-G $ldflags" ;;
5384                 *)     dflt='none' ;;
5385                         esac
5386                         ;;
5387     *) dflt="$lddlflags" ;;
5388     esac
5389
5390         : Try to guess additional flags to pick up local libraries.
5391         : Be careful not to append to a plain 'none'
5392         case "$dflt" in
5393         none) dflt='' ;;
5394         esac
5395         for thisflag in $ldflags; do
5396                 case "$thisflag" in
5397                 -L*)
5398                         case " $dflt " in
5399                         *" $thisflag "*) ;;
5400                         *) dflt="$dflt $thisflag" ;;
5401                         esac
5402                         ;;
5403                 esac
5404         done
5405
5406         case "$dflt" in
5407         ''|' ') dflt='none' ;;
5408         esac
5409
5410     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5411     . ./myread
5412     case "$ans" in
5413     none) lddlflags=' ' ;;
5414     *) lddlflags="$ans" ;;
5415     esac
5416
5417         cat <<EOM
5418
5419 Some systems may require passing special flags to $cc to indicate that
5420 the resulting executable will use dynamic linking.  To use no flags,
5421 say "none".
5422
5423 EOM
5424     case "$ccdlflags" in
5425     '') case "$osname" in
5426                 hpux)   dflt='-Wl,-E' ;;
5427                 linux)  dflt='-rdynamic' ;;
5428                 next)   dflt='none' ;;
5429                 sunos)  dflt='none' ;;
5430                 *)      dflt='none' ;;
5431             esac ;;
5432     ' ')  dflt='none' ;;
5433     *)  dflt="$ccdlflags" ;;
5434     esac
5435     rp="Any special flags to pass to $cc to use dynamic loading?"
5436     . ./myread
5437     case "$ans" in
5438     none) ccdlflags=' ' ;;
5439     *) ccdlflags="$ans" ;;
5440     esac
5441     ;;
5442 *)  usedl="$undef"
5443         ld='ld'
5444     dlsrc='dl_none.xs'
5445     lddlflags=''
5446     ccdlflags=''
5447     ;;
5448 esac
5449
5450 also=''
5451 case "$usedl" in
5452 $undef)
5453         # No dynamic loading being used, so don't bother even to prompt.
5454         useshrplib='false'
5455         ;;
5456 *)      case "$useshrplib" in
5457         '')     case "$osname" in
5458                 svr4*|dgux|dynixptx|esix|powerux|beos)
5459                         dflt=y
5460                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5461                         ;;
5462                 next*)
5463                         case "$osvers" in
5464                         4*)     dflt=y
5465                                 also='Building a shared libperl is needed for MAB support.'
5466                                 ;;
5467                         *)      dflt=n
5468                                 ;;
5469                         esac
5470                         ;;
5471                 *)      dflt=n
5472                         ;;
5473                 esac
5474                 ;;
5475         $define|true|[Yy]*)
5476                 dflt=y
5477                 ;;
5478         *)      dflt=n
5479                 ;;
5480         esac
5481         $cat << EOM
5482
5483 The perl executable is normally obtained by linking perlmain.c with
5484 libperl${_a}, any static extensions (usually just DynaLoader), and
5485 any other libraries needed on this system (such as -lm, etc.).  Since
5486 your system supports dynamic loading, it is probably possible to build
5487 a shared libperl.$so.  If you will have more than one executable linked
5488 to libperl.$so, this will significantly reduce the size of each
5489 executable, but it may have a noticeable affect on performance.  The
5490 default is probably sensible for your system.
5491 $also
5492
5493 EOM
5494         rp="Build a shared libperl.$so (y/n)"
5495         . ./myread
5496         case "$ans" in
5497         true|$define|[Yy]*)
5498                 useshrplib='true'  ;;
5499         *)      useshrplib='false' ;;
5500         esac
5501         ;;
5502 esac
5503
5504 case "$useshrplib" in
5505 true)
5506         case "$libperl" in
5507         '')
5508                 # Figure out a good name for libperl.so.  Since it gets stored in
5509                 # a version-specific architecture-dependent library, the version
5510                 # number isn't really that important, except for making cc/ld happy.
5511                 #
5512                 # A name such as libperl.so.3.1
5513                 majmin="libperl.$so.$patchlevel.$subversion"
5514                 # A name such as libperl.so.301
5515                 majonly=`echo $patchlevel $subversion |
5516                         $awk '{printf "%d%02d", $1, $2}'`
5517                 majonly=libperl.$so.$majonly
5518                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5519                 # rely on figuring it out from the naming of libc.
5520                 case "${osname}${osvers}" in
5521                 next4*)
5522                         dflt=libperl.5.$so
5523                         # XXX How handle the --version stuff for MAB?
5524                         ;;
5525                 linux*)  # ld won't link with a bare -lperl otherwise.
5526                         dflt=libperl.$so
5527                         ;;
5528                 *)      # Try to guess based on whether libc has major.minor.
5529                         case "$libc" in
5530                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5531                         *libc.$so.[0-9]*) dflt=$majonly ;;
5532                         *)      dflt=libperl.$so ;;
5533                         esac
5534                         ;;
5535                 esac
5536                 ;;
5537         *)      dflt=$libperl
5538                 ;;
5539         esac
5540         cat << EOM
5541
5542 I need to select a good name for the shared libperl.  If your system uses
5543 library names with major and minor numbers, then you might want something
5544 like $majmin.  Alternatively, if your system uses a single version
5545 number for shared libraries, then you might want to use $majonly.
5546 Or, your system might be quite happy with a simple libperl.$so.
5547
5548 Since the shared libperl will get installed into a version-specific
5549 architecture-dependent directory, the version number of the shared perl
5550 library probably isn't important, so the default should be o.k.
5551
5552 EOM
5553         rp='What name do you want to give to the shared libperl?'
5554         . ./myread
5555         libperl=$ans
5556         echo "Ok, I'll use $libperl"
5557         ;;
5558 *)
5559         libperl="libperl${_a}"
5560         ;;
5561 esac
5562
5563 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5564 case "$shrpdir" in
5565 '') ;;
5566 *)      $cat >&4 <<EOM
5567 WARNING:  Use of the shrpdir variable for the installation location of
5568 the shared $libperl is not supported.  It was never documented and
5569 will not work in this version.  Let me (perlbug@perl.com)
5570 know of any problems this may cause.
5571
5572 EOM
5573         case "$shrpdir" in
5574         "$archlibexp/CORE")
5575                 $cat >&4 <<EOM
5576 But your current setting of $shrpdir is
5577 the default anyway, so it's harmless.
5578 EOM
5579                 ;;
5580         *)
5581                 $cat >&4 <<EOM
5582 Further, your current attempted setting of $shrpdir
5583 conflicts with the value of $archlibexp/CORE
5584 that installperl will use.
5585 EOM
5586                 ;;
5587         esac
5588         ;;
5589 esac
5590
5591 # How will the perl executable find the installed shared $libperl?
5592 # Add $xxx to ccdlflags.
5593 # If we can't figure out a command-line option, use $shrpenv to
5594 # set env LD_RUN_PATH.  The main perl makefile uses this.
5595 shrpdir=$archlibexp/CORE
5596 xxx=''
5597 tmp_shrpenv=''
5598 if "$useshrplib"; then
5599     case "$osname" in 
5600         aix)
5601                 # We'll set it in Makefile.SH...
5602                 ;;
5603         solaris|netbsd)
5604                 xxx="-R $shrpdir"
5605                 ;;
5606         freebsd)
5607                 xxx="-Wl,-R$shrpdir"
5608                 ;;
5609         linux|irix*|dec_osf)
5610                 xxx="-Wl,-rpath,$shrpdir"
5611                 ;;
5612         next)
5613                 # next doesn't like the default...
5614                 ;;
5615         beos)
5616                 # beos doesn't like the default, either.
5617                 ;;
5618         hpux*)
5619                 # hpux doesn't like the default, either.
5620                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5621                 ;;
5622         *)
5623                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5624                 ;;
5625         esac
5626         case "$xxx" in
5627         '') ;;
5628         *)      
5629                 # Only add $xxx if it isn't already in ccdlflags.
5630                 case " $ccdlflags " in
5631                 *" $xxx "*)     ;;
5632                 *)      ccdlflags="$ccdlflags $xxx"
5633                         cat <<EOM >&4
5634
5635 Adding $xxx to the flags
5636 passed to $ld so that the perl executable will find the 
5637 installed shared $libperl.
5638
5639 EOM
5640                         ;;
5641                 esac
5642                 ;;
5643         esac
5644 fi
5645 # Fix ccdlflags in AIX for building external extensions.
5646 # (For building Perl itself bare -bE:perl.exp is needed,
5647 #  Makefile.SH takes care of this.)
5648 case "$osname" in
5649 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5650 esac
5651 # Respect a hint or command-line value.
5652 case "$shrpenv" in
5653 '') shrpenv="$tmp_shrpenv" ;;
5654 esac
5655 case "$ldlibpthname" in
5656 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5657 none)   ldlibpthname='' ;;
5658 esac
5659
5660 : determine where manual pages go
5661 set man1dir man1dir none
5662 eval $prefixit
5663 $cat <<EOM
5664
5665 $spackage has manual pages available in source form.
5666 EOM
5667 case "$nroff" in
5668 nroff)
5669         echo "However, you don't have nroff, so they're probably useless to you."
5670         case "$man1dir" in
5671         '') man1dir="none";;
5672         esac;;
5673 esac
5674 echo "If you don't want the manual sources installed, answer 'none'."
5675 case "$man1dir" in
5676 ' ') dflt=none
5677         ;;
5678 '')
5679         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5680         lookpath="$lookpath $prefixexp/man/p_man/man1"
5681         lookpath="$lookpath $prefixexp/man/u_man/man1"
5682         lookpath="$lookpath $prefixexp/man/man.1"
5683         case "$sysman" in
5684         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5685         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5686         esac
5687         set dflt
5688         eval $prefixup
5689         ;;
5690 *)  dflt="$man1dir"
5691         ;;
5692 esac
5693 echo " "
5694 fn=dn+~
5695 rp="Where do the main $spackage manual pages (source) go?"
5696 . ./getfile
5697 if $test "X$man1direxp" != "X$ansexp"; then
5698         installman1dir=''
5699 fi
5700 man1dir="$ans"
5701 man1direxp="$ansexp"
5702 case "$man1dir" in
5703 '')     man1dir=' '
5704         installman1dir='';;
5705 esac
5706
5707 : Change installation prefix, if necessary.
5708 if $test X"$prefix" != X"$installprefix"; then
5709         installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'`
5710 else
5711         installman1dir="$man1direxp"
5712 fi
5713
5714 : What suffix to use on installed man pages
5715
5716 case "$man1dir" in
5717 ' ')
5718         man1ext='0'
5719         ;;
5720 *)
5721         rp="What suffix should be used for the main $spackage man pages?"
5722         case "$man1ext" in
5723         '')     case "$man1dir" in
5724                 *1)  dflt=1 ;;
5725                 *1p) dflt=1p ;;
5726                 *1pm) dflt=1pm ;;
5727                 *l) dflt=l;;
5728                 *n) dflt=n;;
5729                 *o) dflt=o;;
5730                 *p) dflt=p;;
5731                 *C) dflt=C;;
5732                 *L) dflt=L;;
5733                 *L1) dflt=L1;;
5734                 *) dflt=1;;
5735                 esac
5736                 ;;
5737         *)      dflt="$man1ext";;
5738         esac
5739         . ./myread
5740         man1ext="$ans"
5741         ;;
5742 esac
5743
5744 : see if we can have long filenames
5745 echo " "
5746 rmlist="$rmlist /tmp/cf$$"
5747 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5748 first=123456789abcdef
5749 second=/tmp/cf$$/$first
5750 $rm -f $first $second
5751 if (echo hi >$first) 2>/dev/null; then
5752         if $test -f 123456789abcde; then
5753                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5754                 val="$undef"
5755         else
5756                 if (echo hi >$second) 2>/dev/null; then
5757                         if $test -f /tmp/cf$$/123456789abcde; then
5758                                 $cat <<'EOM'
5759 That's peculiar... You can have filenames longer than 14 characters, but only
5760 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5761 I shall consider your system cannot support long filenames at all.
5762 EOM
5763                                 val="$undef"
5764                         else
5765                                 echo 'You can have filenames longer than 14 characters.' >&4
5766                                 val="$define"
5767                         fi
5768                 else
5769                         $cat <<'EOM'
5770 How confusing! Some of your filesystems are sane enough to allow filenames
5771 longer than 14 characters but some others like /tmp can't even think about them.
5772 So, for now on, I shall assume your kernel does not allow them at all.
5773 EOM
5774                         val="$undef"
5775                 fi
5776         fi
5777 else
5778         $cat <<'EOM'
5779 You can't have filenames longer than 14 chars.  You can't even think about them!
5780 EOM
5781         val="$undef"
5782 fi 
5783 set d_flexfnam
5784 eval $setvar
5785 $rm -rf /tmp/cf$$ 123456789abcde*
5786
5787 : determine where library module manual pages go
5788 set man3dir man3dir none
5789 eval $prefixit
5790 $cat <<EOM
5791
5792 $spackage has manual pages for many of the library modules.
5793 EOM
5794
5795 case "$nroff" in
5796 nroff)
5797         $cat <<'EOM'
5798 However, you don't have nroff, so they're probably useless to you.
5799 EOM
5800         case "$man3dir" in
5801         '') man3dir="none";;
5802         esac;;
5803 esac
5804
5805 case "$d_flexfnam" in
5806 undef)
5807         $cat <<'EOM'
5808 However, your system can't handle the long file names like File::Basename.3. 
5809 EOM
5810         case "$man3dir" in
5811         '') man3dir="none";;
5812         esac;;
5813 esac
5814
5815 echo "If you don't want the manual sources installed, answer 'none'."
5816 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5817 case "$man3dir" in
5818 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5819         if $test -d "$privlib/man/man3"; then
5820                 cat <<EOM >&4
5821
5822 WARNING:  Previous versions of perl installed man3 pages into
5823 $privlib/man/man3.  This version will suggest a 
5824 new default of $dflt.  
5825 EOM
5826                 tdflt=$dflt
5827                 dflt='n'
5828                 rp='Do you wish to preserve the old behavior?(y/n)'
5829                 . ./myread
5830                 case "$ans" in
5831                 y*) dflt="$privlib/man/man3" ;;
5832                 *)  dflt=$tdflt ;;
5833                 esac
5834     fi
5835         ;;
5836 ' ') dflt=none;;
5837 *)      dflt="$man3dir" ;;
5838 esac
5839 echo " "
5840 fn=dn+~
5841 rp="Where do the $package library man pages (source) go?"
5842 . ./getfile
5843 man3dir="$ans"
5844 man3direxp="$ansexp"
5845 case "$man1dir" in
5846 '')     man3dir=' '
5847         installman3dir='';;
5848 esac
5849
5850 : Change installation prefix, if necessary.
5851 if $test X"$prefix" != X"$installprefix"; then
5852         installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'`
5853 else
5854         installman3dir="$man3direxp"
5855 fi
5856
5857 : What suffix to use on installed man pages
5858 case "$man3dir" in
5859 ' ')
5860         man3ext='0'
5861         ;;
5862 *)
5863         rp="What suffix should be used for the $package library man pages?"
5864         case "$man3ext" in
5865         '')     case "$man3dir" in
5866                 *3)  dflt=3 ;;
5867                 *3p) dflt=3p ;;
5868                 *3pm) dflt=3pm ;;
5869                 *l) dflt=l;;
5870                 *n) dflt=n;;
5871                 *o) dflt=o;;
5872                 *p) dflt=p;;
5873                 *C) dflt=C;;
5874                 *L) dflt=L;;
5875                 *L3) dflt=L3;;
5876                 *) dflt=3;;
5877                 esac
5878                 ;;
5879         *)      dflt="$man3ext";;
5880         esac
5881         . ./myread
5882         man3ext="$ans"
5883         ;;
5884 esac
5885
5886 : see if we have to deal with yellow pages, now NIS.
5887 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5888         if $test -f /usr/etc/nibindd; then
5889                 echo " "
5890                 echo "I'm fairly confident you're on a NeXT."
5891                 echo " "
5892                 rp='Do you get the hosts file via NetInfo?'
5893                 dflt=y
5894                 case "$hostcat" in
5895                 nidump*) ;;
5896                 '') ;;
5897                 *) dflt=n;;
5898                 esac
5899                 . ./myread
5900                 case "$ans" in
5901                 y*) hostcat='nidump hosts .';;
5902                 *)      case "$hostcat" in
5903                         nidump*) hostcat='';;
5904                         esac
5905                         ;;
5906                 esac
5907         fi
5908         case "$hostcat" in
5909         nidump*) ;;
5910         *)
5911                 case "$hostcat" in
5912                 *ypcat*) dflt=y;;
5913                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5914                                 dflt=y
5915                         else
5916                                 dflt=n
5917                         fi;;
5918                 *) dflt=n;;
5919                 esac
5920                 echo " "
5921                 rp='Are you getting the hosts file via yellow pages?'
5922                 . ./myread
5923                 case "$ans" in
5924                 y*) hostcat='ypcat hosts';;
5925                 *) hostcat='cat /etc/hosts';;
5926                 esac
5927                 ;;
5928         esac
5929 fi
5930 case "$hostcat" in
5931 '') hostcat='cat /etc/hosts';;
5932 esac
5933 case "$groupcat" in
5934 '') groupcat='cat /etc/group';;
5935 esac
5936 case "$passcat" in
5937 '') passcat='cat /etc/passwd';;
5938 esac
5939
5940 : now get the host name
5941 echo " "
5942 echo "Figuring out host name..." >&4
5943 case "$myhostname" in
5944 '') cont=true
5945         echo 'Maybe "hostname" will work...'
5946         if tans=`sh -c hostname 2>&1` ; then
5947                 myhostname=$tans
5948                 phostname=hostname
5949                 cont=''
5950         fi
5951         ;;
5952 *) cont='';;
5953 esac
5954 if $test "$cont"; then
5955         if ./xenix; then
5956                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5957                 if tans=`cat /etc/systemid 2>&1` ; then
5958                         myhostname=$tans
5959                         phostname='cat /etc/systemid'
5960                         echo "Whadyaknow.  Xenix always was a bit strange..."
5961                         cont=''
5962                 fi
5963         elif $test -r /etc/systemid; then
5964                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5965         fi
5966 fi
5967 if $test "$cont"; then
5968         echo 'No, maybe "uuname -l" will work...'
5969         if tans=`sh -c 'uuname -l' 2>&1` ; then
5970                 myhostname=$tans
5971                 phostname='uuname -l'
5972         else
5973                 echo 'Strange.  Maybe "uname -n" will work...'
5974                 if tans=`sh -c 'uname -n' 2>&1` ; then
5975                         myhostname=$tans
5976                         phostname='uname -n'
5977                 else
5978                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5979                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5980                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5981                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5982                         else
5983                                 case "$myhostname" in
5984                                 '') echo "Does this machine have an identity crisis or something?"
5985                                         phostname='';;
5986                                 *)
5987                                         echo "Well, you said $myhostname before..."
5988                                         phostname='echo $myhostname';;
5989                                 esac
5990                         fi
5991                 fi
5992         fi
5993 fi
5994 : you do not want to know about this
5995 set $myhostname
5996 myhostname=$1
5997
5998 : verify guess
5999 if $test "$myhostname" ; then
6000         dflt=y
6001         rp='Your host name appears to be "'$myhostname'".'" Right?"
6002         . ./myread
6003         case "$ans" in
6004         y*) ;;
6005         *) myhostname='';;
6006         esac
6007 fi
6008
6009 : bad guess or no guess
6010 while $test "X$myhostname" = X ; do
6011         dflt=''
6012         rp="Please type the (one word) name of your host:"
6013         . ./myread
6014         myhostname="$ans"
6015 done
6016
6017 : translate upper to lower if necessary
6018 case "$myhostname" in
6019 *[A-Z]*)
6020         echo "(Normalizing case in your host name)"
6021         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6022         ;;
6023 esac
6024
6025 case "$myhostname" in
6026 *.*)
6027         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6028         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6029         echo "(Trimming domain name from host name--host name is now $myhostname)"
6030         ;;
6031 *) case "$mydomain" in
6032         '')
6033                 {
6034                         test "X$hostcat" = "Xypcat hosts" &&
6035                         ypmatch "$myhostname" hosts 2>/dev/null |\
6036                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6037                         $test -s hosts
6038                 } || {
6039                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6040                                         /[       ]$myhostname[  . ]/p" > hosts
6041                 }
6042                 tmp_re="[       . ]"
6043                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6044                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6045                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6046                         hosts | $sort | $uniq | \
6047                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6048                 case `$echo X$dflt` in
6049                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6050                         dflt=.
6051                         ;;
6052                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6053                         ;;
6054                 esac
6055                 case "$dflt" in
6056                 .)
6057                         tans=`./loc resolv.conf X /etc /usr/etc`
6058                         if $test -f "$tans"; then
6059                                 echo "(Attempting domain name extraction from $tans)"
6060                                 dflt=.`$sed -n -e 's/   / /g' \
6061                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6062                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6063                                 case "$dflt" in
6064                                 .) dflt=.`$sed -n -e 's/        / /g' \
6065                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6066                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6067                                         ;;
6068                                 esac
6069                         fi
6070                         ;;
6071                 esac
6072                 case "$dflt" in
6073                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6074                         dflt=.`sh -c domainname 2>/dev/null`
6075                         case "$dflt" in
6076                         '') dflt='.';;
6077                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6078                         esac
6079                         ;;
6080                 esac
6081                 case "$dflt" in
6082                 .) echo "(Lost all hope -- silly guess then)"
6083                         dflt='.uucp'
6084                         ;;
6085                 esac
6086                 $rm -f hosts
6087                 ;;
6088         *) dflt="$mydomain";;
6089         esac;;
6090 esac
6091 echo " "
6092 rp="What is your domain name?"
6093 . ./myread
6094 tans="$ans"
6095 case "$ans" in
6096 '') ;;
6097 .*) ;;
6098 *) tans=".$tans";;
6099 esac
6100 mydomain="$tans"
6101
6102 : translate upper to lower if necessary
6103 case "$mydomain" in
6104 *[A-Z]*)
6105         echo "(Normalizing case in your domain name)"
6106         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6107         ;;
6108 esac
6109
6110 : a little sanity check here
6111 case "$phostname" in
6112 '') ;;
6113 *)
6114         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6115         $myhostname$mydomain|$myhostname) ;;
6116         *)
6117                 case "$phostname" in
6118                 sed*)
6119                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6120                         ;;
6121                 *)
6122                         echo "(That doesn't agree with your $phostname command, by the way.)"
6123                         ;;
6124                 esac
6125         ;;
6126         esac
6127         ;;
6128 esac
6129
6130 $cat <<EOM
6131
6132 I need to get your e-mail address in Internet format if possible, i.e.
6133 something like user@host.domain. Please answer accurately since I have
6134 no easy means to double check it. The default value provided below
6135 is most probably close to the reality but may not be valid from outside
6136 your organization...
6137
6138 EOM
6139 cont=x
6140 while test "$cont"; do
6141         case "$cf_email" in
6142         '') dflt="$cf_by@$myhostname$mydomain";;
6143         *) dflt="$cf_email";;
6144         esac
6145         rp='What is your e-mail address?'
6146         . ./myread
6147         cf_email="$ans"
6148         case "$cf_email" in
6149         *@*.*) cont='' ;;
6150         *)
6151                 rp='Address does not look like an Internet one.  Use it anyway?'
6152                 case "$fastread" in
6153                 yes) dflt=y ;;
6154                 *) dflt=n ;;
6155                 esac
6156                 . ./myread
6157                 case "$ans" in
6158                 y*) cont='' ;;
6159                 *) echo " " ;;
6160                 esac
6161                 ;;
6162         esac
6163 done
6164
6165 $cat <<EOM
6166
6167 If you or somebody else will be maintaining perl at your site, please
6168 fill in the correct e-mail address here so that they may be contacted
6169 if necessary. Currently, the "perlbug" program included with perl
6170 will send mail to this address in addition to perlbug@perl.com. You may
6171 enter "none" for no administrator.
6172
6173 EOM
6174 case "$perladmin" in
6175 '') dflt="$cf_email";;
6176 *) dflt="$perladmin";;
6177 esac
6178 rp='Perl administrator e-mail address'
6179 . ./myread
6180 perladmin="$ans"
6181
6182 : figure out how to guarantee perl startup
6183 case "$startperl" in
6184 '')
6185         case "$sharpbang" in
6186         *!)
6187                 $cat <<EOH
6188
6189 I can use the #! construct to start perl on your system. This will
6190 make startup of perl scripts faster, but may cause problems if you
6191 want to share those scripts and perl is not in a standard place
6192 ($binexp/perl) on all your platforms. The alternative is to force
6193 a shell by starting the script with a single ':' character.
6194
6195 EOH
6196                 dflt="$binexp/perl"
6197                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6198                 . ./myread
6199                 case "$ans" in
6200                 none)   startperl=": # use perl";;
6201                 *)      startperl="#!$ans"
6202                         if $test 30 -lt `echo "$ans" | wc -c`; then
6203                                 $cat >&4 <<EOM
6204
6205 WARNING:  Some systems limit the #! command to 32 characters.
6206 If you experience difficulty running Perl scripts with #!, try
6207 installing Perl in a directory with a shorter pathname.
6208
6209 EOM
6210                         fi ;;
6211                 esac
6212                 ;;
6213         *) startperl=": # use perl"
6214                 ;;
6215         esac
6216         ;;
6217 esac
6218 echo "I'll use $startperl to start perl scripts."
6219
6220 : figure best path for perl in scripts
6221 case "$perlpath" in
6222 '')
6223         perlpath="$binexp/perl"
6224         case "$startperl" in
6225         *!*) ;;
6226         *)
6227                 $cat <<EOH
6228
6229 I will use the "eval 'exec'" idiom to start Perl on your system.
6230 I can use the full path of your Perl binary for this purpose, but
6231 doing so may cause problems if you want to share those scripts and
6232 Perl is not always in a standard place ($binexp/perl).
6233
6234 EOH
6235                 dflt="$binexp/perl"
6236                 rp="What path shall I use in \"eval 'exec'\"?"
6237                 . ./myread
6238                 perlpath="$ans"
6239                 ;;
6240         esac
6241         ;;
6242 esac
6243 case "$startperl" in
6244 *!*)    ;;
6245 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6246 esac
6247
6248 : determine where public executable scripts go
6249 set scriptdir scriptdir
6250 eval $prefixit
6251 case "$scriptdir" in
6252 '')
6253         dflt="$bin"
6254         : guess some guesses
6255         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6256         $test -d /usr/share/bin     && dflt=/usr/share/bin
6257         $test -d /usr/local/script  && dflt=/usr/local/script
6258         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6259         $test -d $prefixexp/script  && dflt=$prefixexp/script
6260         set dflt
6261         eval $prefixup
6262         ;;
6263 *)  dflt="$scriptdir"
6264         ;;
6265 esac
6266 $cat <<EOM
6267  
6268 Some installations have a separate directory just for executable scripts so
6269 that they can mount it across multiple architectures but keep the scripts in
6270 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6271 Or you might just lump your scripts in with all your other executables.
6272  
6273 EOM
6274 fn=d~
6275 rp='Where do you keep publicly executable scripts?'
6276 . ./getfile
6277 if $test "X$ansexp" != "X$scriptdirexp"; then
6278         installscript=''
6279 fi
6280 scriptdir="$ans"
6281 scriptdirexp="$ansexp"
6282 : Change installation prefix, if necessary.
6283 if $test X"$prefix" != X"$installprefix"; then
6284         installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'`
6285 else
6286         installscript="$scriptdirexp"
6287 fi
6288
6289 $cat <<EOM
6290
6291 After $package is installed, you may wish to install various
6292 add-on modules and utilities.  Typically, these add-ons will
6293 be installed under $prefix with the rest
6294 of this package.  However, you may wish to install such add-ons
6295 elsewhere under a different prefix.
6296
6297 If you do not wish to put everything under a single prefix, that's
6298 ok.  You will be prompted for the individual locations; this siteprefix
6299 is only used to suggest the defaults.
6300
6301 The default should be fine for most people.
6302
6303 EOM
6304 fn=d~+
6305 rp='Installation prefix to use for add-on modules and utilities?'
6306 : XXX Here might be another good place for an installstyle setting.
6307 case "$siteprefix" in
6308 '') dflt=$prefix ;;
6309 *)  dflt=$siteprefix ;;
6310 esac
6311 . ./getfile
6312 oldsiteprefix=''
6313 case "$siteprefix" in
6314 '') ;;
6315 *)
6316         case "$ans" in
6317         "$prefix") ;;
6318         *) oldsiteprefix="$prefix";;
6319         esac
6320         ;;
6321 esac
6322 siteprefix="$ans"
6323 siteprefixexp="$ansexp"
6324
6325 : determine where site specific libraries go.
6326 : Usual default is /usr/local/lib/perl5/site_perl
6327 : The default "style" setting is made in installstyle.U
6328 : XXX No longer works with Prefixit stuff.
6329 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6330 case "$installstyle" in
6331 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6332 *)       dflt=$siteprefix/lib/site_$prog ;;
6333 esac
6334 $cat <<EOM
6335
6336 The installation process will create a directory for
6337 site-specific extensions and modules.  Most users find it convenient
6338 to place all site-specific files in this directory rather than in the
6339 main distribution directory.
6340
6341 EOM
6342 fn=d~+
6343 rp='Pathname for the site-specific library files?'
6344 . ./getfile
6345 sitelib="$ans"
6346 sitelibexp="$ansexp"
6347 : Change installation prefix, if necessary.
6348 if $test X"$prefix" != X"$installprefix"; then
6349         installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'`
6350 else
6351         installsitelib="$sitelibexp"
6352 fi
6353
6354 : determine where site specific architecture-dependent libraries go.
6355 : sitelib  default is /usr/local/lib/perl5/site_perl/
6356 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6357 : sitelib may have an optional trailing /share.
6358 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6359 tdflt="$tdflt/$apiversion/$archname"
6360 set sitearch sitearch none
6361 eval $prefixit
6362 case "$sitearch" in
6363 '')     dflt="$tdflt" ;;
6364 *)      dflt="$sitearch" ;;
6365 esac
6366 $cat <<EOM
6367
6368 The installation process will also create a directory for
6369 architecture-dependent site-specific extensions and modules.
6370
6371 EOM
6372 fn=nd~+
6373 rp='Pathname for the site-specific architecture-dependent library files?'
6374 . ./getfile
6375 sitearch="$ans"
6376 sitearchexp="$ansexp"
6377 : Change installation prefix, if necessary.
6378 if $test X"$prefix" != X"$installprefix"; then
6379         installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'`
6380 else
6381         installsitearch="$sitearchexp"
6382 fi
6383
6384 cat <<EOM
6385
6386 Previous version of $package used the standard IO mechanisms as defined
6387 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6388 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6389 the default.  This abstraction layer can use AT&T's sfio (if you already
6390 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6391 problems with some extension modules.  Using PerlIO with stdio is safe,
6392 but it is slower than plain stdio and therefore is not the default.
6393
6394 If this doesn't make any sense to you, just accept the default 'n'.
6395 EOM
6396 case "$useperlio" in
6397 $define|true|[yY]*)     dflt='y';;
6398 *) dflt='n';;
6399 esac
6400 rp='Use the experimental PerlIO abstraction layer?'
6401 . ./myread
6402 case "$ans" in
6403 y|Y) 
6404         val="$define"
6405         ;;     
6406 *)      
6407         echo "Ok, doing things the stdio way"
6408         val="$undef"
6409         ;;
6410 esac
6411 set useperlio
6412 eval $setvar 
6413
6414 : Check how to convert floats to strings.
6415 if test "X$d_Gconvert" = X; then
6416         echo " "
6417         echo "Checking for an efficient way to convert floats to strings."
6418         $cat >try.c <<'EOP'
6419 #ifdef TRY_gconvert
6420 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6421 char *myname = "gconvert";
6422 #endif
6423 #ifdef TRY_gcvt
6424 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6425 char *myname = "gcvt";
6426 #endif
6427 #ifdef TRY_sprintf
6428 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6429 char *myname = "sprintf";
6430 #endif
6431
6432 #include <stdio.h>
6433
6434 int
6435 checkit(expect, got)
6436 char *expect;
6437 char *got;
6438 {
6439     if (strcmp(expect, got)) {
6440                 printf("%s oddity:  Expected %s, got %s\n",
6441                         myname, expect, got);
6442                 exit(1);
6443         }
6444 }
6445
6446 int main()
6447
6448         char buf[64]; 
6449         buf[63] = '\0';
6450
6451         /* This must be 1st test on (which?) platform */
6452         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6453         Gconvert(0.1, 8, 0, buf);
6454         checkit("0.1", buf);
6455
6456         Gconvert(1.0, 8, 0, buf); 
6457         checkit("1", buf);
6458
6459         Gconvert(0.0, 8, 0, buf); 
6460         checkit("0", buf);
6461
6462         Gconvert(-1.0, 8, 0, buf); 
6463         checkit("-1", buf);
6464
6465         /* Some Linux gcvt's give 1.e+5 here. */
6466         Gconvert(100000.0, 8, 0, buf); 
6467         checkit("100000", buf);
6468         
6469         /* Some Linux gcvt's give -1.e+5 here. */
6470         Gconvert(-100000.0, 8, 0, buf); 
6471         checkit("-100000", buf);
6472
6473         exit(0);
6474 }
6475 EOP
6476         case "$d_Gconvert" in
6477         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6478         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6479         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6480         *) xxx_list='gconvert gcvt sprintf' ;;
6481         esac
6482
6483         for xxx_convert in $xxx_list; do
6484                 echo "Trying $xxx_convert"
6485                 $rm -f try try$_o
6486                 set try -DTRY_$xxx_convert
6487                 if eval $compile; then
6488                         echo "$xxx_convert" found. >&4
6489                         if ./try; then
6490                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6491                                 break;
6492                         else
6493                                 echo "...But $xxx_convert didn't work as I expected."
6494                         fi
6495                 else
6496                         echo "$xxx_convert NOT found." >&4
6497                 fi
6498         done
6499                 
6500         case "$xxx_convert" in
6501         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6502         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6503         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6504         esac
6505 fi
6506
6507 : Initialize h_fcntl
6508 h_fcntl=false
6509
6510 : Initialize h_sysfile
6511 h_sysfile=false
6512
6513 : access call always available on UNIX
6514 set access d_access
6515 eval $inlibc
6516
6517 : locate the flags for 'access()'
6518 case "$d_access" in
6519 "$define")
6520         echo " "
6521         $cat >access.c <<'EOCP'
6522 #include <sys/types.h>
6523 #ifdef I_FCNTL
6524 #include <fcntl.h>
6525 #endif
6526 #ifdef I_SYS_FILE
6527 #include <sys/file.h>
6528 #endif
6529 #ifdef I_UNISTD
6530 #include <unistd.h>
6531 #endif
6532 int main() {
6533         exit(R_OK);
6534 }
6535 EOCP
6536         : check sys/file.h first, no particular reason here
6537         if $test `./findhdr sys/file.h` && \
6538                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6539                 h_sysfile=true;
6540                 echo "<sys/file.h> defines the *_OK access constants." >&4
6541         elif $test `./findhdr fcntl.h` && \
6542                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6543                 h_fcntl=true;
6544                 echo "<fcntl.h> defines the *_OK access constants." >&4
6545         elif $test `./findhdr unistd.h` && \
6546                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6547                 echo "<unistd.h> defines the *_OK access constants." >&4
6548         else
6549                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6550         fi
6551         ;;
6552 esac
6553 $rm -f access*
6554
6555 : see if accessx exists
6556 set accessx d_accessx
6557 eval $inlibc
6558
6559 : see if alarm exists
6560 set alarm d_alarm
6561 eval $inlibc
6562
6563 : Look for GNU-cc style attribute checking
6564 echo " "
6565 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6566 $cat >attrib.c <<'EOCP'
6567 #include <stdio.h>
6568 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6569 EOCP
6570 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6571         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6572                 echo "Your C compiler doesn't fully support __attribute__."
6573                 val="$undef"
6574         else
6575                 echo "Your C compiler supports __attribute__."
6576                 val="$define"
6577         fi
6578 else
6579         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6580         val="$undef"
6581 fi
6582 set d_attribut
6583 eval $setvar
6584 $rm -f attrib*
6585
6586 : see if bcmp exists
6587 set bcmp d_bcmp
6588 eval $inlibc
6589
6590 : see if bcopy exists
6591 set bcopy d_bcopy
6592 eval $inlibc
6593
6594 : see if this is a unistd.h system
6595 set unistd.h i_unistd
6596 eval $inhdr
6597
6598 : see if getpgrp exists
6599 set getpgrp d_getpgrp
6600 eval $inlibc
6601
6602 case "$d_getpgrp" in
6603 "$define")
6604         echo " "
6605         echo "Checking to see which flavor of getpgrp is in use..."
6606         $cat >set.c <<EOP
6607 #$i_unistd I_UNISTD
6608 #include <sys/types.h>
6609 #ifdef I_UNISTD
6610 #  include <unistd.h>
6611 #endif
6612 int main()
6613 {
6614         if (getuid() == 0) {
6615                 printf("(I see you are running Configure as super-user...)\n");
6616                 setuid(1);
6617         }
6618 #ifdef TRY_BSD_PGRP
6619         if (getpgrp(1) == 0)
6620                 exit(0);
6621 #else
6622         if (getpgrp() > 0)
6623                 exit(0);
6624 #endif
6625         exit(1);
6626 }
6627 EOP
6628         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6629                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6630                 val="$define"
6631         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6632                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6633                 val="$undef"
6634         else
6635                 echo "I can't seem to compile and run the test program."
6636                 if ./usg; then
6637                         xxx="a USG one, i.e. you use getpgrp()."
6638                 else
6639                         # SVR4 systems can appear rather BSD-ish.
6640                         case "$i_unistd" in
6641                         $undef)
6642                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6643                                 val="$define"
6644                                 ;;
6645                         $define)
6646                                 xxx="probably a USG one, i.e. you use getpgrp()."
6647                                 val="$undef"
6648                                 ;;
6649                         esac
6650                 fi
6651                 echo "Assuming your getpgrp is $xxx" >&4
6652         fi
6653         ;;
6654 *) val="$undef";;
6655 esac
6656 set d_bsdgetpgrp
6657 eval $setvar
6658 $rm -f set set.c
6659
6660 : see if setpgrp exists
6661 set setpgrp d_setpgrp
6662 eval $inlibc
6663
6664 case "$d_setpgrp" in
6665 "$define")
6666         echo " "
6667         echo "Checking to see which flavor of setpgrp is in use..."
6668         $cat >set.c <<EOP
6669 #$i_unistd I_UNISTD
6670 #include <sys/types.h>
6671 #ifdef I_UNISTD
6672 #  include <unistd.h>
6673 #endif
6674 int main()
6675 {
6676         if (getuid() == 0) {
6677                 printf("(I see you are running Configure as super-user...)\n");
6678                 setuid(1);
6679         }
6680 #ifdef TRY_BSD_PGRP
6681         if (-1 == setpgrp(1, 1))
6682                 exit(0);
6683 #else
6684         if (setpgrp() != -1)
6685                 exit(0);
6686 #endif
6687         exit(1);
6688 }
6689 EOP
6690         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6691                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6692                 val="$define"
6693         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6694                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6695                 val="$undef"
6696         else
6697                 echo "(I can't seem to compile and run the test program.)"
6698                 if ./usg; then
6699                         xxx="a USG one, i.e. you use setpgrp()."
6700                 else
6701                         # SVR4 systems can appear rather BSD-ish.
6702                         case "$i_unistd" in
6703                         $undef)
6704                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6705                                 val="$define"
6706                                 ;;
6707                         $define)
6708                                 xxx="probably a USG one, i.e. you use setpgrp()."
6709                                 val="$undef"
6710                                 ;;
6711                         esac
6712                 fi
6713                 echo "Assuming your setpgrp is $xxx" >&4
6714         fi
6715         ;;
6716 *) val="$undef";;
6717 esac
6718 set d_bsdsetpgrp
6719 eval $setvar
6720 $rm -f set set.c
6721 : see if bzero exists
6722 set bzero d_bzero
6723 eval $inlibc
6724
6725 : check for lengths of integral types
6726 echo " "
6727 case "$intsize" in
6728 '')
6729         echo "Checking to see how big your integers are..." >&4
6730         $cat >intsize.c <<'EOCP'
6731 #include <stdio.h>
6732 int main()
6733 {
6734         printf("intsize=%d;\n", sizeof(int));
6735         printf("longsize=%d;\n", sizeof(long));
6736         printf("shortsize=%d;\n", sizeof(short));
6737         exit(0);
6738 }
6739 EOCP
6740         set intsize
6741         if eval $compile_ok && ./intsize > /dev/null; then
6742                 eval `./intsize`
6743                 echo "Your integers are $intsize bytes long."
6744                 echo "Your long integers are $longsize bytes long."
6745                 echo "Your short integers are $shortsize bytes long."
6746         else
6747                 $cat >&4 <<EOM
6748 !
6749 Help! I can't compile and run the intsize test program: please enlighten me!
6750 (This is probably a misconfiguration in your system or libraries, and
6751 you really ought to fix it.  Still, I'll try anyway.)
6752 !
6753 EOM
6754                 dflt=4
6755                 rp="What is the size of an integer (in bytes)?"
6756                 . ./myread
6757                 intsize="$ans"
6758                 dflt=$intsize
6759                 rp="What is the size of a long integer (in bytes)?"
6760                 . ./myread
6761                 longsize="$ans"
6762                 dflt=2
6763                 rp="What is the size of a short integer (in bytes)?"
6764                 . ./myread
6765                 shortsize="$ans"
6766         fi
6767         ;;
6768 esac
6769 $rm -f intsize intsize.*
6770
6771 : see if signal is declared as pointer to function returning int or void
6772 echo " "
6773 xxx=`./findhdr signal.h`
6774 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6775 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6776         echo "You have int (*signal())() instead of void." >&4
6777         val="$undef"
6778 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6779         echo "You have void (*signal())()." >&4
6780         val="$define"
6781 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6782         echo "You have int (*signal())() instead of void." >&4
6783         val="$undef"
6784 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6785         echo "You have void (*signal())()." >&4
6786         val="$define"
6787 else
6788         case "$d_voidsig" in
6789         '')
6790         echo "I can't determine whether signal handler returns void or int..." >&4
6791                 dflt=void
6792                 rp="What type does your signal handler return?"
6793                 . ./myread
6794                 case "$ans" in
6795                 v*) val="$define";;
6796                 *) val="$undef";;
6797                 esac;;
6798         "$define")
6799                 echo "As you already told me, signal handler returns void." >&4
6800                 val="$define"
6801                 ;;
6802         *)      echo "As you already told me, signal handler returns int." >&4
6803                 val="$undef"
6804                 ;;
6805         esac
6806 fi
6807 set d_voidsig
6808 eval $setvar
6809 case "$d_voidsig" in
6810 "$define") signal_t="void";;
6811 *) signal_t="int";;
6812 esac
6813 $rm -f $$.tmp
6814
6815 : check for ability to cast large floats to 32-bit ints.
6816 echo " "
6817 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6818 if $test "$intsize" -ge 4; then
6819         xxx=int
6820 else
6821         xxx=long
6822 fi
6823 $cat >try.c <<EOCP
6824 #include <stdio.h>
6825 #include <sys/types.h>
6826 #include <signal.h>
6827 $signal_t blech(s) int s; { exit(3); }
6828 int main()
6829 {
6830         $xxx i32;
6831         double f, g;
6832         int result = 0;
6833         char str[16];
6834         signal(SIGFPE, blech);
6835
6836         /* Don't let compiler optimize the test away.  Store the number 
6837            in a writable string for gcc to pass to sscanf under HP/UX.
6838         */
6839         sprintf(str, "2147483647");
6840         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6841         g = 10 * f;
6842         i32  = ($xxx) g;
6843
6844         /* x86 processors will probably give 0x8000 0000, which is a
6845        sign change.  We don't want that.  We want to mimic SPARC
6846            behavior here, which is to preserve the sign and give
6847            back 0x7fff ffff.
6848         */
6849         if (i32 != ($xxx) f)
6850                 result |= 1;
6851         exit(result);
6852 }
6853 EOCP
6854 set try
6855 if eval $compile_ok; then
6856         ./try
6857         yyy=$?
6858 else
6859         echo "(I can't seem to compile the test program--assuming it can't)"
6860         yyy=1
6861 fi
6862 case "$yyy" in
6863 0)      val="$define"
6864         echo "Yup, it can."
6865         ;;
6866 *)      val="$undef"
6867         echo "Nope, it can't."
6868         ;;
6869 esac
6870 set d_casti32
6871 eval $setvar
6872 $rm -f try try.*
6873
6874 : check for ability to cast negative floats to unsigned
6875 echo " "
6876 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6877 $cat >try.c <<EOCP
6878 #include <stdio.h>
6879 #include <sys/types.h>
6880 #include <signal.h>
6881 $signal_t blech(s) int s; { exit(7); }
6882 $signal_t blech_in_list(s) int s; { exit(4); }
6883 unsigned long dummy_long(p) unsigned long p; { return p; }
6884 unsigned int dummy_int(p) unsigned int p; { return p; }
6885 unsigned short dummy_short(p) unsigned short p; { return p; }
6886 int main()
6887 {
6888         double f;
6889         unsigned long along;
6890         unsigned int aint;
6891         unsigned short ashort;
6892         int result = 0;
6893         char str[16];
6894         
6895         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6896            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6897            optimized the whole file away
6898         */
6899         /* Store the number in a writable string for gcc to pass to 
6900            sscanf under HP/UX.
6901         */
6902         sprintf(str, "-123");
6903         sscanf(str, "%lf", &f);  /* f = -123.; */
6904
6905         signal(SIGFPE, blech);
6906         along = (unsigned long)f;
6907         aint = (unsigned int)f;
6908         ashort = (unsigned short)f;
6909         if (along != (unsigned long)-123)
6910                 result |= 1;
6911         if (aint != (unsigned int)-123)
6912                 result |= 1;
6913         if (ashort != (unsigned short)-123)
6914                 result |= 1;
6915         sprintf(str, "1073741824.");
6916         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6917         f = f + f;
6918         along = 0;
6919         along = (unsigned long)f;
6920         if (along != 0x80000000)
6921                 result |= 2;
6922         f -= 1.;
6923         along = 0;
6924         along = (unsigned long)f;
6925         if (along != 0x7fffffff)
6926                 result |= 1;
6927         f += 2.;
6928         along = 0;
6929         along = (unsigned long)f;
6930         if (along != 0x80000001)
6931                 result |= 2;
6932         if (result)
6933                 exit(result);
6934         signal(SIGFPE, blech_in_list);
6935         sprintf(str, "123.");
6936         sscanf(str, "%lf", &f);  /* f = 123.; */
6937         along = dummy_long((unsigned long)f);
6938         aint = dummy_int((unsigned int)f);
6939         ashort = dummy_short((unsigned short)f);
6940         if (along != (unsigned long)123)
6941                 result |= 4;
6942         if (aint != (unsigned int)123)
6943                 result |= 4;
6944         if (ashort != (unsigned short)123)
6945                 result |= 4;
6946         exit(result);
6947
6948 }
6949 EOCP
6950 set try
6951 if eval $compile_ok; then
6952         ./try
6953         castflags=$?
6954 else
6955         echo "(I can't seem to compile the test program--assuming it can't)"
6956         castflags=7
6957 fi
6958 case "$castflags" in
6959 0)      val="$define"
6960         echo "Yup, it can."
6961         ;;
6962 *)      val="$undef"
6963         echo "Nope, it can't."
6964         ;;
6965 esac
6966 set d_castneg
6967 eval $setvar
6968 $rm -f try.*
6969
6970 : see if vprintf exists
6971 echo " "
6972 if set vprintf val -f d_vprintf; eval $csym; $val; then
6973         echo 'vprintf() found.' >&4
6974         val="$define"
6975         $cat >vprintf.c <<'EOF'
6976 #include <varargs.h>
6977
6978 int main() { xxx("foo"); }
6979
6980 xxx(va_alist)
6981 va_dcl
6982 {
6983         va_list args;
6984         char buf[10];
6985
6986         va_start(args);
6987         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6988 }
6989 EOF
6990         set vprintf
6991         if eval $compile && ./vprintf; then
6992                 echo "Your vsprintf() returns (int)." >&4
6993                 val2="$undef"
6994         else
6995                 echo "Your vsprintf() returns (char*)." >&4
6996                 val2="$define"
6997         fi
6998 else
6999         echo 'vprintf() NOT found.' >&4
7000                 val="$undef"
7001                 val2="$undef"
7002 fi
7003 set d_vprintf
7004 eval $setvar
7005 val=$val2
7006 set d_charvspr
7007 eval $setvar
7008
7009 : see if chown exists
7010 set chown d_chown
7011 eval $inlibc
7012
7013 : see if chroot exists
7014 set chroot d_chroot
7015 eval $inlibc
7016
7017 : see if chsize exists
7018 set chsize d_chsize
7019 eval $inlibc
7020
7021 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7022 while $test $# -ge 2; do
7023         case "$1" in
7024         $define) echo "#include <$2>";;
7025         esac ;
7026     shift 2;
7027 done > try.c;
7028 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7029 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7030         val="$define";
7031 else
7032         val="$undef";
7033 fi;
7034 set $varname;
7035 eval $setvar;
7036 $rm -f try.c try.o'
7037
7038 : see if this is a sys/uio.h system
7039 set sys/uio.h i_sysuio
7040 eval $inhdr
7041
7042 echo "Checking to see if your system supports struct iovec..." >&4
7043 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7044 eval $hasfield
7045 case "$d_iovec_s" in
7046 "$define")      echo "Yup, it does." >&4
7047                 ;;
7048 *)              echo "Nope, it doesn't." >&4
7049                 ;;
7050 esac
7051
7052 socketlib=''
7053 sockethdr=''
7054 : see whether socket exists
7055 echo " "
7056 $echo $n "Hmm... $c" >&4
7057 if set socket val -f d_socket; eval $csym; $val; then
7058         echo "Looks like you have Berkeley networking support." >&4
7059         d_socket="$define"
7060         if set setsockopt val -f; eval $csym; $val; then
7061                 d_oldsock="$undef"
7062         else
7063                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7064                 d_oldsock="$define"
7065         fi
7066 else
7067         if $contains socklib libc.list >/dev/null 2>&1; then
7068                 echo "Looks like you have Berkeley networking support." >&4
7069                 d_socket="$define"
7070                 : we will have to assume that it supports the 4.2 BSD interface
7071                 d_oldsock="$undef"
7072         else
7073                 echo "You don't have Berkeley networking in libc$_a..." >&4
7074                 if test "X$d_socket" = "X$define"; then
7075                    echo "...but you seem to believe that you have sockets." >&4
7076                 else
7077                         for net in net socket
7078                         do
7079                                 if test -f /usr/lib/lib$net$_a; then
7080                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7081                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7082                                         if $contains socket libc.list >/dev/null 2>&1; then
7083                                                 d_socket="$define"
7084                                                 socketlib="-l$net"
7085                                                 case "$net" in
7086                                                 net)
7087                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7088                                                         sockethdr="-I/usr/netinclude"
7089                                                         ;;
7090                                                 esac
7091                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7092                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7093                                                         d_oldsock="$undef"
7094                                                 else
7095                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7096                                                         d_oldsock="$define"
7097                                                 fi
7098                                                 break
7099                                         fi
7100                                 fi
7101                         done
7102                         if test "X$d_socket" != "X$define"; then
7103                            echo "or anywhere else I see." >&4
7104                            d_socket="$undef"
7105                            d_oldsock="$undef"
7106                         fi
7107                 fi
7108         fi
7109 fi
7110
7111 : see if socketpair exists
7112 set socketpair d_sockpair
7113 eval $inlibc
7114
7115
7116 echo " "
7117 echo "Checking the availability of certain socket constants..." >& 4
7118 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7119         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7120         $cat >try.c <<EOF
7121 #include <sys/types.h>
7122 #include <sys/socket.h>
7123 int main() {
7124     int i = $ENUM;
7125 }
7126 EOF
7127         val="$undef"
7128         set try; if eval $compile; then
7129                 val="$define"
7130         fi
7131         set d_${enum}; eval $setvar
7132         $rm -f try.c try
7133 done
7134
7135 set sendmsg d_sendmsg
7136 eval $inlibc
7137
7138 set recvmsg d_recvmsg
7139 eval $inlibc
7140
7141 echo " "
7142 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7143 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7144 eval $hasfield
7145 case "$d_msghdr_s" in
7146 "$define")      echo "Yup, it does." >&4
7147                 ;;
7148 *)              echo "Nope, it doesn't." >&4
7149                 ;;
7150 esac
7151
7152 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7153 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7154 eval $hasfield
7155 case "$d_cmsghdr_s" in
7156 "$define")      echo "Yup, it does." >&4
7157                 ;;
7158 *)              echo "Nope, it doesn't." >&4
7159                 ;;
7160 esac
7161
7162 : check for const keyword
7163 echo " "
7164 echo 'Checking to see if your C compiler knows about "const"...' >&4
7165 $cat >const.c <<'EOCP'
7166 typedef struct spug { int drokk; } spug;
7167 int main()
7168 {
7169         const char *foo;
7170         const spug y;
7171 }
7172 EOCP
7173 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7174         val="$define"
7175         echo "Yup, it does."
7176 else
7177         val="$undef"
7178         echo "Nope, it doesn't."
7179 fi
7180 set d_const
7181 eval $setvar
7182
7183 : see if crypt exists
7184 echo " "
7185 if set crypt val -f d_crypt; eval $csym; $val; then
7186         echo 'crypt() found.' >&4
7187         val="$define"
7188         cryptlib=''
7189 else
7190         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7191         if $test -z "$cryptlib"; then
7192                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7193         else
7194                 cryptlib=-lcrypt
7195         fi
7196         if $test -z "$cryptlib"; then
7197                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7198         else
7199                 cryptlib=-lcrypt
7200         fi
7201         if $test -z "$cryptlib"; then
7202                 cryptlib=`./loc libcrypt$_a "" $libpth`
7203         else
7204                 cryptlib=-lcrypt
7205         fi
7206         if $test -z "$cryptlib"; then
7207                 echo 'crypt() NOT found.' >&4
7208                 val="$undef"
7209         else
7210                 val="$define"
7211         fi
7212 fi
7213 set d_crypt
7214 eval $setvar
7215
7216 : get csh whereabouts
7217 case "$csh" in
7218 'csh') val="$undef" ;;
7219 *) val="$define" ;;
7220 esac
7221 set d_csh
7222 eval $setvar
7223 : Respect a hint or command line value for full_csh.
7224 case "$full_csh" in
7225 '') full_csh=$csh ;;
7226 esac
7227
7228 : see if cuserid exists
7229 set cuserid d_cuserid
7230 eval $inlibc
7231
7232 : see if this is a limits.h system
7233 set limits.h i_limits
7234 eval $inhdr
7235
7236 : see if this is a float.h system
7237 set float.h i_float
7238 eval $inhdr
7239
7240 : See if number of significant digits in a double precision number is known
7241 echo " "
7242 $cat >dbl_dig.c <<EOM
7243 #$i_limits I_LIMITS
7244 #$i_float I_FLOAT
7245 #ifdef I_LIMITS
7246 #include <limits.h>
7247 #endif
7248 #ifdef I_FLOAT
7249 #include <float.h>
7250 #endif
7251 #ifdef DBL_DIG
7252 printf("Contains DBL_DIG");
7253 #endif
7254 EOM
7255 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7256 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7257         echo "DBL_DIG found." >&4
7258         val="$define"
7259 else
7260         echo "DBL_DIG NOT found." >&4
7261         val="$undef"
7262 fi
7263 $rm -f dbl_dig.?
7264 set d_dbl_dig
7265 eval $setvar
7266
7267
7268 if $test X"$use64bits" = X"$define"; then
7269         : see if dbminit64 exists
7270         set dbminit64 d_dbminit64
7271         eval $inlibc
7272
7273         : see if dbmclose64 exists
7274         set dbmclose64 d_dbmclose64
7275         eval $inlibc
7276
7277         : see if fetch64 exists
7278         set fetch64 d_fetch64
7279         eval $inlibc
7280
7281         : see if store64 exists
7282         set store64 d_store64
7283         eval $inlibc
7284
7285         : see if delete64 exists
7286         set delete64 d_delete64
7287         eval $inlibc
7288
7289         : see if firstkey64 exists
7290         set firstkey64 d_firstkey64
7291         eval $inlibc
7292
7293         : see if nextkey64 exists
7294         set nextkey64 d_nextkey64
7295         eval $inlibc
7296 else
7297         val="$undef"
7298         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7299         do
7300                 set $xxx
7301                 eval $setvar
7302         done
7303 fi
7304
7305 : see if difftime exists
7306 set difftime d_difftime
7307 eval $inlibc
7308
7309 : see if sys/stat.h is available
7310 set sys/stat.h i_sysstat
7311 eval $inhdr
7312
7313 : see if this is a dirent system
7314 echo " "
7315 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7316         val="$define"
7317         echo "<dirent.h> found." >&4
7318 else
7319         val="$undef"
7320         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7321                 echo "<sys/dir.h> found." >&4
7322                 echo " "
7323         else
7324                 xinc=`./findhdr sys/ndir.h`
7325         fi
7326         echo "<dirent.h> NOT found." >&4
7327 fi
7328 set i_dirent
7329 eval $setvar
7330
7331 : Look for type of directory structure.
7332 echo " "
7333 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7334
7335 case "$direntrytype" in
7336 ''|' ')
7337         case "$i_dirent" in
7338         $define) guess1='struct dirent' ;;
7339         *) guess1='struct direct'  ;;
7340         esac
7341         ;;
7342 *)      guess1="$direntrytype"
7343         ;;
7344 esac
7345
7346 case "$guess1" in
7347 'struct dirent') guess2='struct direct' ;;
7348 *) guess2='struct dirent' ;;
7349 esac
7350                 
7351 if $contains "$guess1" try.c >/dev/null 2>&1; then
7352         direntrytype="$guess1"
7353         echo "Your directory entries are $direntrytype." >&4
7354 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7355         direntrytype="$guess2"
7356         echo "Your directory entries seem to be $direntrytype." >&4
7357 else
7358         echo "I don't recognize your system's directory entries." >&4
7359         rp="What type is used for directory entries on this system?"
7360         dflt="$guess1"
7361         . ./myread
7362         direntrytype="$ans"
7363 fi
7364 $rm -f try.c
7365
7366
7367 : see if the directory entry stores field length
7368 echo " "
7369 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7370 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7371         echo "Good, your directory entry keeps length information in d_namlen." >&4
7372         val="$define"
7373 else
7374         echo "Your directory entry does not know about the d_namlen field." >&4
7375         val="$undef"
7376 fi
7377 set d_dirnamlen
7378 eval $setvar
7379 $rm -f try.c
7380
7381
7382 if $test X"$use64bits" = X"$define"; then
7383         : see if fstat64 exists
7384         set fstat64 d_fstat64
7385         eval $inlibc
7386
7387         : see if ftruncate64 exists
7388         set ftruncate64 d_ftruncate64
7389         eval $inlibc
7390
7391         : see if lockf64 exists
7392         set lockf64 d_lockf64
7393         eval $inlibc
7394
7395         : see if llseek exists
7396         set llseek d_llseek
7397         eval $inlibc
7398
7399         : see if lseek64 exists
7400         set lseek64 d_lseek64
7401         eval $inlibc
7402
7403         : see if lstat64 exists
7404         set lstat64 d_lstat64
7405         eval $inlibc
7406
7407         : see if open64 exists
7408         set open64 d_open64
7409         eval $inlibc
7410
7411         : see if opendir64 exists
7412         set opendir64 d_opendir64
7413         eval $inlibc
7414
7415         : see if readdir64 exists
7416         set readdir64 d_readdir64
7417         eval $inlibc
7418
7419         : see if seekdir64 exists
7420         set seekdir64 d_seekdir64
7421         eval $inlibc
7422
7423         : see if stat64 exists
7424         set stat64 d_stat64
7425         eval $inlibc
7426
7427         : see if telldir64 exists
7428         set telldir64 d_telldir64
7429         eval $inlibc
7430
7431         : see if truncate64 exists
7432         set truncate64 d_truncate64
7433         eval $inlibc
7434
7435         : check for off64_t
7436         echo " "
7437         echo $n "Checking to see if your system supports off64_t...$c" >&4
7438         $cat >try.c <<EOCP
7439 #include <sys/types.h>
7440 #include <unistd.h>
7441 off64_t foo() { off64_t x; x = 7; return x; }'
7442 EOCP
7443         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7444                 val="$define"
7445                 echo " Yup, it does." >&4
7446         else
7447                 val="$undef"
7448                 echo " Nope, it doesn't." >&4
7449         fi
7450         $rm -f try.*
7451         set d_off64_t
7452         eval $setvar
7453
7454         : check for offset_t
7455         echo " "
7456         echo $n "Checking to see if your system supports offset_t...$c" >&4
7457         $cat >try.c <<EOCP
7458 #include <sys/types.h>
7459 #include <unistd.h>
7460 offset_t foo() { offset_t x; x = 7; return x; }'
7461 EOCP
7462         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7463                 val="$define"
7464                 echo " Yup, it does." >&4
7465         else
7466                 val="$undef"
7467                 echo " Nope, it doesn't." >&4
7468         fi
7469         $rm -f try.*
7470         set d_offset_t
7471         eval $setvar
7472
7473         : check for ino64_t
7474         echo " "
7475         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7476         val="$undef"
7477         case "$i_sysstat" in
7478         "$define" )
7479                 $cat >try.c <<EOCP
7480 #include <sys/types.h>
7481 #include <sys/stat.h>
7482 ino64_t foo() { ino64_t x; x = 7; return x; }'
7483 EOCP
7484                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7485                         val="$define"
7486                 fi
7487                 $rm -f try.*
7488                 ;;
7489         esac
7490         if $test "X$val" = X"$define"; then
7491                 echo " Yup, it does." >&4
7492         else
7493                 echo " Nope, it doesn't." >&4
7494         fi
7495         set d_ino64_t
7496         eval $setvar
7497
7498         : check for struct flock64
7499         echo " "
7500         echo "Checking to see if your system supports struct flock64..." >&4
7501         if $h_fcntl; then
7502                 set d_flock64_s flock64 l_len define fcntl.h
7503                 eval $hasfield
7504         else
7505                 val="$undef"
7506                 set d_flock64_s
7507                 eval $setvar
7508         fi
7509         case "$d_flock64_s" in
7510         "$define")      echo "Yup, it does." >&4
7511                         ;;
7512         *)              echo "Nope, it doesn't." >&4
7513                         ;;
7514         esac
7515
7516         : check for struct dirent64
7517         echo " "
7518         echo "Checking to see if your system supports struct dirent64..." >&4
7519         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7520         eval $hasfield
7521         case "$d_dirent64_s" in
7522         "$define")      echo "Yup, it does." >&4
7523                         ;;
7524         *)              echo "Nope, it doesn't." >&4
7525                         ;;
7526         esac
7527
7528 else
7529         val="$undef"
7530         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
7531         do
7532                 set $xxx
7533                 eval $setvar
7534         done
7535 fi
7536
7537 : see if dlerror exists
7538 xxx_runnm="$runnm"
7539 runnm=false
7540 set dlerror d_dlerror
7541 eval $inlibc
7542 runnm="$xxx_runnm"
7543
7544 : see if dlfcn is available
7545 set dlfcn.h i_dlfcn
7546 eval $inhdr
7547
7548 case "$usedl" in
7549 $define|y|true)
7550         $cat << EOM
7551
7552 On a few systems, the dynamically loaded modules that perl generates and uses
7553 will need a different extension than shared libs. The default will probably
7554 be appropriate.
7555
7556 EOM
7557         case "$dlext" in
7558         '')     dflt="$so" ;;
7559         *)      dflt="$dlext" ;;
7560         esac
7561         rp='What is the extension of dynamically loaded modules'
7562         . ./myread
7563         dlext="$ans"
7564         ;;
7565 *)
7566         dlext="none"
7567         ;;
7568 esac
7569
7570 : Check if dlsym need a leading underscore
7571 echo " "
7572 val="$undef"
7573
7574 case "$dlsrc" in
7575 dl_dlopen.xs)
7576         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7577         $cat >dyna.c <<'EOM'
7578 fred () { }
7579 EOM
7580
7581 $cat >fred.c<<EOM
7582
7583 #include <stdio.h>
7584 #$i_dlfcn I_DLFCN
7585 #ifdef I_DLFCN
7586 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7587 #else
7588 #include <sys/types.h>
7589 #include <nlist.h>
7590 #include <link.h>
7591 #endif
7592
7593 extern int fred() ;
7594
7595 int main()
7596 {
7597     void * handle ;
7598     void * symbol ;
7599 #ifndef RTLD_LAZY
7600     int mode = 1 ;
7601 #else
7602     int mode = RTLD_LAZY ;
7603 #endif
7604     handle = dlopen("./dyna.$dlext", mode) ;
7605     if (handle == NULL) {
7606         printf ("1\n") ;
7607         fflush (stdout) ;
7608         exit(0);
7609     }
7610     symbol = dlsym(handle, "fred") ;
7611     if (symbol == NULL) {
7612         /* try putting a leading underscore */
7613         symbol = dlsym(handle, "_fred") ;
7614         if (symbol == NULL) {
7615             printf ("2\n") ;
7616             fflush (stdout) ;
7617             exit(0);
7618         }
7619         printf ("3\n") ;
7620     }
7621     else
7622         printf ("4\n") ;
7623     fflush (stdout) ;
7624     exit(0);
7625 }
7626 EOM
7627         : Call the object file tmp-dyna.o in case dlext=o.
7628         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7629                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7630                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7631                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7632                 xxx=`./fred`
7633                 case $xxx in
7634                 1)      echo "Test program failed using dlopen." >&4
7635                         echo "Perhaps you should not use dynamic loading." >&4;;
7636                 2)      echo "Test program failed using dlsym." >&4
7637                         echo "Perhaps you should not use dynamic loading." >&4;;
7638                 3)      echo "dlsym needs a leading underscore" >&4
7639                         val="$define" ;;
7640                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7641                 esac
7642         else
7643                 echo "I can't compile and run the test program." >&4
7644         fi
7645         ;;
7646 esac
7647                 
7648 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7649
7650 set d_dlsymun
7651 eval $setvar
7652
7653 hasproto='varname=$1; func=$2; shift; shift;
7654 while $test $# -ge 2; do
7655         case "$1" in
7656         $define) echo "#include <$2>";;
7657         esac ;
7658     shift 2;
7659 done > try.c;
7660 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7661 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7662         echo "$func() prototype found.";
7663         val="$define";
7664 else
7665         echo "$func() prototype NOT found.";
7666         val="$undef";
7667 fi;
7668 set $varname;
7669 eval $setvar;
7670 $rm -f try.c tryout.c'
7671
7672 : see if prototype for drand48 is available
7673 echo " "
7674 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7675 eval $hasproto
7676
7677 : see if dup2 exists
7678 set dup2 d_dup2
7679 eval $inlibc
7680
7681 : see if eaccess exists
7682 set eaccess d_eaccess
7683 eval $inlibc
7684
7685 : see if endgrent exists
7686 set endgrent d_endgrent
7687 eval $inlibc
7688
7689 : see if endhostent exists
7690 set endhostent d_endhent
7691 eval $inlibc
7692
7693 : see if endnetent exists
7694 set endnetent d_endnent
7695 eval $inlibc
7696
7697 : see if endprotoent exists
7698 set endprotoent d_endpent
7699 eval $inlibc
7700
7701 : see if endpwent exists
7702 set endpwent d_endpwent
7703 eval $inlibc
7704
7705 : see if endservent exists
7706 set endservent d_endsent
7707 eval $inlibc
7708
7709 : see if endspent exists
7710 set endspent d_endspent
7711 eval $inlibc
7712
7713 : Locate the flags for 'open()'
7714 echo " "
7715 $cat >open3.c <<'EOCP'
7716 #include <sys/types.h>
7717 #ifdef I_FCNTL
7718 #include <fcntl.h>
7719 #endif
7720 #ifdef I_SYS_FILE
7721 #include <sys/file.h>
7722 #endif
7723 int main() {
7724         if(O_RDONLY);
7725 #ifdef O_TRUNC
7726         exit(0);
7727 #else
7728         exit(1);
7729 #endif
7730 }
7731 EOCP
7732 : check sys/file.h first to get FREAD on Sun
7733 if $test `./findhdr sys/file.h` && \
7734                 set open3 -DI_SYS_FILE && eval $compile; then
7735         h_sysfile=true;
7736         echo "<sys/file.h> defines the O_* constants..." >&4
7737         if ./open3; then
7738                 echo "and you have the 3 argument form of open()." >&4
7739                 val="$define"
7740         else
7741                 echo "but not the 3 argument form of open().  Oh, well." >&4
7742                 val="$undef"
7743         fi
7744 elif $test `./findhdr fcntl.h` && \
7745                 set open3 -DI_FCNTL && eval $compile; then
7746         h_fcntl=true;
7747         echo "<fcntl.h> defines the O_* constants..." >&4
7748         if ./open3; then
7749                 echo "and you have the 3 argument form of open()." >&4
7750                 val="$define"
7751         else
7752                 echo "but not the 3 argument form of open().  Oh, well." >&4
7753                 val="$undef"
7754         fi
7755 else
7756         val="$undef"
7757         echo "I can't find the O_* constant definitions!  You got problems." >&4
7758 fi
7759 set d_open3
7760 eval $setvar
7761 $rm -f open3*
7762
7763 : check for non-blocking I/O stuff
7764 case "$h_sysfile" in
7765 true) echo "#include <sys/file.h>" > head.c;;
7766 *)
7767         case "$h_fcntl" in
7768         true) echo "#include <fcntl.h>" > head.c;;
7769         *) echo "#include <sys/fcntl.h>" > head.c;;
7770         esac
7771         ;;
7772 esac
7773 echo " "
7774 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7775 case "$o_nonblock" in
7776 '')
7777         $cat head.c > try.c
7778         $cat >>try.c <<'EOCP'
7779 int main() {
7780 #ifdef O_NONBLOCK
7781         printf("O_NONBLOCK\n");
7782         exit(0);
7783 #endif
7784 #ifdef O_NDELAY
7785         printf("O_NDELAY\n");
7786         exit(0);
7787 #endif
7788 #ifdef FNDELAY
7789         printf("FNDELAY\n");
7790         exit(0);
7791 #endif
7792         exit(0);
7793 }
7794 EOCP
7795         set try
7796         if eval $compile_ok; then
7797                 o_nonblock=`./try`
7798                 case "$o_nonblock" in
7799                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7800                 *) echo "Seems like we can use $o_nonblock.";;
7801                 esac
7802         else
7803                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7804         fi
7805         ;;
7806 *) echo "Using $hint value $o_nonblock.";;
7807 esac
7808 $rm -f try try.* .out core
7809
7810 echo " "
7811 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7812 case "$eagain" in
7813 '')
7814         $cat head.c > try.c
7815         $cat >>try.c <<EOCP
7816 #include <errno.h>
7817 #include <sys/types.h>
7818 #include <signal.h>
7819 #define MY_O_NONBLOCK $o_nonblock
7820 #ifndef errno  /* XXX need better Configure test */
7821 extern int errno;
7822 #endif
7823 $signal_t blech(x) int x; { exit(3); }
7824 EOCP
7825         $cat >> try.c <<'EOCP'
7826 int main()
7827 {
7828         int pd[2];
7829         int pu[2];
7830         char buf[1];
7831         char string[100];
7832
7833         pipe(pd);       /* Down: child -> parent */
7834         pipe(pu);       /* Up: parent -> child */
7835         if (0 != fork()) {
7836                 int ret;
7837                 close(pd[1]);   /* Parent reads from pd[0] */
7838                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7839                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7840                         exit(1);
7841                 signal(SIGALRM, blech);
7842                 alarm(5);
7843                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7844                         exit(2);
7845                 sprintf(string, "%d\n", ret);
7846                 write(2, string, strlen(string));
7847                 alarm(0);
7848 #ifdef EAGAIN
7849                 if (errno == EAGAIN) {
7850                         printf("EAGAIN\n");
7851                         goto ok;
7852                 }
7853 #endif
7854 #ifdef EWOULDBLOCK
7855                 if (errno == EWOULDBLOCK)
7856                         printf("EWOULDBLOCK\n");
7857 #endif
7858         ok:
7859                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7860                 sleep(2);                               /* Give it time to close our pipe */
7861                 alarm(5);
7862                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7863                 alarm(0);
7864                 sprintf(string, "%d\n", ret);
7865                 write(3, string, strlen(string));
7866                 exit(0);
7867         }
7868
7869         close(pd[0]);                   /* We write to pd[1] */
7870         close(pu[1]);                   /* We read from pu[0] */
7871         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7872         close(pd[1]);                   /* Pipe pd is now fully closed! */
7873         exit(0);                                /* Bye bye, thank you for playing! */
7874 }
7875 EOCP
7876         set try
7877         if eval $compile_ok; then
7878                 echo "$startsh" >mtry
7879                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7880                 chmod +x mtry
7881                 ./mtry >/dev/null 2>&1
7882                 case $? in
7883                 0) eagain=`$cat try.out`;;
7884                 1) echo "Could not perform non-blocking setting!";;
7885                 2) echo "I did a successful read() for something that was not there!";;
7886                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7887                 *) echo "Something terribly wrong happened during testing.";;
7888                 esac
7889                 rd_nodata=`$cat try.ret`
7890                 echo "A read() system call with no data present returns $rd_nodata."
7891                 case "$rd_nodata" in
7892                 0|-1) ;;
7893                 *)
7894                         echo "(That's peculiar, fixing that to be -1.)"
7895                         rd_nodata=-1
7896                         ;;
7897                 esac
7898                 case "$eagain" in
7899                 '')
7900                         echo "Forcing errno EAGAIN on read() with no data available."
7901                         eagain=EAGAIN
7902                         ;;
7903                 *)
7904                         echo "Your read() sets errno to $eagain when no data is available."
7905                         ;;
7906                 esac
7907                 status=`$cat try.err`
7908                 case "$status" in
7909                 0) echo "And it correctly returns 0 to signal EOF.";;
7910                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7911                 *) echo "However, your read() returns '$status' on EOF??";;
7912                 esac
7913                 val="$define"
7914                 if test "$status" = "$rd_nodata"; then
7915                         echo "WARNING: you can't distinguish between EOF and no data!"
7916                         val="$undef"
7917                 fi
7918         else
7919                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7920                 eagain=EAGAIN
7921         fi
7922         set d_eofnblk
7923         eval $setvar
7924         ;;
7925 *)
7926         echo "Using $hint value $eagain."
7927         echo "Your read() returns $rd_nodata when no data is present."
7928         case "$d_eofnblk" in
7929         "$define") echo "And you can see EOF because read() returns 0.";;
7930         "$undef") echo "But you can't see EOF status from read() returned value.";;
7931         *)
7932                 echo "(Assuming you can't see EOF status from read anyway.)"
7933                 d_eofnblk=$undef
7934                 ;;
7935         esac
7936         ;;
7937 esac
7938 $rm -f try try.* .out core head.c mtry
7939
7940 : see if fchmod exists
7941 set fchmod d_fchmod
7942 eval $inlibc
7943
7944 : see if fchown exists
7945 set fchown d_fchown
7946 eval $inlibc
7947
7948 : see if this is an fcntl system
7949 set fcntl d_fcntl
7950 eval $inlibc
7951
7952 : see if sys/select.h has to be included
7953 set sys/select.h i_sysselct
7954 eval $inhdr
7955
7956 : see if we should include time.h, sys/time.h, or both
7957 echo " "
7958 if test "X$timeincl" = X; then
7959         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7960         $echo $n "I'm now running the test program...$c"
7961         $cat >try.c <<'EOCP'
7962 #include <sys/types.h>
7963 #ifdef I_TIME
7964 #include <time.h>
7965 #endif
7966 #ifdef I_SYSTIME
7967 #ifdef SYSTIMEKERNEL
7968 #define KERNEL
7969 #endif
7970 #include <sys/time.h>
7971 #endif
7972 #ifdef I_SYSSELECT
7973 #include <sys/select.h>
7974 #endif
7975 int main()
7976 {
7977         struct tm foo;
7978 #ifdef S_TIMEVAL
7979         struct timeval bar;
7980 #endif
7981 #ifdef S_TIMEZONE
7982         struct timezone tzp;
7983 #endif
7984         if (foo.tm_sec == foo.tm_sec)
7985                 exit(0);
7986 #ifdef S_TIMEVAL
7987         if (bar.tv_sec == bar.tv_sec)
7988                 exit(0);
7989 #endif
7990         exit(1);
7991 }
7992 EOCP
7993         flags=''
7994         for s_timezone in '-DS_TIMEZONE' ''; do
7995         sysselect=''
7996         for s_timeval in '-DS_TIMEVAL' ''; do
7997         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7998         for i_time in '' '-DI_TIME'; do
7999         for i_systime in '-DI_SYSTIME' ''; do
8000                 case "$flags" in
8001                 '') $echo $n ".$c"
8002                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8003                         if eval $compile; then
8004                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8005                                 shift
8006                                 flags="$*"
8007                                 echo " "
8008                                 $echo $n "Succeeded with $flags$c"
8009                         fi
8010                         ;;
8011                 esac
8012         done
8013         done
8014         done
8015         done
8016         done
8017         timeincl=''
8018         echo " "
8019         case "$flags" in
8020         *SYSTIMEKERNEL*) i_systimek="$define"
8021                 timeincl=`./findhdr sys/time.h`
8022                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8023         *) i_systimek="$undef";;
8024         esac
8025         case "$flags" in
8026         *I_TIME*) i_time="$define"
8027                 timeincl=`./findhdr time.h`" $timeincl"
8028                 echo "We'll include <time.h>." >&4;;
8029         *) i_time="$undef";;
8030         esac
8031         case "$flags" in
8032         *I_SYSTIME*) i_systime="$define"
8033                 timeincl=`./findhdr sys/time.h`" $timeincl"
8034                 echo "We'll include <sys/time.h>." >&4;;
8035         *) i_systime="$undef";;
8036         esac
8037         $rm -f try.c try
8038 fi
8039
8040 : check for fd_set items
8041 $cat <<EOM
8042
8043 Checking to see how well your C compiler handles fd_set and friends ...
8044 EOM
8045 $cat >fd_set.c <<EOCP
8046 #$i_systime I_SYS_TIME
8047 #$i_sysselct I_SYS_SELECT
8048 #$d_socket HAS_SOCKET
8049 #include <sys/types.h>
8050 #ifdef HAS_SOCKET
8051 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8052 #endif
8053 #ifdef I_SYS_TIME
8054 #include <sys/time.h>
8055 #endif
8056 #ifdef I_SYS_SELECT
8057 #include <sys/select.h>
8058 #endif
8059 int main() {
8060         fd_set fds;
8061
8062 #ifdef TRYBITS
8063         if(fds.fds_bits);
8064 #endif
8065
8066 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8067         exit(0);
8068 #else
8069         exit(1);
8070 #endif
8071 }
8072 EOCP
8073 set fd_set -DTRYBITS
8074 if eval $compile; then
8075         d_fds_bits="$define"
8076         d_fd_set="$define"
8077         echo "Well, your system knows about the normal fd_set typedef..." >&4
8078         if ./fd_set; then
8079                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8080                 d_fd_macros="$define"
8081         else
8082                 $cat >&4 <<'EOM'
8083 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8084 EOM
8085                 d_fd_macros="$undef"
8086         fi
8087 else
8088         $cat <<'EOM'
8089 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8090 EOM
8091         set fd_set
8092         if eval $compile; then
8093                 d_fds_bits="$undef"
8094                 d_fd_set="$define"
8095                 echo "Well, your system has some sort of fd_set available..." >&4
8096                 if ./fd_set; then
8097                         echo "and you have the normal fd_set macros." >&4
8098                         d_fd_macros="$define"
8099                 else
8100                         $cat <<'EOM'
8101 but not the normal fd_set macros!  Gross!  More work for me...
8102 EOM
8103                         d_fd_macros="$undef"
8104                 fi
8105         else
8106         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8107                 d_fd_set="$undef"
8108                 d_fds_bits="$undef"
8109                 d_fd_macros="$undef"
8110         fi
8111 fi
8112 $rm -f fd_set*
8113
8114 : see if fgetpos exists
8115 set fgetpos d_fgetpos
8116 eval $inlibc
8117
8118
8119 if $test X"$use64bits" = X"$define"; then
8120         : see if fgetpos64 exists
8121         set fgetpos64 d_fgetpos64
8122         eval $inlibc
8123
8124         : see if fopen64 exists
8125         set freopen64 d_fopen64
8126         eval $inlibc
8127
8128         : see if freopen64 exists
8129         set freopen64 d_freopen64
8130         eval $inlibc
8131
8132         : see if fseek64 exists
8133         set fseek64 d_fseek64
8134         eval $inlibc
8135
8136         : see if fseeko64 exists
8137         set fseeko64 d_fseeko64
8138         eval $inlibc
8139
8140         : see if fsetpos64 exists
8141         set fsetpos64 d_fsetpos64
8142         eval $inlibc
8143
8144         : see if ftell64 exists
8145         set ftell64 d_ftell64
8146         eval $inlibc
8147
8148         : see if ftello64 exists
8149         set ftello64 d_ftello64
8150         eval $inlibc
8151
8152         : see if tmpfile64 exists
8153         set tmpfile64 d_tmpfile64
8154         eval $inlibc
8155 else
8156         val="$undef"
8157         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8158         do
8159                 set $xxx
8160                 eval $setvar
8161         done
8162 fi
8163
8164 : see if flock exists
8165 set flock d_flock
8166 eval $inlibc
8167
8168 : see if fork exists
8169 set fork d_fork
8170 eval $inlibc
8171
8172 : see if pathconf exists
8173 set pathconf d_pathconf
8174 eval $inlibc
8175
8176 : see if fpathconf exists
8177 set fpathconf d_fpathconf
8178 eval $inlibc
8179
8180 : see if fseeko exists
8181 set fseeko d_fseeko
8182 eval $inlibc
8183
8184 : see if fsetpos exists
8185 set fsetpos d_fsetpos
8186 eval $inlibc
8187
8188 : see if this is a sys/param system
8189 set sys/param.h i_sysparam
8190 eval $inhdr
8191
8192 : see if this is a sys/mount.h system
8193 set sys/mount.h i_sysmount
8194 eval $inhdr
8195
8196
8197 : see if statfs exists
8198 set statfs d_statfs
8199 eval $inlibc
8200
8201 : see if fstatfs exists
8202 set fstatfs d_fstatfs
8203 eval $inlibc
8204
8205 : see if statfs knows about mount flags
8206 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8207 eval $hasfield
8208
8209
8210 : see if statvfs exists
8211 set statvfs d_statvfs
8212 eval $inlibc
8213
8214 : see if fstatvfs exists
8215 set fstatvfs d_fstatvfs
8216 eval $inlibc
8217
8218
8219 : see if ftello exists
8220 set ftello d_ftello
8221 eval $inlibc
8222
8223 : see if getgrent exists
8224 set getgrent d_getgrent
8225 eval $inlibc
8226
8227 : see if gethostbyaddr exists
8228 set gethostbyaddr d_gethbyaddr
8229 eval $inlibc
8230
8231 : see if gethostbyname exists
8232 set gethostbyname d_gethbyname
8233 eval $inlibc
8234
8235 : see if gethostent exists
8236 set gethostent d_gethent
8237 eval $inlibc
8238
8239 : see how we will look up host name
8240 echo " "
8241 call=''
8242 if set gethostname val -f d_gethname; eval $csym; $val; then
8243         echo 'gethostname() found.' >&4
8244         d_gethname="$define"
8245         call=gethostname
8246 fi
8247 if set uname val -f d_uname; eval $csym; $val; then
8248         if ./xenix; then
8249                 $cat <<'EOM'
8250 uname() was found, but you're running xenix, and older versions of xenix
8251 have a broken uname(). If you don't really know whether your xenix is old
8252 enough to have a broken system call, use the default answer.
8253
8254 EOM
8255                 dflt=y
8256                 case "$d_uname" in
8257                 "$define") dflt=n;;
8258                 esac
8259                 rp='Is your uname() broken?'
8260                 . ./myread
8261                 case "$ans" in
8262                 n*) d_uname="$define"; call=uname;;
8263                 esac
8264         else
8265                 echo 'uname() found.' >&4
8266                 d_uname="$define"
8267                 case "$call" in
8268                 '') call=uname ;;
8269                 esac
8270         fi
8271 fi
8272 case "$d_gethname" in
8273 '') d_gethname="$undef";;
8274 esac
8275 case "$d_uname" in
8276 '') d_uname="$undef";;
8277 esac
8278 case "$d_uname$d_gethname" in
8279 *define*)
8280         dflt=n
8281         cat <<EOM
8282  
8283 Every now and then someone has a $call() that lies about the hostname
8284 but can't be fixed for political or economic reasons.  If you wish, I can
8285 pretend $call() isn't there and maybe compute hostname at run-time
8286 thanks to the '$phostname' command.
8287
8288 EOM
8289         rp="Shall I ignore $call() from now on?"
8290         . ./myread
8291         case "$ans" in
8292         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8293         esac;;
8294 esac
8295 case "$phostname" in
8296 '') aphostname='';;
8297 *) case "$aphostname" in
8298         /*) ;;
8299         *) set X $phostname
8300                 shift
8301                 file=$1
8302                 shift
8303                 file=`./loc $file $file $pth`
8304                 aphostname=`echo $file $*`
8305                 ;;
8306         esac
8307         ;;
8308 esac
8309 case "$d_uname$d_gethname" in
8310 *define*) ;;
8311 *)
8312         case "$phostname" in
8313         '')
8314                 echo "There will be no way for $package to get your hostname." >&4;;
8315         *)
8316         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8317                 ;;
8318         esac;;
8319 esac
8320 case "$d_phostname" in
8321 '') d_phostname="$undef";;
8322 esac
8323
8324 : see if this is a netdb.h system
8325 set netdb.h i_netdb
8326 eval $inhdr
8327
8328 : see if prototypes for various gethostxxx netdb.h functions are available
8329 echo " "
8330 set d_gethostprotos gethostent $i_netdb netdb.h
8331 eval $hasproto
8332
8333 : see if getlogin exists
8334 set getlogin d_getlogin
8335 eval $inlibc
8336
8337 : see if getmntent exists
8338 set getmntent d_getmntent
8339 eval $inlibc
8340
8341 : see if getnetbyaddr exists
8342 set getnetbyaddr d_getnbyaddr
8343 eval $inlibc
8344
8345 : see if getnetbyname exists
8346 set getnetbyname d_getnbyname
8347 eval $inlibc
8348
8349 : see if getnetent exists
8350 set getnetent d_getnent
8351 eval $inlibc
8352
8353 : see if prototypes for various getnetxxx netdb.h functions are available
8354 echo " "
8355 set d_getnetprotos getnetent $i_netdb netdb.h
8356 eval $hasproto
8357
8358
8359 : see if getprotobyname exists
8360 set getprotobyname d_getpbyname
8361 eval $inlibc
8362
8363 : see if getprotobynumber exists
8364 set getprotobynumber d_getpbynumber
8365 eval $inlibc
8366
8367 : see if getprotoent exists
8368 set getprotoent d_getpent
8369 eval $inlibc
8370
8371 : see if getpgid exists
8372 set getpgid d_getpgid
8373 eval $inlibc
8374
8375 : see if getpgrp2 exists
8376 set getpgrp2 d_getpgrp2
8377 eval $inlibc
8378
8379 : see if getppid exists
8380 set getppid d_getppid
8381 eval $inlibc
8382
8383 : see if getpriority exists
8384 set getpriority d_getprior
8385 eval $inlibc
8386
8387 : see if prototypes for various getprotoxxx netdb.h functions are available
8388 echo " "
8389 set d_getprotoprotos getprotoent $i_netdb netdb.h
8390 eval $hasproto
8391
8392 : see if getpwent exists
8393 set getpwent d_getpwent
8394 eval $inlibc
8395
8396
8397 : see if getservbyname exists
8398 set getservbyname d_getsbyname
8399 eval $inlibc
8400
8401 : see if getservbyport exists
8402 set getservbyport d_getsbyport
8403 eval $inlibc
8404
8405 : see if getservent exists
8406 set getservent d_getsent
8407 eval $inlibc
8408
8409 : see if prototypes for various getservxxx netdb.h functions are available
8410 echo " "
8411 set d_getservprotos getservent $i_netdb netdb.h
8412 eval $hasproto
8413
8414 : see if getspent exists
8415 set getspent d_getspent
8416 eval $inlibc
8417
8418 : see if getspnam exists
8419 set getspnam d_getspnam
8420 eval $inlibc
8421
8422 : see if gettimeofday or ftime exists
8423 set gettimeofday d_gettimeod
8424 eval $inlibc
8425 case "$d_gettimeod" in
8426 "$undef")
8427         set ftime d_ftime 
8428         eval $inlibc
8429         ;;
8430 *)
8431         val="$undef"; set d_ftime; eval $setvar
8432         ;;
8433 esac
8434 case "$d_gettimeod$d_ftime" in
8435 "$undef$undef")
8436         echo " "
8437         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8438         ;;
8439 esac
8440
8441 : see if this is an grp system
8442 set grp.h i_grp
8443 eval $inhdr
8444
8445 case "$i_grp" in
8446 $define)
8447         xxx=`./findhdr grp.h`
8448         $cppstdin $cppflags $cppminus < $xxx >$$.h
8449
8450         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8451                 val="$define"
8452         else
8453                 val="$undef"
8454         fi
8455         set d_grpasswd
8456         eval $setvar
8457
8458         $rm -f $$.h
8459         ;;
8460 *)
8461         val="$undef";
8462         set d_grpasswd; eval $setvar
8463         ;;
8464 esac
8465
8466 : see if hasmntopt exists
8467 set hasmntopt d_hasmntopt
8468 eval $inlibc
8469
8470 : see if this is a netinet/in.h or sys/in.h system
8471 set netinet/in.h i_niin sys/in.h i_sysin
8472 eval $inhdr
8473
8474 : see if arpa/inet.h has to be included
8475 set arpa/inet.h i_arpainet
8476 eval $inhdr
8477
8478 : see if htonl --and friends-- exists
8479 val=''
8480 set htonl val
8481 eval $inlibc
8482
8483 : Maybe they are macros.
8484 case "$val" in
8485 $undef)
8486         $cat >htonl.c <<EOM
8487 #include <stdio.h>
8488 #include <sys/types.h>
8489 #$i_niin I_NETINET_IN
8490 #$i_sysin I_SYS_IN
8491 #$i_arpainet I_ARPA_INET
8492 #ifdef I_NETINET_IN
8493 #include <netinet/in.h>
8494 #endif
8495 #ifdef I_SYS_IN
8496 #include <sys/in.h>
8497 #endif
8498 #ifdef I_ARPA_INET
8499 #include <arpa/inet.h>
8500 #endif
8501 #ifdef htonl
8502 printf("Defined as a macro.");
8503 #endif
8504 EOM
8505         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8506         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8507                 val="$define"
8508                 echo "But it seems to be defined as a macro." >&4
8509         fi
8510         $rm -f htonl.?
8511         ;;
8512 esac
8513 set d_htonl
8514 eval $setvar
8515
8516 : see which of string.h or strings.h is needed
8517 echo " "
8518 strings=`./findhdr string.h`
8519 if $test "$strings" && $test -r "$strings"; then
8520         echo "Using <string.h> instead of <strings.h>." >&4
8521         val="$define"
8522 else
8523         val="$undef"
8524         strings=`./findhdr strings.h`
8525         if $test "$strings" && $test -r "$strings"; then
8526                 echo "Using <strings.h> instead of <string.h>." >&4
8527         else
8528                 echo "No string header found -- You'll surely have problems." >&4
8529         fi
8530 fi
8531 set i_string
8532 eval $setvar
8533 case "$i_string" in
8534 "$undef") strings=`./findhdr strings.h`;;
8535 *)        strings=`./findhdr string.h`;;
8536 esac
8537
8538 : index or strchr
8539 echo " "
8540 if set index val -f; eval $csym; $val; then
8541         if set strchr val -f d_strchr; eval $csym; $val; then
8542                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8543                         val="$define"
8544                         vali="$undef"
8545                         echo "strchr() found." >&4
8546                 else
8547                         val="$undef"
8548                         vali="$define"
8549                         echo "index() found." >&4
8550                 fi
8551         else
8552                 val="$undef"
8553                 vali="$define"
8554                 echo "index() found." >&4
8555         fi
8556 else
8557         if set strchr val -f d_strchr; eval $csym; $val; then
8558                 val="$define"
8559                 vali="$undef"
8560                 echo "strchr() found." >&4
8561         else
8562                 echo "No index() or strchr() found!" >&4
8563                 val="$undef"
8564                 vali="$undef"
8565         fi
8566 fi
8567 set d_strchr; eval $setvar
8568 val="$vali"
8569 set d_index; eval $setvar
8570
8571 : check whether inet_aton exists
8572 set inet_aton d_inetaton
8573 eval $inlibc
8574
8575 : see if inttypes.h is available
8576 : we want a real compile instead of Inhdr because some systems
8577 : have an inttypes.h which includes non-existent headers
8578 echo " "
8579 $cat >try.c <<EOCP
8580 #include <inttypes.h>
8581 int main() {
8582         static int32_t foo32 = 0x12345678;
8583 }
8584 EOCP
8585 set try
8586 if eval $compile; then
8587         echo "<inttypes.h> found." >&4
8588         val="$define"
8589 else
8590         echo "<inttypes.h> NOT found." >&4
8591         val="$undef"
8592 fi
8593 $rm -f try.c try
8594 set i_inttypes
8595 eval $setvar
8596
8597 : check for int64_t
8598 case "$use64bits" in
8599 "$define" )
8600         echo " "
8601         echo $n "Checking to see if your system supports int64_t...$c" >&4
8602         $cat >try.c <<EOCP
8603 #include <sys/types.h>
8604 #$i_inttypes I_INTTYPES
8605 #ifdef I_INTTYPES
8606 #include <inttypes.h>
8607 #endif
8608 int64_t foo() { int64_t x; x = 7; return x; }
8609 EOCP
8610         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8611                 val="$define"
8612                 echo " Yup, it does." >&4
8613         else
8614                 val="$undef"
8615                 echo " Nope, it doesn't." >&4
8616         fi
8617         $rm -f try.*
8618         ;;
8619 *)      val="$undef"
8620         ;;
8621 esac
8622 set d_int64t
8623 eval $setvar
8624
8625
8626 : Look for isascii
8627 echo " "
8628 $cat >isascii.c <<'EOCP'
8629 #include <stdio.h>
8630 #include <ctype.h>
8631 int main() {
8632         int c = 'A';
8633         if (isascii(c))
8634                 exit(0);
8635         else
8636                 exit(1);
8637 }
8638 EOCP
8639 set isascii
8640 if eval $compile; then
8641         echo "isascii() found." >&4
8642         val="$define"
8643 else
8644         echo "isascii() NOT found." >&4
8645         val="$undef"
8646 fi
8647 set d_isascii
8648 eval $setvar
8649 $rm -f isascii*
8650
8651 : see if killpg exists
8652 set killpg d_killpg
8653 eval $inlibc
8654
8655 : see if lchown exists
8656 echo " "
8657 $cat > try.c <<'EOCP'
8658 /* System header to define __stub macros and hopefully few prototypes,
8659     which can conflict with char lchown(); below.  */
8660 #include <assert.h>
8661 /* Override any gcc2 internal prototype to avoid an error.  */
8662 /* We use char because int might match the return type of a gcc2
8663    builtin and then its argument prototype would still apply.  */
8664 char lchown();
8665 int main() {
8666     /*  The GNU C library defines this for functions which it implements
8667         to always fail with ENOSYS.  Some functions are actually named
8668         something starting with __ and the normal name is an alias.  */
8669 #if defined (__stub_lchown) || defined (__stub___lchown)
8670 choke me
8671 #else
8672 lchown();
8673 #endif
8674 ; return 0; }
8675 EOCP
8676 set try
8677 if eval $compile; then
8678     $echo "lchown() found." >&4
8679     val="$define"
8680 else
8681     $echo "lchown() NOT found." >&4
8682     val="$undef"
8683 fi
8684 set d_lchown
8685 eval $setvar
8686
8687 : see if link exists
8688 set link d_link
8689 eval $inlibc
8690
8691 : see if localeconv exists
8692 set localeconv d_locconv
8693 eval $inlibc
8694
8695 : see if lockf exists
8696 set lockf d_lockf
8697 eval $inlibc
8698
8699 : check for length of double
8700 echo " "
8701 case "$doublesize" in
8702 '')
8703         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8704         $cat >try.c <<'EOCP'
8705 #include <stdio.h>
8706 int main()
8707 {
8708         printf("%d\n", sizeof(double));
8709 }
8710 EOCP
8711         set try
8712         if eval $compile_ok; then
8713                 doublesize=`./try`
8714                 $echo " $doublesize bytes." >&4
8715         else
8716                 dflt='8'
8717                 echo "(I can't seem to compile the test program.  Guessing...)"
8718                 rp="What is the size of a double precision number (in bytes)?"
8719                 . ./myread
8720                 doublesize="$ans"
8721         fi
8722         ;;
8723 esac
8724 $rm -f try.c try
8725
8726 : check for long doubles
8727 echo " "
8728 echo $n "Checking to see if your system supports long doubles...$c" >&4
8729 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8730 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8731         val="$define"
8732         echo " Yup, it does." >&4
8733 else
8734         val="$undef"
8735         echo " Nope, it doesn't." >&4
8736 fi
8737 $rm try.*
8738 set d_longdbl
8739 eval $setvar
8740
8741 : check for length of long double
8742 case "${d_longdbl}${longdblsize}" in
8743 $define)
8744         echo " "
8745         $echo $n "Checking to see how big your long doubles are...$c" >&4
8746         $cat >try.c <<'EOCP'
8747 #include <stdio.h>
8748 int main()
8749 {
8750         printf("%d\n", sizeof(long double));
8751 }
8752 EOCP
8753         set try
8754         if eval $compile; then
8755                 longdblsize=`./try`
8756                 $echo " $longdblsize bytes." >&4
8757         else
8758                 dflt='8'
8759                 echo " "
8760                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8761                 rp="What is the size of a long double (in bytes)?"
8762                 . ./myread
8763                 longdblsize="$ans"
8764         fi
8765         if $test "X$doublesize" = "X$longdblsize"; then
8766                 echo "(That isn't any different from an ordinary double.)"
8767         fi      
8768         ;;
8769 esac
8770 $rm -f try.c try
8771
8772 : check for long long
8773 echo " "
8774 echo $n "Checking to see if your system supports long long...$c" >&4
8775 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8776 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8777         val="$define"
8778         echo " Yup, it does." >&4
8779 else
8780         val="$undef"
8781         echo " Nope, it doesn't." >&4
8782 fi
8783 $rm try.*
8784 set d_longlong
8785 eval $setvar
8786
8787 : check for length of long long
8788 case "${d_longlong}${longlongsize}" in
8789 $define)
8790         echo " "
8791         $echo $n "Checking to see how big your long longs are...$c" >&4
8792         $cat >try.c <<'EOCP'
8793 #include <stdio.h>
8794 int main()
8795 {
8796         printf("%d\n", sizeof(long long));
8797 }
8798 EOCP
8799         set try
8800         if eval $compile_ok; then
8801                 longlongsize=`./try`
8802                 $echo " $longlongsize bytes." >&4
8803         else
8804                 dflt='8'
8805                 echo " "
8806                 echo "(I can't seem to compile the test program.  Guessing...)"
8807                 rp="What is the size of a long long (in bytes)?"
8808                 . ./myread
8809                 longlongsize="$ans"
8810         fi
8811         if $test "X$longsize" = "X$longlongsize"; then
8812                 echo "(That isn't any different from an ordinary long.)"
8813         fi      
8814         ;;
8815 esac
8816 $rm -f try.c try
8817
8818 : see if lstat exists
8819 set lstat d_lstat
8820 eval $inlibc
8821
8822 : see if madvise exists
8823 set madvise d_madvise
8824 eval $inlibc
8825
8826 : see if mblen exists
8827 set mblen d_mblen
8828 eval $inlibc
8829
8830 : see if mbstowcs exists
8831 set mbstowcs d_mbstowcs
8832 eval $inlibc
8833
8834 : see if mbtowc exists
8835 set mbtowc d_mbtowc
8836 eval $inlibc
8837
8838 : see if memchr exists
8839 set memchr d_memchr
8840 eval $inlibc
8841
8842 : see if memcmp exists
8843 set memcmp d_memcmp
8844 eval $inlibc
8845
8846 : see if memcpy exists
8847 set memcpy d_memcpy
8848 eval $inlibc
8849
8850 : see if memmove exists
8851 set memmove d_memmove
8852 eval $inlibc
8853
8854 : see if memset exists
8855 set memset d_memset
8856 eval $inlibc
8857
8858 : see if mkdir exists
8859 set mkdir d_mkdir
8860 eval $inlibc
8861
8862 : see if mkfifo exists
8863 set mkfifo d_mkfifo
8864 eval $inlibc
8865
8866 : see if mktime exists
8867 set mktime d_mktime
8868 eval $inlibc
8869
8870 : see if this is a sys/mman.h system
8871 set sys/mman.h i_sysmman
8872 eval $inhdr
8873
8874 : see if mmap exists
8875 set mmap d_mmap
8876 eval $inlibc
8877 : see what shmat returns
8878 : default to something harmless
8879 mmaptype='void *'
8880 case "$i_sysmman$d_mmap" in
8881 "$define$define")
8882         $cat >mmap.c <<'END'
8883 #include <sys/mman.h>
8884 void *mmap();
8885 END
8886         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8887                 mmaptype='void *'
8888         else
8889                 mmaptype='caddr_t'
8890         fi
8891         echo "and it returns ($mmaptype)." >&4
8892         ;;
8893 esac
8894
8895
8896
8897 : see if mprotect exists
8898 set mprotect d_mprotect
8899 eval $inlibc
8900
8901 : see if msgctl exists
8902 set msgctl d_msgctl
8903 eval $inlibc
8904
8905 : see if msgget exists
8906 set msgget d_msgget
8907 eval $inlibc
8908
8909 : see if msgsnd exists
8910 set msgsnd d_msgsnd
8911 eval $inlibc
8912
8913 : see if msgrcv exists
8914 set msgrcv d_msgrcv
8915 eval $inlibc
8916
8917 : see how much of the 'msg*(2)' library is present.
8918 h_msg=true
8919 echo " "
8920 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8921 *"$undef"*) h_msg=false;;
8922 esac
8923 case "$osname" in
8924 freebsd)
8925     case "`ipcs 2>&1`" in
8926     "SVID messages"*"not configured"*)
8927         echo "Your $osname does not have the msg*(2) configured." >&4
8928         h_msg=false
8929         val="$undef"
8930         set msgctl d_msgctl
8931         eval $setvar
8932         set msgget d_msgget
8933         eval $setvar
8934         set msgsnd d_msgsnd
8935         eval $setvar
8936         set msgrcv d_msgrcv
8937         eval $setvar
8938         ;;
8939     esac
8940     ;;
8941 esac
8942 : we could also check for sys/ipc.h ...
8943 if $h_msg && $test `./findhdr sys/msg.h`; then
8944         echo "You have the full msg*(2) library." >&4
8945         val="$define"
8946 else
8947         echo "You don't have the full msg*(2) library." >&4
8948         val="$undef"
8949 fi
8950 set d_msg
8951 eval $setvar
8952
8953 : see if msync exists
8954 set msync d_msync
8955 eval $inlibc
8956
8957 : see if munmap exists
8958 set munmap d_munmap
8959 eval $inlibc
8960
8961 : see if nice exists
8962 set nice d_nice
8963 eval $inlibc
8964
8965 : see if POSIX threads are available
8966 if test "X$usethreads" = "X$define"; then
8967         set pthread.h i_pthread
8968         eval $inhdr
8969 else
8970         i_pthread="$undef"
8971 fi
8972
8973
8974
8975 : how to create joinable pthreads
8976 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8977         echo " "
8978         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8979         $cat >try.c <<'EOCP'
8980 #include <pthread.h>
8981 int main() {
8982     int detachstate = JOINABLE;
8983 }
8984 EOCP
8985         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8986         if eval $compile; then
8987                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8988                 val="$undef" # Yes, undef.
8989                 set d_old_pthread_create_joinable
8990                 eval $setvar
8991                 val=""
8992                 set old_pthread_create_joinable
8993                 eval $setvar
8994         else
8995                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8996                 if eval $compile; then
8997                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8998                         val="$define"
8999                         set d_old_pthread_create_joinable
9000                         eval $setvar
9001                         val=PTHREAD_CREATE_UNDETACHED
9002                         set old_pthread_create_joinable
9003                         eval $setvar
9004                 else            
9005                         set try -DJOINABLE=__UNDETACHED
9006                         if eval $compile; then
9007                                 echo "You seem to use __UNDETACHED." >&4
9008                                 val="$define"
9009                                 set d_old_pthread_create_joinable
9010                                 eval $setvar
9011                                 val=__UNDETACHED
9012                                 set old_pthread_create_joinable
9013                                 eval $setvar
9014                         else
9015                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9016                                 val="$define"
9017                                 set d_old_pthread_create_joinable
9018                                 eval $setvar
9019                                 val=0
9020                                 set old_pthread_create_joinable
9021                                 eval $setvar
9022                         fi
9023                 fi
9024         fi
9025         $rm -f try try.*
9026 else
9027     d_old_pthread_create_joinable="$undef"
9028     old_pthread_create_joinable=""
9029 fi
9030
9031 : see if pause exists
9032 set pause d_pause
9033 eval $inlibc
9034
9035 : see if pipe exists
9036 set pipe d_pipe
9037 eval $inlibc
9038
9039 : see if poll exists
9040 set poll d_poll
9041 eval $inlibc
9042
9043
9044 : see whether the various POSIXish _yields exist
9045 $cat >try.c <<EOP
9046 #include <pthread.h>
9047 #include <stdio.h>
9048 int main() {
9049 #ifdef SCHED_YIELD
9050         sched_yield();
9051 #else
9052 #ifdef PTHREAD_YIELD
9053         pthread_yield();
9054 #else
9055 #ifdef PTHREAD_YIELD_NULL
9056         pthread_yield(NULL);
9057 #endif
9058 #endif
9059 #endif
9060 }
9061 EOP
9062 : see if sched_yield exists
9063 set try -DSCHED_YIELD
9064 if eval $compile; then
9065     val="$define"
9066     sched_yield='sched_yield()'
9067 else
9068     val="$undef"
9069 fi
9070 case "$usethreads" in
9071 $define)
9072         case "$val" in
9073         $define) echo 'sched_yield() found.' >&4        ;;
9074         *)       echo 'sched_yield() NOT found.' >&4    ;;
9075         esac
9076 esac
9077 set d_sched_yield
9078 eval $setvar
9079
9080 : see if pthread_yield exists
9081 set try -DPTHREAD_YIELD
9082 if eval $compile; then
9083     val="$define"
9084     case "$sched_yield" in
9085     '') sched_yield='pthread_yield()' ;;
9086     esac
9087 else
9088     set try -DPTHREAD_YIELD_NULL
9089     if eval $compile; then
9090         val="$define"
9091         case "$sched_yield" in
9092         '') sched_yield='pthread_yield(NULL)' ;;
9093         esac
9094     else
9095         val="$undef"
9096     fi
9097 fi
9098 case "$usethreads" in
9099 $define)
9100         case "$val" in
9101         $define) echo 'pthread_yield() found.' >&4      ;;
9102         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9103         esac
9104         ;;
9105 esac
9106 set d_pthread_yield
9107 eval $setvar
9108
9109 case "$sched_yield" in
9110 '') sched_yield=undef ;;
9111 esac
9112
9113 $rm -f try try.*
9114
9115 : see if this is a pwd.h system
9116 set pwd.h i_pwd
9117 eval $inhdr
9118
9119 case "$i_pwd" in
9120 $define)
9121         xxx=`./findhdr pwd.h`
9122         $cppstdin $cppflags $cppminus < $xxx >$$.h
9123
9124         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9125                 val="$define"
9126         else
9127                 val="$undef"
9128         fi
9129         set d_pwquota
9130         eval $setvar
9131
9132         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9133                 val="$define"
9134         else
9135                 val="$undef"
9136         fi
9137         set d_pwage
9138         eval $setvar
9139
9140         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9141                 val="$define"
9142         else
9143                 val="$undef"
9144         fi
9145         set d_pwchange
9146         eval $setvar
9147
9148         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9149                 val="$define"
9150         else
9151                 val="$undef"
9152         fi
9153         set d_pwclass
9154         eval $setvar
9155
9156         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9157                 val="$define"
9158         else
9159                 val="$undef"
9160         fi
9161         set d_pwexpire
9162         eval $setvar
9163
9164         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9165                 val="$define"
9166         else
9167                 val="$undef"
9168         fi
9169         set d_pwcomment
9170         eval $setvar
9171
9172         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9173                 val="$define"
9174         else
9175                 val="$undef"
9176         fi
9177         set d_pwgecos
9178         eval $setvar
9179
9180         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9181                 val="$define"
9182         else
9183                 val="$undef"
9184         fi
9185         set d_pwpasswd
9186         eval $setvar
9187
9188         $rm -f $$.h
9189         ;;
9190 *)
9191         val="$undef"; 
9192         set d_pwquota; eval $setvar
9193         set d_pwage; eval $setvar
9194         set d_pwchange; eval $setvar
9195         set d_pwclass; eval $setvar
9196         set d_pwexpire; eval $setvar
9197         set d_pwcomment; eval $setvar
9198         set d_pwgecos; eval $setvar
9199         set d_pwpasswd; eval $setvar
9200         ;;
9201 esac
9202
9203 : see if readdir and friends exist
9204 set readdir d_readdir
9205 eval $inlibc
9206 set seekdir d_seekdir
9207 eval $inlibc
9208 set telldir d_telldir
9209 eval $inlibc
9210 set rewinddir d_rewinddir
9211 eval $inlibc
9212
9213 : see if readlink exists
9214 set readlink d_readlink
9215 eval $inlibc
9216
9217 : see if readv exists
9218 set readv d_readv
9219 eval $inlibc
9220
9221 : see if rename exists
9222 set rename d_rename
9223 eval $inlibc
9224
9225 : see if rmdir exists
9226 set rmdir d_rmdir
9227 eval $inlibc
9228
9229 : see if memory.h is available.
9230 val=''
9231 set memory.h val
9232 eval $inhdr
9233
9234 : See if it conflicts with string.h
9235 case "$val" in
9236 $define)
9237         case "$strings" in
9238         '') ;;
9239         *)
9240                 $cppstdin $cppflags $cppminus < $strings > mem.h
9241                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9242                         echo " "
9243                         echo "We won't be including <memory.h>."
9244                         val="$undef"
9245                 fi
9246                 $rm -f mem.h
9247                 ;;
9248         esac
9249 esac
9250 set i_memory
9251 eval $setvar
9252
9253 : can bcopy handle overlapping blocks?
9254 val="$undef"
9255 case "$d_bcopy" in
9256 "$define")
9257         echo " "
9258         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9259         $cat >try.c <<EOCP
9260 #$i_memory I_MEMORY
9261 #$i_stdlib I_STDLIB
9262 #$i_string I_STRING
9263 #$i_unistd I_UNISTD
9264 EOCP
9265         $cat >>try.c <<'EOCP'
9266 #include <stdio.h>
9267 #ifdef I_MEMORY
9268 #  include <memory.h>
9269 #endif
9270 #ifdef I_STDLIB
9271 #  include <stdlib.h>
9272 #endif
9273 #ifdef I_STRING
9274 #  include <string.h>
9275 #else
9276 #  include <strings.h>
9277 #endif
9278 #ifdef I_UNISTD
9279 #  include <unistd.h>  /* Needed for NetBSD */
9280 #endif
9281 int main()
9282 {
9283 char buf[128], abc[128];
9284 char *b;
9285 int len;
9286 int off;
9287 int align;
9288
9289 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9290
9291 for (align = 7; align >= 0; align--) {
9292         for (len = 36; len; len--) {
9293                 b = buf+align;
9294                 bcopy(abc, b, len);
9295                 for (off = 1; off <= len; off++) {
9296                         bcopy(b, b+off, len);
9297                         bcopy(b+off, b, len);
9298                         if (bcmp(b, abc, len))
9299                                 exit(1);
9300                 }
9301         }
9302 }
9303 exit(0);
9304 }
9305 EOCP
9306         set try
9307         if eval $compile_ok; then
9308                 if ./try 2>/dev/null; then
9309                         echo "Yes, it can."
9310                         val="$define"
9311                 else
9312                         echo "It can't, sorry."
9313                         case "$d_memmove" in
9314                         "$define") echo "But that's Ok since you have memmove()." ;;
9315                         esac
9316                 fi
9317         else
9318                 echo "(I can't compile the test program, so we'll assume not...)"
9319                 case "$d_memmove" in
9320                 "$define") echo "But that's Ok since you have memmove()." ;;
9321                 esac
9322         fi
9323         ;;
9324 esac
9325 $rm -f try.* try core
9326 set d_safebcpy
9327 eval $setvar
9328
9329 : can memcpy handle overlapping blocks?
9330 val="$undef"
9331 case "$d_memcpy" in
9332 "$define")
9333         echo " "
9334         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9335         $cat >try.c <<EOCP
9336 #$i_memory I_MEMORY
9337 #$i_stdlib I_STDLIB
9338 #$i_string I_STRING
9339 #$i_unistd I_UNISTD
9340 EOCP
9341         $cat >>try.c <<'EOCP'
9342 #include <stdio.h>
9343 #ifdef I_MEMORY
9344 #  include <memory.h>
9345 #endif
9346 #ifdef I_STDLIB
9347 #  include <stdlib.h>
9348 #endif
9349 #ifdef I_STRING
9350 #  include <string.h>
9351 #else
9352 #  include <strings.h>
9353 #endif
9354 #ifdef I_UNISTD
9355 #  include <unistd.h>  /* Needed for NetBSD */
9356 #endif
9357 int main()
9358 {
9359 char buf[128], abc[128];
9360 char *b;
9361 int len;
9362 int off;
9363 int align;
9364
9365 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9366    try to store the string in read-only memory. */
9367 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9368
9369 for (align = 7; align >= 0; align--) {
9370         for (len = 36; len; len--) {
9371                 b = buf+align;
9372                 memcpy(b, abc, len);
9373                 for (off = 1; off <= len; off++) {
9374                         memcpy(b+off, b, len);
9375                         memcpy(b, b+off, len);
9376                         if (memcmp(b, abc, len))
9377                                 exit(1);
9378                 }
9379         }
9380 }
9381 exit(0);
9382 }
9383 EOCP
9384         set try
9385         if eval $compile_ok; then
9386                 if ./try 2>/dev/null; then
9387                         echo "Yes, it can."
9388                         val="$define"
9389                 else
9390                         echo "It can't, sorry."
9391                         case "$d_memmove" in
9392                         "$define") echo "But that's Ok since you have memmove()." ;;
9393                         esac
9394                 fi
9395         else
9396                 echo "(I can't compile the test program, so we'll assume not...)"
9397                 case "$d_memmove" in
9398                 "$define") echo "But that's Ok since you have memmove()." ;;
9399                 esac
9400         fi
9401         ;;
9402 esac
9403 $rm -f try.* try core
9404 set d_safemcpy
9405 eval $setvar
9406
9407 : can memcmp be trusted to compare relative magnitude?
9408 val="$undef"
9409 case "$d_memcmp" in
9410 "$define")
9411         echo " "
9412         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9413         $cat >try.c <<EOCP
9414 #$i_memory I_MEMORY
9415 #$i_stdlib I_STDLIB
9416 #$i_string I_STRING
9417 #$i_unistd I_UNISTD
9418 EOCP
9419         $cat >>try.c <<'EOCP'
9420 #include <stdio.h>
9421 #ifdef I_MEMORY
9422 #  include <memory.h>
9423 #endif
9424 #ifdef I_STDLIB
9425 #  include <stdlib.h>
9426 #endif
9427 #ifdef I_STRING
9428 #  include <string.h>
9429 #else
9430 #  include <strings.h>
9431 #endif
9432 #ifdef I_UNISTD
9433 #  include <unistd.h>  /* Needed for NetBSD */
9434 #endif
9435 int main()
9436 {
9437 char a = -1;
9438 char b = 0;
9439 if ((a < b) && memcmp(&a, &b, 1) < 0)
9440         exit(1);
9441 exit(0);
9442 }
9443 EOCP
9444         set try
9445         if eval $compile_ok; then
9446                 if ./try 2>/dev/null; then
9447                         echo "Yes, it can."
9448                         val="$define"
9449                 else
9450                         echo "No, it can't (it uses signed chars)."
9451                 fi
9452         else
9453                 echo "(I can't compile the test program, so we'll assume not...)"
9454         fi
9455         ;;
9456 esac
9457 $rm -f try.* try core
9458 set d_sanemcmp
9459 eval $setvar
9460
9461 : see if select exists
9462 set select d_select
9463 eval $inlibc
9464
9465 : see if semctl exists
9466 set semctl d_semctl
9467 eval $inlibc
9468
9469 : see if semget exists
9470 set semget d_semget
9471 eval $inlibc
9472
9473 : see if semop exists
9474 set semop d_semop
9475 eval $inlibc
9476
9477 : see how much of the 'sem*(2)' library is present.
9478 h_sem=true
9479 echo " "
9480 case "$d_semctl$d_semget$d_semop" in
9481 *"$undef"*) h_sem=false;;
9482 esac
9483 case "$osname" in
9484 freebsd)
9485     case "`ipcs 2>&1`" in
9486     "SVID messages"*"not configured"*)
9487         echo "Your $osname does not have the sem*(2) configured." >&4
9488         h_sem=false
9489         val="$undef"
9490         set semctl d_semctl
9491         eval $setvar
9492         set semget d_semget
9493         eval $setvar
9494         set semop d_semop
9495         eval $setvar
9496         ;;
9497     esac
9498     ;;
9499 esac
9500 : we could also check for sys/ipc.h ...
9501 if $h_sem && $test `./findhdr sys/sem.h`; then
9502         echo "You have the full sem*(2) library." >&4
9503         val="$define"
9504 else
9505         echo "You don't have the full sem*(2) library." >&4
9506         val="$undef"
9507 fi
9508 set d_sem
9509 eval $setvar
9510
9511 : see whether sys/sem.h defines union semun
9512 echo " "
9513 $cat > try.c <<'END'
9514 #include <sys/types.h>
9515 #include <sys/ipc.h>
9516 #include <sys/sem.h>
9517 int main () { union semun semun; semun.buf = 0; }
9518 END
9519 set try
9520 if eval $compile; then
9521     echo "You have union semun in <sys/sem.h>." >&4
9522     val="$define"
9523 else
9524     echo "You do not have union semun in <sys/sem.h>." >&4
9525     val="$undef"
9526 fi
9527 $rm -f try try.c try.h
9528 set d_union_semun
9529 eval $setvar
9530
9531 : see how to do semctl IPC_STAT
9532 case "$d_sem" in
9533 $define)
9534     : see whether semctl IPC_STAT can use union semun
9535     echo " "
9536     $cat > try.h <<END
9537 #ifndef S_IRUSR
9538 #   ifdef S_IREAD
9539 #       define S_IRUSR S_IREAD
9540 #       define S_IWUSR S_IWRITE
9541 #       define S_IXUSR S_IEXEC
9542 #   else
9543 #       define S_IRUSR 0400
9544 #       define S_IWUSR 0200
9545 #       define S_IXUSR 0100
9546 #   endif
9547 #   define S_IRGRP (S_IRUSR>>3)
9548 #   define S_IWGRP (S_IWUSR>>3)
9549 #   define S_IXGRP (S_IXUSR>>3)
9550 #   define S_IROTH (S_IRUSR>>6)
9551 #   define S_IWOTH (S_IWUSR>>6)
9552 #   define S_IXOTH (S_IXUSR>>6)
9553 #endif
9554 #ifndef S_IRWXU
9555 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9556 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9557 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9558 #endif
9559 END
9560
9561     $cat > try.c <<END
9562 #include <sys/types.h>
9563 #include <sys/ipc.h>
9564 #include <sys/sem.h>
9565 #include <sys/stat.h>
9566 #include <stdio.h>
9567 #include <errno.h>
9568 #include "try.h"
9569 #ifndef errno
9570 extern int errno;
9571 #endif
9572 #$d_union_semun HAS_UNION_SEMUN
9573 int main() {
9574     union semun
9575 #ifndef HAS_UNION_SEMUN
9576     {
9577         int val;
9578         struct semid_ds *buf;
9579         unsigned short *array;
9580     }
9581 #endif
9582     arg;
9583     int sem, st;
9584
9585 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9586     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9587     if (sem > -1) {
9588         struct semid_ds argbuf;
9589         arg.buf = &argbuf;
9590 #       ifdef IPC_STAT
9591         st = semctl(sem, 0, IPC_STAT, arg);
9592         if (st == 0)
9593             printf("semun\n");
9594         else
9595 #       endif /* IPC_STAT */
9596             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9597 #       ifdef IPC_RMID
9598         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9599 #       endif /* IPC_RMID */
9600             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9601     } else
9602 #endif /* IPC_PRIVATE && ... */
9603         printf("semget failed: errno = %d\n", errno);
9604   return 0;
9605 }
9606 END
9607     val="$undef"
9608     set try
9609     if eval $compile; then
9610         xxx=`./try`
9611         case "$xxx" in
9612         semun) val="$define" ;;
9613         esac
9614     fi
9615     $rm -f try try.c
9616     set d_semctl_semun
9617     eval $setvar
9618     case "$d_semctl_semun" in
9619     $define)
9620         echo "You can use union semun for semctl IPC_STAT." >&4
9621         also='also'
9622         ;;
9623     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9624         also=''
9625         ;;
9626     esac
9627
9628     : see whether semctl IPC_STAT can use struct semid_ds pointer
9629     $cat > try.c <<'END'
9630 #include <sys/types.h>
9631 #include <sys/ipc.h>
9632 #include <sys/sem.h>
9633 #include <sys/stat.h>
9634 #include "try.h"
9635 #include <stdio.h>
9636 #include <errno.h>
9637 #ifndef errno
9638 extern int errno;
9639 #endif
9640 int main() {
9641     struct semid_ds arg;
9642     int sem, st;
9643
9644 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9645     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9646     if (sem > -1) {
9647 #       ifdef IPC_STAT
9648         st = semctl(sem, 0, IPC_STAT, &arg);
9649         if (st == 0)
9650             printf("semid_ds\n");
9651         else
9652 #       endif /* IPC_STAT */
9653             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9654 #       ifdef IPC_RMID
9655         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9656 #       endif /* IPC_RMID */
9657             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9658     } else
9659 #endif /* IPC_PRIVATE && ... */
9660         printf("semget failed: errno = %d\n", errno);
9661
9662     return 0;
9663 }
9664 END
9665     val="$undef"
9666     set try
9667     if eval $compile; then
9668         xxx=`./try`
9669         case "$xxx" in
9670         semid_ds) val="$define" ;;
9671         esac
9672     fi
9673     $rm -f try try.c
9674     set d_semctl_semid_ds
9675     eval $setvar
9676     case "$d_semctl_semid_ds" in
9677     $define)
9678         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9679         ;;
9680     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9681         ;;
9682     esac
9683     $rm -f try.h
9684     ;;
9685 *)  val="$undef"
9686
9687     # We do not have the full sem*(2) library, so assume we can not
9688     # use either.
9689
9690     set d_semctl_semun
9691     eval $setvar
9692
9693     set d_semctl_semid_ds
9694     eval $setvar
9695     ;;
9696 esac
9697
9698 : see if setegid exists
9699 set setegid d_setegid
9700 eval $inlibc
9701
9702 : see if seteuid exists
9703 set seteuid d_seteuid
9704 eval $inlibc
9705
9706 : see if setgrent exists
9707 set setgrent d_setgrent
9708 eval $inlibc
9709
9710 : see if sethostent exists
9711 set sethostent d_sethent
9712 eval $inlibc
9713
9714 : see if setlinebuf exists
9715 set setlinebuf d_setlinebuf
9716 eval $inlibc
9717
9718 : see if setlocale exists
9719 set setlocale d_setlocale
9720 eval $inlibc
9721
9722 : see if setnetent exists
9723 set setnetent d_setnent
9724 eval $inlibc
9725
9726 : see if setprotoent exists
9727 set setprotoent d_setpent
9728 eval $inlibc
9729
9730 : see if setpgid exists
9731 set setpgid d_setpgid
9732 eval $inlibc
9733
9734 : see if setpgrp2 exists
9735 set setpgrp2 d_setpgrp2
9736 eval $inlibc
9737
9738 : see if setpriority exists
9739 set setpriority d_setprior
9740 eval $inlibc
9741
9742 : see if setpwent exists
9743 set setpwent d_setpwent
9744 eval $inlibc
9745
9746 : see if setregid exists
9747 set setregid d_setregid
9748 eval $inlibc
9749 set setresgid d_setresgid
9750 eval $inlibc
9751
9752 : see if setreuid exists
9753 set setreuid d_setreuid
9754 eval $inlibc
9755 set setresuid d_setresuid
9756 eval $inlibc
9757
9758 : see if setrgid exists
9759 set setrgid d_setrgid
9760 eval $inlibc
9761
9762 : see if setruid exists
9763 set setruid d_setruid
9764 eval $inlibc
9765
9766 : see if setservent exists
9767 set setservent d_setsent
9768 eval $inlibc
9769
9770 : see if setsid exists
9771 set setsid d_setsid
9772 eval $inlibc
9773
9774 : see if setspent exists
9775 set setspent d_setspent
9776 eval $inlibc
9777
9778 : see if setvbuf exists
9779 set setvbuf d_setvbuf
9780 eval $inlibc
9781
9782 : see if sfio.h is available
9783 set sfio.h i_sfio
9784 eval $inhdr
9785
9786
9787 : see if sfio library is available
9788 case "$i_sfio" in
9789 $define)
9790         val=''
9791         set sfreserve val
9792         eval $inlibc
9793         ;;
9794 *)
9795         val="$undef"
9796         ;;
9797 esac
9798 : Ok, but do we want to use it.
9799 case "$val" in
9800 $define)
9801         case "$usesfio" in
9802         true|$define|[yY]*) dflt='y';;
9803         *) dflt='n';;
9804         esac
9805         echo "$package can use the sfio library, but it is experimental."
9806         rp="You seem to have sfio available, do you want to try using it?"
9807         . ./myread
9808         case "$ans" in
9809         y|Y) ;;
9810         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9811                 val="$undef"
9812                 : Remove sfio from list of libraries to use
9813                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9814                 shift
9815                 libs="$*"
9816                 echo "libs = $libs" >&4
9817                 ;;
9818         esac
9819         ;;
9820 *)      case "$usesfio" in
9821         true|$define|[yY]*)
9822                 echo "Sorry, cannot find sfio on this machine" >&4
9823                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9824                 ;;
9825         esac
9826         ;;
9827 esac
9828 set d_sfio
9829 eval $setvar
9830 case "$d_sfio" in
9831 $define) usesfio='true';;
9832 *) usesfio='false';;
9833 esac
9834
9835 : see if shmctl exists
9836 set shmctl d_shmctl
9837 eval $inlibc
9838
9839 : see if shmget exists
9840 set shmget d_shmget
9841 eval $inlibc
9842
9843 : see if shmat exists
9844 set shmat d_shmat
9845 eval $inlibc
9846 : see what shmat returns
9847 case "$d_shmat" in
9848 "$define")
9849         $cat >shmat.c <<'END'
9850 #include <sys/shm.h>
9851 void *shmat();
9852 END
9853         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9854                 shmattype='void *'
9855         else
9856                 shmattype='char *'
9857         fi
9858         echo "and it returns ($shmattype)." >&4
9859         : see if a prototype for shmat is available
9860         xxx=`./findhdr sys/shm.h`
9861         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9862         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9863                 val="$define"
9864         else
9865                 val="$undef"
9866         fi
9867         $rm -f shmat.[co]
9868         ;;
9869 *)
9870         val="$undef"
9871         ;;
9872 esac
9873 set d_shmatprototype
9874 eval $setvar
9875
9876 : see if shmdt exists
9877 set shmdt d_shmdt
9878 eval $inlibc
9879
9880 : see how much of the 'shm*(2)' library is present.
9881 h_shm=true
9882 echo " "
9883 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9884 *"$undef"*) h_shm=false;;
9885 esac
9886 case "$osname" in
9887 freebsd)
9888     case "`ipcs 2>&1`" in
9889     "SVID shared memory"*"not configured"*)
9890         echo "Your $osname does not have the shm*(2) configured." >&4
9891         h_shm=false
9892         val="$undef"
9893         set shmctl d_shmctl
9894         evat $setvar
9895         set shmget d_shmget
9896         evat $setvar
9897         set shmat d_shmat
9898         evat $setvar
9899         set shmdt d_shmdt
9900         evat $setvar
9901         ;;
9902     esac
9903     ;;
9904 esac
9905 : we could also check for sys/ipc.h ...
9906 if $h_shm && $test `./findhdr sys/shm.h`; then
9907         echo "You have the full shm*(2) library." >&4
9908         val="$define"
9909 else
9910         echo "You don't have the full shm*(2) library." >&4
9911         val="$undef"
9912 fi
9913 set d_shm
9914 eval $setvar
9915
9916 echo " "
9917 : see if we have sigaction
9918 if set sigaction val -f d_sigaction; eval $csym; $val; then
9919         echo 'sigaction() found.' >&4
9920         $cat > try.c <<'EOP'
9921 #include <stdio.h>
9922 #include <sys/types.h>
9923 #include <signal.h>
9924 int main()
9925 {
9926     struct sigaction act, oact;
9927 }
9928 EOP
9929         set try
9930         if eval $compile_ok; then
9931                 val="$define"
9932         else
9933                 echo "But you don't seem to have a useable struct sigaction." >&4
9934                 val="$undef"
9935         fi
9936 else
9937         echo 'sigaction NOT found.' >&4
9938         val="$undef"
9939 fi
9940 set d_sigaction; eval $setvar
9941 $rm -f try try$_o try.c
9942
9943 : see if sigsetjmp exists
9944 echo " "
9945 case "$d_sigsetjmp" in
9946 '')
9947         $cat >try.c <<'EOP'
9948 #include <setjmp.h>
9949 sigjmp_buf env;
9950 int set = 1;
9951 int main()
9952 {
9953         if (sigsetjmp(env,1))
9954                 exit(set);
9955         set = 0;
9956         siglongjmp(env, 1);
9957         exit(1);
9958 }
9959 EOP
9960         set try
9961         if eval $compile; then
9962                 if ./try >/dev/null 2>&1; then
9963                         echo "POSIX sigsetjmp found." >&4
9964                         val="$define"
9965                 else
9966                         $cat >&4 <<EOM
9967 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9968 I'll ignore them.
9969 EOM
9970                         val="$undef"
9971                 fi
9972         else
9973                 echo "sigsetjmp not found." >&4
9974                 val="$undef"
9975         fi
9976         ;;
9977 *) val="$d_sigsetjmp"
9978         case "$d_sigsetjmp" in
9979         $define) echo "POSIX sigsetjmp found." >&4;;
9980         $undef) echo "sigsetjmp not found." >&4;;
9981         esac
9982         ;;
9983 esac
9984 set d_sigsetjmp
9985 eval $setvar
9986 $rm -f try.c try
9987
9988 : see if stat knows about block sizes
9989 echo " "
9990 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9991 eval $hasfield
9992
9993 : see if _ptr and _cnt from stdio act std
9994 echo " "
9995 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
9996         echo "(Looks like you have stdio.h from Linux.)"
9997         case "$stdio_ptr" in
9998         '') stdio_ptr='((fp)->_IO_read_ptr)'
9999                 ptr_lval=$define
10000                 ;;
10001         *)      ptr_lval=$d_stdio_ptr_lval;;
10002         esac
10003         case "$stdio_cnt" in
10004         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10005                 cnt_lval=$undef
10006                 ;;
10007         *)      cnt_lval=$d_stdio_cnt_lval;;
10008         esac
10009         case "$stdio_base" in
10010         '') stdio_base='((fp)->_IO_read_base)';;
10011         esac
10012         case "$stdio_bufsiz" in
10013         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10014         esac
10015 else
10016         case "$stdio_ptr" in
10017         '') stdio_ptr='((fp)->_ptr)'
10018                 ptr_lval=$define
10019                 ;;
10020         *)      ptr_lval=$d_stdio_ptr_lval;;
10021         esac
10022         case "$stdio_cnt" in
10023         '') stdio_cnt='((fp)->_cnt)'
10024                 cnt_lval=$define
10025                 ;;
10026         *)      cnt_lval=$d_stdio_cnt_lval;;
10027         esac
10028         case "$stdio_base" in
10029         '') stdio_base='((fp)->_base)';;
10030         esac
10031         case "$stdio_bufsiz" in
10032         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10033         esac
10034 fi
10035 : test whether _ptr and _cnt really work
10036 echo "Checking how std your stdio is..." >&4
10037 $cat >try.c <<EOP
10038 #include <stdio.h>
10039 #define FILE_ptr(fp)    $stdio_ptr
10040 #define FILE_cnt(fp)    $stdio_cnt
10041 int main() {
10042         FILE *fp = fopen("try.c", "r");
10043         char c = getc(fp);
10044         if (
10045                 18 <= FILE_cnt(fp) &&
10046                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10047         )
10048                 exit(0);
10049         exit(1);
10050 }
10051 EOP
10052 val="$undef"
10053 set try
10054 if eval $compile; then
10055         if ./try; then
10056                 echo "Your stdio acts pretty std."
10057                 val="$define"
10058         else
10059                 echo "Your stdio isn't very std."
10060         fi
10061 else
10062         echo "Your stdio doesn't appear very std."
10063 fi
10064 $rm -f try.c try
10065 set d_stdstdio
10066 eval $setvar
10067
10068 : Can _ptr be used as an lvalue?
10069 case "$d_stdstdio$ptr_lval" in
10070 $define$define) val=$define ;;
10071 *) val=$undef ;;
10072 esac
10073 set d_stdio_ptr_lval
10074 eval $setvar
10075
10076 : Can _cnt be used as an lvalue?
10077 case "$d_stdstdio$cnt_lval" in
10078 $define$define) val=$define ;;
10079 *) val=$undef ;;
10080 esac
10081 set d_stdio_cnt_lval
10082 eval $setvar
10083
10084 : see if _base is also standard
10085 val="$undef"
10086 case "$d_stdstdio" in
10087 $define)
10088         $cat >try.c <<EOP
10089 #include <stdio.h>
10090 #define FILE_base(fp)   $stdio_base
10091 #define FILE_bufsiz(fp) $stdio_bufsiz
10092 int main() {
10093         FILE *fp = fopen("try.c", "r");
10094         char c = getc(fp);
10095         if (
10096                 19 <= FILE_bufsiz(fp) &&
10097                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10098         )
10099                 exit(0);
10100         exit(1);
10101 }
10102 EOP
10103         set try
10104         if eval $compile; then
10105                 if ./try; then
10106                         echo "And its _base field acts std."
10107                         val="$define"
10108                 else
10109                         echo "But its _base field isn't std."
10110                 fi
10111         else
10112                 echo "However, it seems to be lacking the _base field."
10113         fi
10114         $rm -f try.c try
10115         ;;
10116 esac
10117 set d_stdiobase
10118 eval $setvar
10119
10120 $cat >&4 <<EOM
10121 Checking how to access stdio streams by file descriptor number...
10122 EOM
10123 case "$stdio_stream_array" in
10124 '')     $cat >try.c <<EOCP
10125 #include <stdio.h>
10126 int main() {
10127   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10128     printf("yes\n");
10129 }
10130 EOCP
10131         for s in _iob __iob __sF
10132         do
10133                 set try -DSTDIO_STREAM_ARRAY=$s
10134                 if eval $compile; then
10135                         case "`./try$exe_ext`" in
10136                         yes)    stdio_stream_array=$s; break ;;
10137                         esac
10138                 fi
10139         done
10140         $rm -f try.* try$exe_ext
10141 esac
10142 case "$stdio_stream_array" in
10143 '')     $cat >&4 <<EOM
10144 I can't figure out how to access stdio streams by file descriptor number.
10145 EOM
10146         d_stdio_stream_array="$undef"
10147         ;;
10148 *)      $cat >&4 <<EOM
10149 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10150 EOM
10151         d_stdio_stream_array="$define"
10152         ;;
10153 esac
10154
10155 : see if strcoll exists
10156 set strcoll d_strcoll
10157 eval $inlibc
10158
10159 : check for structure copying
10160 echo " "
10161 echo "Checking to see if your C compiler can copy structs..." >&4
10162 $cat >try.c <<'EOCP'
10163 int main()
10164 {
10165         struct blurfl {
10166                 int dyick;
10167         } foo, bar;
10168
10169         foo = bar;
10170 }
10171 EOCP
10172 if $cc -c try.c >/dev/null 2>&1 ; then
10173         val="$define"
10174         echo "Yup, it can."
10175 else
10176         val="$undef"
10177         echo "Nope, it can't."
10178 fi
10179 set d_strctcpy
10180 eval $setvar
10181 $rm -f try.*
10182
10183 : see if strerror and/or sys_errlist[] exist
10184 echo " "
10185 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10186     if set strerror val -f d_strerror; eval $csym; $val; then
10187                 echo 'strerror() found.' >&4
10188                 d_strerror="$define"
10189                 d_strerrm='strerror(e)'
10190                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10191                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10192                         d_syserrlst="$define"
10193                 else
10194                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10195                         d_syserrlst="$undef"
10196                 fi
10197     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10198                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10199                 echo 'strerror() found in string header.' >&4
10200                 d_strerror="$define"
10201                 d_strerrm='strerror(e)'
10202                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10203                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10204                                 d_syserrlst="$define"
10205                 else
10206                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10207                         d_syserrlst="$undef"
10208                 fi
10209     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10210                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10211                 d_strerror="$undef"
10212                 d_syserrlst="$define"
10213                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10214     else
10215                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10216                 d_strerror="$undef"
10217                 d_syserrlst="$undef"
10218                 d_strerrm='"unknown"'
10219     fi
10220 fi
10221
10222 : see if strtod exists
10223 set strtod d_strtod
10224 eval $inlibc
10225
10226 : see if strtol exists
10227 set strtol d_strtol
10228 eval $inlibc
10229
10230 : see if strtoul exists
10231 set strtoul d_strtoul
10232 eval $inlibc
10233
10234 : see if strxfrm exists
10235 set strxfrm d_strxfrm
10236 eval $inlibc
10237
10238 : see if symlink exists
10239 set symlink d_symlink
10240 eval $inlibc
10241
10242 : see if syscall exists
10243 set syscall d_syscall
10244 eval $inlibc
10245
10246 : see if sysconf exists
10247 set sysconf d_sysconf
10248 eval $inlibc
10249
10250 : see if system exists
10251 set system d_system
10252 eval $inlibc
10253
10254 : see if tcgetpgrp exists
10255 set tcgetpgrp d_tcgetpgrp
10256 eval $inlibc
10257
10258 : see if tcsetpgrp exists
10259 set tcsetpgrp d_tcsetpgrp
10260 eval $inlibc
10261
10262 : see if sys/types.h has to be included
10263 set sys/types.h i_systypes
10264 eval $inhdr
10265
10266 : see if prototype for telldir is available
10267 echo " "
10268 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10269 eval $hasproto
10270
10271 : define an is-a-typedef? function
10272 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10273 case "$inclist" in
10274 "") inclist="sys/types.h";;
10275 esac;
10276 eval "varval=\$$var";
10277 case "$varval" in
10278 "")
10279         $rm -f temp.c;
10280         for inc in $inclist; do
10281                 echo "#include <$inc>" >>temp.c;
10282         done;
10283         echo "#ifdef $type" >> temp.c;
10284         echo "printf(\"We have $type\");" >> temp.c;
10285         echo "#endif" >> temp.c;
10286         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10287         if $contains $type temp.E >/dev/null 2>&1; then
10288                 eval "$var=\$type";
10289         else
10290                 eval "$var=\$def";
10291         fi;
10292         $rm -f temp.?;;
10293 *) eval "$var=\$varval";;
10294 esac'
10295
10296 : define an is-a-typedef? function that prompts if the type is not available.
10297 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10298 case "$inclist" in
10299 "") inclist="sys/types.h";;
10300 esac;
10301 eval "varval=\$$var";
10302 case "$varval" in
10303 "")
10304         $rm -f temp.c;
10305         for inc in $inclist; do
10306                 echo "#include <$inc>" >>temp.c;
10307         done;
10308         echo "#ifdef $type" >> temp.c;
10309         echo "printf(\"We have $type\");" >> temp.c;
10310         echo "#endif" >> temp.c;
10311         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10312         echo " " ;
10313         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10314         if $contains $type temp.E >/dev/null 2>&1; then
10315                 echo "$type found." >&4;
10316                 eval "$var=\$type";
10317         else
10318                 echo "$type NOT found." >&4;
10319                 dflt="$def";
10320                 . ./myread ;
10321                 eval "$var=\$ans";
10322         fi;
10323         $rm -f temp.?;;
10324 *) eval "$var=\$varval";;
10325 esac'
10326
10327 : see if this is a sys/times.h system
10328 set sys/times.h i_systimes
10329 eval $inhdr
10330
10331 : see if times exists
10332 echo " "
10333 if set times val -f d_times; eval $csym; $val; then
10334         echo 'times() found.' >&4
10335         d_times="$define"
10336         inc=''
10337         case "$i_systimes" in
10338         "$define") inc='sys/times.h';;
10339         esac
10340         rp="What is the type returned by times() on this system?"
10341         set clock_t clocktype long stdio.h sys/types.h $inc
10342         eval $typedef_ask
10343 else
10344         echo 'times() NOT found, hope that will do.' >&4
10345         d_times="$undef"
10346         clocktype='int'
10347 fi
10348
10349 : see if truncate exists
10350 set truncate d_truncate
10351 eval $inlibc
10352
10353 : see if tzname[] exists
10354 echo " "
10355 if set tzname val -a d_tzname; eval $csym; $val; then
10356         val="$define"
10357         echo 'tzname[] found.' >&4
10358 else
10359         val="$undef"
10360         echo 'tzname[] NOT found.' >&4
10361 fi
10362 set d_tzname
10363 eval $setvar
10364
10365 : see if umask exists
10366 set umask d_umask
10367 eval $inlibc
10368
10369 : backward compatibility for d_hvfork
10370 if test X$d_hvfork != X; then
10371         d_vfork="$d_hvfork"
10372         d_hvfork=''
10373 fi
10374 : see if there is a vfork
10375 val=''
10376 set vfork val
10377 eval $inlibc
10378
10379 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10380 : perl on Solaris 2.x, and probably elsewhere.
10381 case "$val" in
10382 $define)
10383         echo " "
10384         case "$usevfork" in
10385         false) dflt='n';;
10386         *) dflt='y';;
10387         esac
10388         cat <<'EOM'
10389  
10390 Perl can only use a vfork() that doesn't suffer from strict
10391 restrictions on calling functions or modifying global data in
10392 the child.  For example, glibc-2.1 contains such a vfork()
10393 that is unsuitable.  If your system provides a proper fork()
10394 call, chances are that you do NOT want perl to use vfork().
10395
10396 EOM
10397         rp="Do you still want to use vfork()?"
10398         . ./myread
10399         case "$ans" in
10400         y|Y) ;;
10401         *)
10402                 echo "Ok, we won't use vfork()."
10403                 val="$undef"
10404                 ;;
10405         esac
10406         ;;
10407 esac
10408 set d_vfork
10409 eval $setvar
10410 case "$d_vfork" in
10411 $define) usevfork='true';;
10412 *) usevfork='false';;
10413 esac
10414
10415 : see if this is an sysdir system
10416 set sys/dir.h i_sysdir
10417 eval $inhdr
10418
10419 : see if this is an sysndir system
10420 set sys/ndir.h i_sysndir
10421 eval $inhdr
10422
10423 : see if closedir exists
10424 set closedir d_closedir
10425 eval $inlibc
10426
10427 case "$d_closedir" in
10428 "$define")
10429         echo " "
10430         echo "Checking whether closedir() returns a status..." >&4
10431         cat > closedir.c <<EOM
10432 #$i_dirent I_DIRENT             /**/
10433 #$i_sysdir I_SYS_DIR            /**/
10434 #$i_sysndir I_SYS_NDIR          /**/
10435 #$i_systypes I_SYS_TYPES        /**/
10436
10437 #if defined(I_SYS_TYPES)
10438 #include <sys/types.h>
10439 #endif
10440 #if defined(I_DIRENT)
10441 #include <dirent.h>
10442 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10443 #include <sys/dir.h>
10444 #endif
10445 #else
10446 #ifdef I_SYS_NDIR
10447 #include <sys/ndir.h>
10448 #else
10449 #ifdef I_SYS_DIR
10450 #ifdef hp9000s500
10451 #include <ndir.h>       /* may be wrong in the future */
10452 #else
10453 #include <sys/dir.h>
10454 #endif
10455 #endif
10456 #endif
10457 #endif 
10458 int main() { return closedir(opendir(".")); }
10459 EOM
10460         set closedir
10461         if eval $compile_ok; then
10462                 if ./closedir > /dev/null 2>&1 ; then
10463                         echo "Yes, it does."
10464                         val="$undef"
10465                 else
10466                         echo "No, it doesn't."
10467                         val="$define"
10468                 fi
10469         else
10470                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10471                 val="$define"
10472         fi
10473         ;;
10474 *)
10475         val="$undef";
10476         ;;
10477 esac
10478 set d_void_closedir
10479 eval $setvar
10480 $rm -f closedir*
10481 : check for volatile keyword
10482 echo " "
10483 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10484 $cat >try.c <<'EOCP'
10485 int main()
10486 {
10487         typedef struct _goo_struct goo_struct;
10488         goo_struct * volatile goo = ((goo_struct *)0);
10489         struct _goo_struct {
10490                 long long_int;
10491                 int reg_int;
10492                 char char_var;
10493         };
10494         typedef unsigned short foo_t;
10495         char *volatile foo;
10496         volatile int bar;
10497         volatile foo_t blech;
10498         foo = foo;
10499 }
10500 EOCP
10501 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10502         val="$define"
10503         echo "Yup, it does."
10504 else
10505         val="$undef"
10506         echo "Nope, it doesn't."
10507 fi
10508 set d_volatile
10509 eval $setvar
10510 $rm -f try.*
10511
10512 : see if there is a wait4
10513 set wait4 d_wait4
10514 eval $inlibc
10515
10516 : see if waitpid exists
10517 set waitpid d_waitpid
10518 eval $inlibc
10519
10520 : see if wcstombs exists
10521 set wcstombs d_wcstombs
10522 eval $inlibc
10523
10524 : see if wctomb exists
10525 set wctomb d_wctomb
10526 eval $inlibc
10527
10528 : see if writev exists
10529 set writev d_writev
10530 eval $inlibc
10531
10532 : preserve RCS keywords in files with variable substitution, grrr
10533 Date='$Date'
10534 Id='$Id'
10535 Log='$Log'
10536 RCSfile='$RCSfile'
10537 Revision='$Revision'
10538
10539 case "$crosscompile" in
10540 ''|[nN]*) crosscompile="$undef" ;;
10541 esac
10542
10543 case "$osname" in
10544 next|rhapsody) multiarch="$define" ;;
10545 esac
10546 case "$multiarch" in
10547 ''|[nN]*) multiarch="$undef" ;;
10548 esac
10549
10550 : check for alignment requirements
10551 echo " "
10552 case "$crosscompile$multiarch" in
10553 *$define*)
10554         $cat <<EOM
10555 You seem to be either cross-compiling or doing a multiarchitecture build,
10556 skipping the memory alignment check.
10557
10558 EOM
10559         case "$alignbytes" in
10560         '') alignbytes=8 ;;
10561         esac
10562         ;;
10563 *)
10564         case "$alignbytes" in
10565         '') echo "Checking alignment constraints..." >&4
10566                 $cat >try.c <<'EOCP'
10567 struct foobar {
10568         char foo;
10569         double bar;
10570 } try_algn;
10571 int main()
10572 {
10573         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10574 }
10575 EOCP
10576                 set try
10577                 if eval $compile_ok; then
10578                         dflt=`./try`
10579                 else
10580                         dflt='8'
10581                         echo "(I can't seem to compile the test program...)"
10582                 fi
10583                 ;;
10584         *) dflt="$alignbytes"
10585                 ;;
10586         esac
10587         rp="Doubles must be aligned on a how-many-byte boundary?"
10588         . ./myread
10589         alignbytes="$ans"
10590         $rm -f try.c try
10591         ;;
10592 esac
10593
10594
10595 : check for ordering of bytes in a long
10596 echo " "
10597 case "$crosscompile$multiarch" in
10598 *$define*)
10599         $cat <<EOM
10600 You seem to be either cross-compiling or doing a multiarchitecture build,
10601 skipping the byteorder check.
10602
10603 EOM
10604         byteorder=''
10605         ;;
10606 *)
10607         case "$byteorder" in
10608         '')
10609                 $cat <<'EOM'
10610 In the following, larger digits indicate more significance.  A big-endian
10611 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10612 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10613 machines may have weird orders like 3412.  A Cray will report 87654321. If
10614 the test program works the default is probably right.
10615 I'm now running the test program...
10616 EOM
10617                 $cat >try.c <<'EOCP'
10618 #include <stdio.h>
10619 int main()
10620 {
10621         int i;
10622         union {
10623                 unsigned long l;
10624                 char c[sizeof(long)];
10625         } u;
10626
10627         if (sizeof(long) > 4)
10628                 u.l = (0x08070605L << 32) | 0x04030201L;
10629         else
10630                 u.l = 0x04030201L;
10631         for (i = 0; i < sizeof(long); i++)
10632                 printf("%c", u.c[i]+'0');
10633         printf("\n");
10634         exit(0);
10635 }
10636 EOCP
10637                 xxx_prompt=y
10638                 set try
10639                 if eval $compile && ./try > /dev/null; then
10640                         dflt=`./try`
10641                         case "$dflt" in
10642                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10643                                 echo "(The test program ran ok.)"
10644                                 echo "byteorder=$dflt"
10645                                 xxx_prompt=n
10646                         ;;
10647                         ????|????????) echo "(The test program ran ok.)" ;;
10648                         *) echo "(The test program didn't run right for some reason.)" ;;
10649                         esac
10650                 else
10651                         dflt='4321'
10652                         cat <<'EOM'
10653 (I can't seem to compile the test program.  Guessing big-endian...)
10654 EOM
10655                 fi
10656                 case "$xxx_prompt" in
10657                 y)
10658                         rp="What is the order of bytes in a long?"
10659                         . ./myread
10660                         byteorder="$ans"
10661                         ;;
10662                 *)      byteorder=$dflt
10663                         ;;
10664                 esac
10665                 ;;
10666         esac
10667         $rm -f try.c try
10668         ;;
10669 esac
10670
10671
10672 : how do we catenate cpp tokens here?
10673 echo " "
10674 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10675 $cat >cpp_stuff.c <<'EOCP'
10676 #define RCAT(a,b)a/**/b
10677 #define ACAT(a,b)a ## b
10678 RCAT(Rei,ser)
10679 ACAT(Cir,cus)
10680 EOCP
10681 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10682 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10683         echo "Oh!  Smells like ANSI's been here." >&4
10684         echo "We can catify or stringify, separately or together!"
10685         cpp_stuff=42
10686 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10687         echo "Ah, yes!  The good old days!" >&4
10688         echo "However, in the good old days we don't know how to stringify and"
10689         echo "catify at the same time."
10690         cpp_stuff=1
10691 else
10692         $cat >&4 <<EOM
10693 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10694 to have to edit the values of CAT[2-5] in config.h...
10695 EOM
10696         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10697 fi
10698 $rm -f cpp_stuff.*
10699
10700 : see if this is a db.h system
10701 set db.h i_db
10702 eval $inhdr
10703
10704 case "$i_db" in
10705 $define)
10706         : Check db version.
10707         echo " "
10708         echo "Checking Berkeley DB version ..." >&4
10709         $cat >try.c <<EOCP
10710 #$d_const HASCONST
10711 #ifndef HASCONST
10712 #define const
10713 #endif
10714 #include <sys/types.h>
10715 #include <stdio.h>
10716 #include <db.h>
10717 int main()
10718 {
10719 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10720     int Major, Minor, Patch ;
10721     unsigned long Version ;
10722     (void)db_version(&Major, &Minor, &Patch) ;
10723     printf("You have Berkeley DB Version 2 or greater\n");
10724
10725     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10726                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10727     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10728                 Major, Minor, Patch) ;
10729
10730     /* check that db.h & libdb are compatible */
10731     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10732         printf("db.h and libdb are incompatible\n") ;
10733         exit(3);        
10734     }
10735
10736     printf("db.h and libdb are compatible\n") ;
10737
10738     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10739                 + DB_VERSION_PATCH ;
10740
10741     /* needs to be >= 2.3.4 */
10742     if (Version < 2003004) {
10743     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10744         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10745         exit(2);        
10746     }
10747
10748     exit(0);
10749 #else
10750 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10751     printf("You have Berkeley DB Version 1\n");
10752     exit(0);    /* DB version < 2: the coast is clear. */
10753 #else
10754     exit(1);    /* <db.h> not Berkeley DB? */
10755 #endif
10756 #endif
10757 }
10758 EOCP
10759         set try
10760         if eval $compile && ./try; then
10761                 echo 'Looks OK.' >&4
10762         else
10763                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10764                 i_db=$undef
10765                 case " $libs " in
10766                 *"-ldb "*)
10767                         : Remove db from list of libraries to use
10768                         echo "Removing unusable -ldb from library list" >&4
10769                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10770                         shift
10771                         libs="$*"
10772                         echo "libs = $libs" >&4
10773                         ;;
10774                 esac
10775         fi
10776         $rm -f try.*
10777         ;;
10778 esac
10779
10780 case "$i_db" in
10781 define)
10782         : Check the return type needed for hash 
10783         echo " "
10784         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10785         $cat >try.c <<EOCP
10786 #$d_const HASCONST
10787 #ifndef HASCONST
10788 #define const
10789 #endif
10790 #include <sys/types.h>
10791 #include <db.h>
10792
10793 #ifndef DB_VERSION_MAJOR
10794 u_int32_t hash_cb (ptr, size)
10795 const void *ptr;
10796 size_t size;
10797 {
10798 }
10799 HASHINFO info;
10800 int main()
10801 {
10802         info.hash = hash_cb;
10803 }
10804 #endif
10805 EOCP
10806         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10807                 if $contains warning try.out >>/dev/null 2>&1 ; then
10808                         db_hashtype='int'
10809                 else
10810                         db_hashtype='u_int32_t'
10811                 fi
10812         else
10813                 : XXX Maybe we should just give up here.
10814                 db_hashtype=u_int32_t
10815                 $cat try.out >&4
10816                 echo "Help:  I can't seem to compile the db test program." >&4
10817                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10818         fi
10819         $rm -f try.*
10820         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10821         ;;
10822 *)      db_hashtype=u_int32_t
10823         ;;
10824 esac
10825 case "$i_db" in
10826 define)
10827         : Check the return type needed for prefix 
10828         echo " "
10829         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10830         cat >try.c <<EOCP
10831 #$d_const HASCONST
10832 #ifndef HASCONST
10833 #define const
10834 #endif
10835 #include <sys/types.h>
10836 #include <db.h>
10837
10838 #ifndef DB_VERSION_MAJOR
10839 size_t prefix_cb (key1, key2)
10840 const DBT *key1;
10841 const DBT *key2;
10842 {
10843 }
10844 BTREEINFO info;
10845 int main()
10846 {
10847         info.prefix = prefix_cb;
10848 }
10849 #endif
10850 EOCP
10851         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10852                 if $contains warning try.out >>/dev/null 2>&1 ; then
10853                         db_prefixtype='int'
10854                 else
10855                         db_prefixtype='size_t'
10856                 fi
10857         else
10858                 db_prefixtype='size_t'
10859                 : XXX Maybe we should just give up here.
10860                 $cat try.out >&4
10861                 echo "Help:  I can't seem to compile the db test program." >&4
10862                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10863         fi
10864         $rm -f try.*
10865         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10866         ;;
10867 *)      db_prefixtype='size_t'
10868         ;;
10869 esac
10870
10871 : check for void type
10872 echo " "
10873 echo "Checking to see how well your C compiler groks the void type..." >&4
10874 case "$voidflags" in
10875 '')
10876         $cat >try.c <<'EOCP'
10877 #if TRY & 1
10878 void sub() {
10879 #else
10880 sub() {
10881 #endif
10882         extern void moo();      /* function returning void */
10883         void (*goo)();          /* ptr to func returning void */
10884 #if TRY & 8
10885         void *hue;              /* generic ptr */
10886 #endif
10887 #if TRY & 2
10888         void (*foo[10])();
10889 #endif
10890
10891 #if TRY & 4
10892         if(goo == moo) {
10893                 exit(0);
10894         }
10895 #endif
10896         exit(0);
10897 }
10898 int main() { sub(); }
10899 EOCP
10900         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10901                 voidflags=$defvoidused
10902         echo "Good.  It appears to support void to the level $package wants.">&4
10903                 if $contains warning .out >/dev/null 2>&1; then
10904                         echo "However, you might get some warnings that look like this:"
10905                         $cat .out
10906                 fi
10907         else
10908 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10909                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10910                         echo "It supports 1..."
10911                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10912                                 echo "It also supports 2..."
10913                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10914                                         voidflags=7
10915                                         echo "And it supports 4 but not 8 definitely."
10916                                 else
10917                                         echo "It doesn't support 4..."
10918                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10919                                                 voidflags=11
10920                                                 echo "But it supports 8."
10921                                         else
10922                                                 voidflags=3
10923                                                 echo "Neither does it support 8."
10924                                         fi
10925                                 fi
10926                         else
10927                                 echo "It does not support 2..."
10928                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10929                                         voidflags=13
10930                                         echo "But it supports 4 and 8."
10931                                 else
10932                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10933                                                 voidflags=5
10934                                                 echo "And it supports 4 but has not heard about 8."
10935                                         else
10936                                                 echo "However it supports 8 but not 4."
10937                                         fi
10938                                 fi
10939                         fi
10940                 else
10941                         echo "There is no support at all for void."
10942                         voidflags=0
10943                 fi
10944         fi
10945 esac
10946 case "$voidflags" in
10947 "$defvoidused") ;;
10948 *)      $cat >&4 <<'EOM'
10949   Support flag bits are:
10950     1: basic void declarations.
10951     2: arrays of pointers to functions returning void.
10952     4: operations between pointers to and addresses of void functions.
10953     8: generic void pointers.
10954 EOM
10955         dflt="$voidflags";
10956         rp="Your void support flags add up to what?"
10957         . ./myread
10958         voidflags="$ans"
10959         ;;
10960 esac
10961 $rm -f try.* .out
10962
10963
10964 : How can we generate normalized random numbers ?
10965 echo " "
10966 echo "Looking for a random number function..." >&4
10967 case "$randfunc" in
10968 '')
10969         if set drand48 val -f; eval $csym; $val; then
10970                 dflt="drand48"
10971                 echo "Good, found drand48()." >&4
10972         elif set random val -f; eval $csym; $val; then
10973                 dflt="random"
10974                 echo "OK, found random()." >&4
10975         else
10976                 dflt="rand"
10977                 echo "Yick, looks like I have to use rand()." >&4
10978         fi
10979         echo " "
10980         ;;
10981 *)
10982         dflt="$randfunc"
10983         ;;
10984 esac
10985 cont=true
10986
10987 case "$ccflags" in
10988 *-Dmy_rand=*|*-Dmy_srand=*)
10989         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10990         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10991         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10992         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10993         ;;
10994 esac
10995
10996 while $test "$cont"; do
10997         rp="Use which function to generate random numbers?"
10998         . ./myread
10999         if $test "$ans" = "$dflt"; then
11000                 : null
11001         else
11002                 randbits=''
11003         fi
11004         randfunc="$ans"
11005         if set $ans val -f; eval $csym; $val; then
11006                 cont=''
11007         else
11008                 dflt=y
11009                 rp="I cannot find function $ans. Use that name anyway?"
11010                 . ./myread
11011                 dflt=rand
11012                 case "$ans" in
11013                         [yY]*) cont='';;
11014                 esac
11015         fi
11016         case "$cont" in
11017         '')
11018                 case "$randfunc" in
11019                 drand48)
11020                         drand01="drand48()"
11021                         seedfunc="srand48"
11022                         randbits=48
11023                         randseedtype=long
11024                         ;;
11025                 rand|random)
11026                         case "$randbits" in
11027                         '')
11028 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11029                                 $cat >try.c <<EOCP
11030 #$i_unistd I_UNISTD
11031 #$i_stdlib I_STDLIB
11032 #include <stdio.h>
11033 #ifdef I_UNISTD
11034 #  include <unistd.h>
11035 #endif
11036 #ifdef I_STDLIB
11037 #  include <stdlib.h>
11038 #endif
11039 int main()
11040 {
11041         register int i;
11042         register unsigned long tmp;
11043         register unsigned long max = 0L;
11044
11045         for (i = 1000; i; i--) {
11046                 tmp = (unsigned long) $randfunc();
11047                 if (tmp > max) max = tmp;
11048         }
11049         for (i = 0; max; i++)
11050                 max /= 2;
11051         printf("%d\n",i);
11052 }
11053 EOCP
11054                                 set try
11055                                 if eval $compile_ok; then
11056                                         dflt=`try`
11057                                 else
11058                                         dflt='?'
11059                                         echo "(I can't seem to compile the test program...)"
11060                                 fi
11061                                 ;;
11062                         *)
11063                                 dflt="$randbits"
11064                                 ;;
11065                         esac
11066                         rp="How many bits does your $randfunc() function produce?"
11067                         . ./myread
11068                         randbits="$ans"
11069                         $rm -f try.c try
11070                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11071                         seedfunc="s$randfunc"
11072                         randseedtype=unsigned
11073                         ;;
11074                 *)
11075                         dflt="31"
11076                         rp="How many bits does your $randfunc() function produce?"
11077                         . ./myread
11078                         randbits="$ans"
11079                         seedfunc="s$randfunc"
11080                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11081                         if set $seedfunc val -f; eval $csym; $val; then
11082                                 echo "(Using $seedfunc() to seed random generator)"
11083                         else
11084                                 echo "(Warning: no $seedfunc() to seed random generator)"
11085                                 seedfunc=rand
11086                         fi
11087                         randseedtype=unsigned
11088                         ;;
11089                 esac
11090                 ;;
11091         esac
11092 done
11093
11094 echo " "
11095 echo "Determining whether or not we are on an EBCDIC system..." >&4
11096 $cat >tebcdic.c <<'EOM'
11097 int main()
11098 {
11099   if ('M'==0xd4) return 0;
11100   return 1;
11101 }
11102 EOM
11103
11104 val=$undef
11105 set tebcdic
11106 if eval $compile_ok; then
11107         if ./tebcdic; then
11108                 echo "You have EBCDIC." >&4
11109                 val="$define"
11110         else
11111                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin, or UTF." >&4
11112         fi
11113 else
11114         echo "I'm unable to compile the test program." >&4
11115         echo "I'll assume ASCII or some ISO Latin." >&4
11116 fi
11117 $rm -f tebcdic.c tebcdic
11118 set ebcdic
11119 eval $setvar
11120
11121 echo " "
11122 $cat >&4 <<EOM
11123 Checking how to flush all pending stdio output...
11124 EOM
11125 # I only know how to find the first 32 possibly open files on SunOS.
11126 # See also hints/sunos_4_1.sh and util.c  --AD
11127 case "$osname" in
11128 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11129 esac
11130 $cat >>try.c <<EOCP
11131 #include <stdio.h>
11132 #$i_unistd I_UNISTD
11133 #ifdef I_UNISTD
11134 # include <unistd.h>
11135 #endif
11136 #$d_sysconf HAS_SYSCONF
11137 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11138 #ifdef HAS_STDIO_STREAM_ARRAY
11139 # define STDIO_STREAM_ARRAY $stdio_stream_array
11140 #endif
11141 int main() {
11142   FILE* p = fopen("try.out", "w");
11143 #ifdef TRY_FPUTC
11144   fputc('x', p);
11145 #else
11146 # ifdef TRY_FPRINTF
11147   fprintf(p, "x");
11148 # endif
11149 #endif
11150 #ifdef TRY_FFLUSH_NULL
11151   fflush(NULL);
11152 #endif
11153 #ifdef TRY_FFLUSH_ALL
11154   {
11155     long open_max = -1;
11156 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11157     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11158 # else
11159 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11160     open_max = sysconf(_SC_OPEN_MAX);
11161 #  else
11162 #   ifdef FOPEN_MAX
11163     open_max = FOPEN_MAX;
11164 #   else
11165 #    ifdef OPEN_MAX
11166     open_max = OPEN_MAX;
11167 #    else
11168 #     ifdef _NFILE
11169     open_max = _NFILE;
11170 #     endif
11171 #    endif
11172 #   endif
11173 #  endif
11174 # endif 
11175 # ifdef HAS_STDIO_STREAM_ARRAY
11176     if (open_max > 0) {
11177       long i;
11178       for (i = 0; i < open_max; i++)
11179             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11180                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11181                 STDIO_STREAM_ARRAY[i]._flag)
11182                 fflush(&STDIO_STREAM_ARRAY[i]);
11183     }   
11184   }
11185 # endif
11186 #endif
11187   _exit(42);
11188 }
11189 EOCP
11190 : first we have to find out how _not_ to flush
11191 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11192     output=''
11193     set try -DTRY_FPUTC
11194     if eval $compile; then
11195             $rm -f try.out
11196             ./try$exe_ext 2>/dev/null
11197             if $test ! -s try.out -a "X$?" = X42; then
11198                 output=-DTRY_FPUTC
11199             fi
11200     fi
11201     case "$output" in
11202     '')
11203             set try -DTRY_FPRINTF
11204             $rm -f try.out
11205             if eval $compile; then
11206                     $rm -f try.out
11207                     ./try$exe_ext 2>/dev/null
11208                     if $test ! -s try.out -a "X$?" = X42; then
11209                         output=-DTRY_FPRINTF
11210                     fi
11211             fi
11212         ;;
11213     esac
11214 fi
11215 : check for fflush NULL behaviour
11216 case "$fflushNULL" in
11217 '')     set try -DTRY_FFLUSH_NULL $output
11218         if eval $compile; then
11219                 $rm -f try.out
11220                 ./try$exe_ext 2>/dev/null
11221                 code="$?"
11222                 if $test -s try.out -a "X$code" = X42; then
11223                         fflushNULL="`$cat try.out`"
11224                 else
11225                         if $test "X$code" != X42; then
11226                                 $cat >&4 <<EOM
11227 (If this test failed, don't worry, we'll try another method shortly.)
11228 EOM
11229                         fi
11230                 fi
11231         fi
11232         $rm -f core try.core core.try.*
11233         case "$fflushNULL" in
11234         x)      $cat >&4 <<EOM
11235 Your fflush(NULL) works okay.
11236 EOM
11237                 fflushNULL="$define"
11238                 ;;
11239         '')     $cat >&4 <<EOM
11240 Your fflush(NULL) isn't working (contrary to ANSI C).
11241 EOM
11242                 fflushNULL="$undef"
11243                 ;;
11244         *)      $cat >&4 <<EOM
11245 Cannot figure out whether your fflush(NULL) works or not.
11246 I'm assuming it doesn't (contrary to ANSI C).
11247 EOM
11248                 fflushNULL="$undef"
11249                 ;;
11250         esac
11251         ;;
11252 $define|true|[yY]*)
11253         fflushNULL="$define"
11254         ;;
11255 *)
11256         fflushNULL="$undef"
11257         ;;
11258 esac
11259 : check explicit looping only if NULL did not work
11260 case "$fflushNULL" in
11261 "$undef")
11262         : check for fflush all behaviour
11263         case "$fflushall" in
11264         '')     set try -DTRY_FFLUSH_ALL $output
11265                 if eval $compile; then
11266                         $cat >&4 <<EOM
11267 (Now testing the other method--but note that also this may fail.)
11268 EOM
11269                         $rm -f try.out
11270                         ./try$exe_ext 2>/dev/null
11271                         if $test -s try.out -a "X$?" = X42; then
11272                                 fflushall="`$cat try.out`"
11273                         fi
11274                 fi
11275                 $rm -f core try.core core.try.*
11276                 case "$fflushall" in
11277                 x)      $cat >&4 <<EOM
11278 Whew. Flushing explicitly all the stdio streams works.
11279 EOM
11280                         fflushall="$define"
11281                         ;;
11282                 '')     $cat >&4 <<EOM
11283 Sigh. Flushing explicitly all the stdio streams doesn't work.
11284 EOM
11285                         fflushall="$undef"
11286                         ;;
11287                 *)      $cat >&4 <<EOM
11288 Cannot figure out whether flushing stdio streams explicitly works or not.
11289 I'm assuming it doesn't.
11290 EOM
11291                         fflushall="$undef"
11292                         ;;
11293                 esac
11294                 ;;
11295         "$define"|true|[yY]*)
11296                 fflushall="$define"
11297                 ;;
11298         *)
11299                 fflushall="$undef"
11300                 ;;
11301         esac
11302         ;;
11303 *)      fflushall="$undef"      
11304         ;;
11305 esac
11306 case "$fflushNULL$fflushall" in
11307 undefundef)
11308         $cat <<EOM
11309 I cannot figure out how to flush pending stdio output.
11310 EOM
11311         ;;
11312 esac
11313 $rm -f try.* try$exe_ext
11314
11315 : see what type file positions are declared as in the library
11316 rp="What is the type for file position used by fsetpos()?"
11317 set fpos_t fpostype long stdio.h sys/types.h
11318 eval $typedef_ask
11319
11320 : Store the full pathname to the ar program for use in the C program
11321 : Respect a hint or command line value for full_ar.
11322 case "$full_ar" in
11323 '') full_ar=$ar ;;
11324 esac
11325
11326 : Store the full pathname to the sed program for use in the C program
11327 full_sed=$sed
11328
11329 : see what type gids are declared as in the kernel
11330 echo " "
11331 echo "Looking for the type for group ids returned by getgid()."
11332 set gid_t gidtype xxx stdio.h sys/types.h
11333 eval $typedef
11334 case "$gidtype" in
11335 xxx)
11336         xxx=`./findhdr sys/user.h`
11337         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11338         case $1 in
11339         unsigned) dflt="$1 $2" ;;
11340         *) dflt="$1" ;;
11341         esac
11342         ;;
11343 *) dflt="$gidtype";;
11344 esac
11345 case "$gidtype" in
11346 gid_t) echo "gid_t found." ;;
11347 *)      rp="What is the type for group ids returned by getgid()?"
11348         . ./myread
11349         gidtype="$ans"
11350         ;;
11351 esac
11352
11353 : see if getgroups exists
11354 set getgroups d_getgrps
11355 eval $inlibc
11356
11357 : see if setgroups exists
11358 set setgroups d_setgrps
11359 eval $inlibc
11360
11361
11362 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11363 echo " "
11364 case "$d_getgrps$d_setgrps" in
11365 *define*)
11366         case "$groupstype" in
11367         '') dflt="$gidtype" ;;
11368         *)  dflt="$groupstype" ;;
11369         esac
11370         $cat <<EOM
11371 What type of pointer is the second argument to getgroups() and setgroups()?
11372 Usually this is the same as group ids, $gidtype, but not always.
11373
11374 EOM
11375         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11376         . ./myread
11377         groupstype="$ans"
11378         ;;
11379 *)  groupstype="$gidtype";;
11380 esac
11381
11382 : see what type lseek is declared as in the kernel
11383 rp="What is the type used for lseek's offset on this system?"
11384 set off_t lseektype long stdio.h sys/types.h
11385 eval $typedef_ask
11386
11387 echo " "
11388 $echo $n "Checking to see how big your file offsets are...$c" >&4
11389 $cat >try.c <<EOCP
11390 #include <sys/types.h>
11391 #include <stdio.h>
11392 int main()
11393 {
11394         printf("%d\n", sizeof($lseektype));
11395 }
11396 EOCP
11397 set try
11398 if eval $compile_ok; then
11399         lseeksize=`./try`
11400         $echo " $lseeksize bytes." >&4
11401 else
11402         dflt='4'
11403         echo " "
11404         echo "(I can't seem to compile the test program.  Guessing...)"
11405         rp="What is the size of your file offsets (in bytes)?"
11406         . ./myread
11407         lseeksize="$ans"
11408 fi
11409 $rm -f try.c try
11410
11411 echo " "
11412 echo "Checking if your $make program sets \$(MAKE)..." >&4
11413 case "$make_set_make" in
11414 '')
11415         $sed 's/^X //' > testmake.mak << 'EOF'
11416 Xall:
11417 X       @echo 'maketemp="$(MAKE)"'
11418 EOF
11419         case "`$make -f testmake.mak 2>/dev/null`" in
11420         *maketemp=*) make_set_make='#' ;;
11421         *)      make_set_make="MAKE=$make" ;;
11422         esac
11423         $rm -f testmake.mak
11424         ;;
11425 esac
11426 case "$make_set_make" in
11427 '#') echo "Yup, it does.";;
11428 *) echo "Nope, it doesn't.";;
11429 esac
11430
11431 : see what type is used for mode_t
11432 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11433 set mode_t modetype int stdio.h sys/types.h
11434 eval $typedef_ask
11435
11436 : define a fucntion to check prototypes
11437 $cat > protochk <<EOSH
11438 $startsh
11439 cc="$cc"
11440 optimize="$optimize"
11441 ccflags="$ccflags"
11442 prototype="$prototype"
11443 define="$define"
11444 rm=$rm
11445 EOSH
11446
11447 $cat >> protochk <<'EOSH'
11448
11449 $rm -f try.c
11450 foo="$1"
11451 shift
11452 while test $# -ge 2; do
11453         case "$1" in
11454                 $define) echo "#include <$2>" >> try.c ;;
11455                 literal) echo "$2" >> try.c ;;
11456         esac
11457     shift 2
11458 done
11459 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11460 cat >> try.c <<'EOCP'
11461 #ifdef CAN_PROTOTYPE
11462 #define _(args) args
11463 #else
11464 #define _(args) ()
11465 #endif
11466 EOCP
11467 echo "$foo" >> try.c
11468 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11469 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11470 status=$?
11471 $rm -f try.[co]
11472 exit $status
11473 EOSH
11474 chmod +x protochk
11475 $eunicefix protochk
11476
11477 : see what type is used for size_t
11478 rp="What is the type used for the length parameter for string functions?"
11479 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11480 eval $typedef_ask
11481
11482 : check for type of arguments to gethostbyaddr. 
11483 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11484         case "$d_gethbyaddr" in
11485         $define)
11486                 $cat <<EOM
11487
11488 Checking to see what type of arguments are accepted by gethostbyaddr().
11489 EOM
11490                 hdrs="$define sys/types.h
11491                         $d_socket sys/socket.h 
11492                         $i_niin netinet/in.h 
11493                         $i_netdb netdb.h
11494                         $i_unistd unistd.h"
11495                 : The first arg can 'char *' or 'void *'
11496                 : The second arg is some of integral type
11497                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11498                         for yyy in size_t long int; do
11499                                 case "$netdb_host_type" in
11500                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11501                                         if ./protochk "$try" $hdrs; then
11502                                                 echo "Your system accepts $xxx for the first arg."
11503                                                 echo "...and $yyy for the second arg."
11504                                                 netdb_host_type="$xxx"
11505                                                 netdb_hlen_type="$yyy"
11506                                         fi
11507                                         ;;
11508                                 esac
11509                         done
11510                 done
11511                 : In case none of those worked, prompt the user.
11512                 case "$netdb_host_type" in
11513                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11514                         dflt='char *'
11515                         . ./myread
11516                         netdb_host_type=$ans
11517                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11518                         dflt="$sizetype"
11519                         . ./myread
11520                         netdb_hlen_type=$ans
11521                         ;;
11522                 esac
11523                 ;;
11524         *)      : no gethostbyaddr, so pick harmless defaults
11525                 netdb_host_type='char *'
11526                 netdb_hlen_type="$sizetype"
11527                 ;;
11528         esac
11529         # Remove the "const" if needed. -- but then we'll have a 
11530         # prototype clash!
11531         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11532 fi
11533
11534 : check for type of argument to gethostbyname. 
11535 if test "X$netdb_name_type" = X ; then
11536         case "$d_gethbyname" in
11537         $define)
11538                 $cat <<EOM
11539
11540 Checking to see what type of argument is accepted by gethostbyname().
11541 EOM
11542                 hdrs="$define sys/types.h
11543                         $d_socket sys/socket.h 
11544                         $i_niin netinet/in.h 
11545                         $i_netdb netdb.h
11546                         $i_unistd unistd.h"
11547                 for xxx in "const char *" "char *"; do
11548                         case "$netdb_name_type" in
11549                         '')     try="extern struct hostent *gethostbyname($xxx);"
11550                                 if ./protochk "$try" $hdrs; then
11551                                         echo "Your system accepts $xxx."
11552                                         netdb_name_type="$xxx"
11553                                 fi
11554                                 ;;
11555                         esac
11556                 done
11557                 : In case none of those worked, prompt the user.
11558                 case "$netdb_name_type" in
11559                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11560                         dflt='char *'
11561                         . ./myread
11562                         netdb_name_type=$ans
11563                         ;;
11564                 esac
11565                 ;;
11566         *)      : no gethostbyname, so pick harmless default
11567                 netdb_name_type='char *'
11568                 ;;
11569         esac
11570 fi
11571
11572 : check for type of 1st argument to getnetbyaddr. 
11573 if test "X$netdb_net_type" = X ; then
11574         case "$d_getnbyaddr" in
11575         $define)
11576                 $cat <<EOM
11577
11578 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11579 EOM
11580                 hdrs="$define sys/types.h
11581                         $d_socket sys/socket.h 
11582                         $i_niin netinet/in.h 
11583                         $i_netdb netdb.h
11584                         $i_unistd unistd.h"
11585                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11586                         case "$netdb_net_type" in
11587                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11588                                 if ./protochk "$try" $hdrs; then
11589                                         echo "Your system accepts $xxx."
11590                                         netdb_net_type="$xxx"
11591                                 fi
11592                                 ;;
11593                         esac
11594                 done
11595                 : In case none of those worked, prompt the user.
11596                 case "$netdb_net_type" in
11597                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11598                         dflt='long'
11599                         . ./myread
11600                         netdb_net_type=$ans
11601                         ;;
11602                 esac
11603                 ;;
11604         *)      : no getnetbyaddr, so pick harmless default
11605                 netdb_net_type='long'
11606                 ;;
11607         esac
11608 fi
11609 : locate the preferred pager for this system
11610 case "$pager" in
11611 '')
11612         dflt=''
11613         case "$pg" in
11614         /*) dflt=$pg;;
11615         esac
11616         case "$more" in
11617         /*) dflt=$more;;
11618         esac
11619         case "$less" in
11620         /*) dflt=$less;;
11621         esac
11622         case "$dflt" in
11623         '') dflt=/usr/ucb/more;;
11624         esac
11625         ;;
11626 *) dflt="$pager";;
11627 esac
11628 echo " "
11629 fn=f/
11630 rp='What pager is used on your system?'
11631 . ./getfile
11632 pager="$ans"
11633
11634 : see what type pids are declared as in the kernel
11635 rp="What is the type of process ids on this system?"
11636 set pid_t pidtype int stdio.h sys/types.h
11637 eval $typedef_ask
11638
11639 : check for length of pointer
11640 echo " "
11641 case "$ptrsize" in
11642 '')
11643         $echo $n "Checking to see how big your pointers are...$c" >&4
11644         if test "$voidflags" -gt 7; then
11645                 echo '#define VOID_PTR char *' > try.c
11646         else
11647                 echo '#define VOID_PTR void *' > try.c
11648         fi
11649         $cat >>try.c <<'EOCP'
11650 #include <stdio.h>
11651 int main()
11652 {
11653         printf("%d\n", sizeof(VOID_PTR));
11654         exit(0);
11655 }
11656 EOCP
11657         set try
11658         if eval $compile_ok; then
11659                 ptrsize=`./try`
11660                 $echo " $ptrsize bytes." >&4
11661         else
11662                 dflt='4'
11663                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11664                 rp="What is the size of a pointer (in bytes)?"
11665                 . ./myread
11666                 ptrsize="$ans"
11667         fi
11668         ;;
11669 esac
11670 $rm -f try.c try
11671
11672 : see if ar generates random libraries by itself
11673 echo " "
11674 echo "Checking how to generate random libraries on your machine..." >&4
11675 echo 'int bar1() { return bar2(); }' > bar1.c
11676 echo 'int bar2() { return 2; }' > bar2.c
11677 $cat > foo.c <<'EOP'
11678 int main() { printf("%d\n", bar1()); exit(0); }
11679 EOP
11680 $cc $ccflags -c bar1.c >/dev/null 2>&1
11681 $cc $ccflags -c bar2.c >/dev/null 2>&1
11682 $cc $ccflags -c foo.c >/dev/null 2>&1
11683 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11684 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11685         ./foobar >/dev/null 2>&1; then
11686         echo "$ar appears to generate random libraries itself."
11687         orderlib=false
11688         ranlib=":"
11689 elif $ar ts bar$_a >/dev/null 2>&1 &&
11690         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11691         ./foobar >/dev/null 2>&1; then
11692                 echo "a table of contents needs to be added with '$ar ts'."
11693                 orderlib=false
11694                 ranlib="$ar ts"
11695 else
11696         case "$ranlib" in
11697         :) ranlib='';;
11698         '')
11699                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11700                 $test -f $ranlib || ranlib=''
11701                 ;;
11702         esac
11703         if $test -n "$ranlib"; then
11704                 echo "your system has '$ranlib'; we'll use that."
11705                 orderlib=false
11706         else
11707                 echo "your system doesn't seem to support random libraries"
11708                 echo "so we'll use lorder and tsort to order the libraries."
11709                 orderlib=true
11710                 ranlib=":"
11711         fi
11712 fi
11713 $rm -f foo* bar* 
11714
11715 : check for type of arguments to select. 
11716 case "$selecttype" in
11717 '') case "$d_select" in
11718         $define)
11719                 $cat <<EOM
11720 Checking to see what type of arguments are accepted by select().
11721 EOM
11722                 hdrs="$define sys/types.h
11723                         $i_systime sys/time.h 
11724                         $i_sysselct sys/select.h
11725                         $d_socket sys/socket.h"
11726                 : The first arg can be int, unsigned, or size_t
11727                 : The last arg may or may not be 'const'
11728                 val=''
11729                 : void pointer has been seen but using that
11730                 : breaks the selectminbits test
11731                 for xxx in 'fd_set *' 'int *'; do
11732                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11733                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11734                                         case "$val" in
11735                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11736                                                 if ./protochk "$try" $hdrs; then
11737                                                         echo "Your system accepts $xxx."
11738                                                         val="$xxx"
11739                                                 fi
11740                                                 ;;
11741                                         esac
11742                                 done
11743                         done
11744                 done
11745                 case "$val" in
11746                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11747                         case "$d_fd_set" in
11748                                 $define) dflt="fd_set *" ;;
11749                                 *)              dflt="int *" ;;
11750                         esac
11751                         . ./myread
11752                         val=$ans
11753                         ;;
11754                 esac
11755                 selecttype="$val"
11756                 ;;
11757         *)      : no select, so pick a harmless default
11758                 selecttype='int *'
11759                 ;;
11760         esac
11761         ;;
11762 esac
11763
11764 : check for the select 'width'
11765 case "$selectminbits" in
11766 '') case "$d_select" in
11767         $define)
11768                 $cat <<EOM
11769
11770 Checking to see on how many bits at a time your select() operates...
11771 EOM
11772                 $cat >try.c <<EOCP
11773 #include <sys/types.h>
11774 #$i_time I_TIME
11775 #$i_systime I_SYS_TIME
11776 #$i_systimek I_SYS_TIME_KERNEL
11777 #ifdef I_TIME
11778 #   include <time.h>
11779 #endif
11780 #ifdef I_SYS_TIME
11781 #   ifdef I_SYS_TIME_KERNEL
11782 #       define KERNEL
11783 #   endif
11784 #   include <sys/time.h>
11785 #   ifdef I_SYS_TIME_KERNEL
11786 #       undef KERNEL
11787 #   endif
11788 #endif
11789 #$i_sysselct I_SYS_SELECT
11790 #ifdef I_SYS_SELECT
11791 #include <sys/select.h>
11792 #endif
11793 #$d_socket HAS_SOCKET
11794 #ifdef HAS_SOCKET
11795 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11796 #endif
11797 #include <stdio.h>
11798 $selecttype b;
11799 #define S sizeof(*(b))
11800 #define MINBITS 64
11801 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11802 #define NBITS  (NBYTES * 8)
11803 int main() {
11804     char s[NBYTES];
11805     struct timeval t;
11806     int i;
11807     FILE* fp;
11808     int fd;
11809
11810     fclose(stdin);
11811     fp = fopen("try.c", "r");
11812     if (fp == 0)
11813       exit(1);
11814     fd = fileno(fp);
11815     if (fd < 0)
11816       exit(2);
11817     b = ($selecttype)s;
11818     for (i = 0; i < NBITS; i++)
11819         FD_SET(i, b);
11820     t.tv_sec  = 0;
11821     t.tv_usec = 0;
11822     select(fd + 1, b, 0, 0, &t);
11823     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11824     printf("%d\n", i + 1);
11825     return 0;
11826 }
11827 EOCP
11828                 set try
11829                 if eval $compile_ok; then
11830                         selectminbits=`./try`
11831                         case "$selectminbits" in
11832                         '')     cat >&4 <<EOM
11833 Cannot figure out on how many bits at a time your select() operates.
11834 I'll play safe and guess it is 32 bits.
11835 EOM
11836                                 selectminbits=32
11837                                 bits="32 bits"
11838                                 ;;
11839                         1)      bits="1 bit" ;;
11840                         *)      bits="$selectminbits bits" ;;
11841                         esac
11842                         echo "Your select() operates on $bits at a time." >&4
11843                 else
11844                         rp='What is the minimum number of bits your select() operates on?'
11845                         case "$byteorder" in
11846                         1234|12345678)  dflt=32 ;;
11847                         *)              dflt=1  ;;
11848                         esac
11849                         . ./myread
11850                         val=$ans
11851                         selectminbits="$val"
11852                 fi
11853                 $rm -f try.* try
11854                 ;;
11855         *)      : no select, so pick a harmless default
11856                 selectminbits='32'
11857                 ;;
11858         esac
11859         ;;
11860 esac
11861
11862 : Trace out the files included by signal.h, then look for SIGxxx names.
11863 : Remove SIGARRAYSIZE used by HPUX.
11864 : Remove SIGSTKSIZE used by Linux.
11865 : Remove SIGSTKSZ used by Posix.
11866 : Remove SIGTYP void lines used by OS2.
11867 xxx=`echo '#include <signal.h>' |
11868         $cppstdin $cppminus $cppflags 2>/dev/null |
11869         $grep '^[       ]*#.*include' | 
11870         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11871 : Check this list of files to be sure we have parsed the cpp output ok.
11872 : This will also avoid potentially non-existent files, such 
11873 : as ../foo/bar.h
11874 xxxfiles=''
11875 for xx in $xxx /dev/null ; do
11876         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11877 done
11878 : If we have found no files, at least try signal.h
11879 case "$xxxfiles" in
11880 '')     xxxfiles=`./findhdr signal.h` ;;
11881 esac
11882 xxx=`awk '
11883 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11884         print substr($2, 4, 20)
11885 }
11886 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11887         print substr($3, 4, 20)
11888 }' $xxxfiles`
11889 : Append some common names just in case the awk scan failed.
11890 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11891 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11892 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11893 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11894 : generate a few handy files for later
11895 $cat > signal.c <<'EOCP'
11896 #include <sys/types.h>
11897 #include <signal.h>
11898 #include <stdio.h>
11899 int main() {
11900
11901 /* Strange style to avoid deeply-nested #if/#else/#endif */
11902 #ifndef NSIG
11903 #  ifdef _NSIG
11904 #    define NSIG (_NSIG)
11905 #  endif
11906 #endif
11907
11908 #ifndef NSIG
11909 #  ifdef SIGMAX
11910 #    define NSIG (SIGMAX+1)
11911 #  endif
11912 #endif
11913
11914 #ifndef NSIG
11915 #  ifdef SIG_MAX
11916 #    define NSIG (SIG_MAX+1)
11917 #  endif
11918 #endif
11919
11920 #ifndef NSIG
11921 #  ifdef MAXSIG
11922 #    define NSIG (MAXSIG+1)
11923 #  endif
11924 #endif
11925
11926 #ifndef NSIG
11927 #  ifdef MAX_SIG
11928 #    define NSIG (MAX_SIG+1)
11929 #  endif
11930 #endif
11931
11932 #ifndef NSIG
11933 #  ifdef SIGARRAYSIZE
11934 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11935 #  endif
11936 #endif
11937
11938 #ifndef NSIG
11939 #  ifdef _sys_nsig
11940 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11941 #  endif
11942 #endif
11943
11944 /* Default to some arbitrary number that's big enough to get most
11945    of the common signals.
11946 */
11947 #ifndef NSIG
11948 #    define NSIG 50
11949 #endif
11950
11951 printf("NSIG %d\n", NSIG);
11952
11953 #ifndef JUST_NSIG
11954
11955 EOCP
11956
11957 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11958 {
11959         printf "#ifdef SIG"; printf $1; printf "\n"
11960         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11961         printf $1; printf ");\n"
11962         printf "#endif\n"
11963 }
11964 END {
11965         printf "#endif /* JUST_NSIG */\n";
11966         printf "}\n";
11967 }
11968 ' >>signal.c
11969 $cat >signal.awk <<'EOP'
11970 BEGIN { ndups = 0 }
11971 $1 ~ /^NSIG$/ { nsig = $2 }
11972 ($1 !~ /^NSIG$/) && (NF == 2) {
11973     if ($2 > maxsig) { maxsig = $2 }
11974     if (sig_name[$2]) {
11975         dup_name[ndups] = $1
11976         dup_num[ndups] = $2
11977         ndups++ 
11978     }
11979     else {
11980         sig_name[$2] = $1
11981         sig_num[$2] = $2
11982     }
11983 }
11984 END { 
11985     if (nsig == 0) {
11986         nsig = maxsig + 1
11987     }
11988     printf("NSIG %d\n", nsig);
11989     for (n = 1; n < nsig; n++) {
11990         if (sig_name[n]) {
11991             printf("%s %d\n", sig_name[n], sig_num[n])
11992         }
11993         else {
11994             printf("NUM%d %d\n", n, n) 
11995         }
11996     }
11997     for (n = 0; n < ndups; n++) {
11998         printf("%s %d\n", dup_name[n], dup_num[n])
11999     }
12000 }
12001 EOP
12002 $cat >signal_cmd <<EOS
12003 $startsh
12004 if $test -s signal.lst; then
12005     echo "Using your existing signal.lst file"
12006         exit 0
12007 fi
12008 xxx="$xxx"
12009 EOS
12010 $cat >>signal_cmd <<'EOS'
12011
12012 set signal
12013 if eval $compile_ok; then
12014         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12015 else
12016         echo "(I can't seem be able to compile the whole test program)" >&4
12017         echo "(I'll try it in little pieces.)" >&4
12018         set signal -DJUST_NSIG
12019         if eval $compile_ok; then
12020                 ./signal$_exe > signal.nsg
12021                 $cat signal.nsg
12022         else
12023                 echo "I can't seem to figure out how many signals you have." >&4
12024                 echo "Guessing 50." >&4
12025                 echo 'NSIG 50' > signal.nsg
12026         fi
12027         : Now look at all the signal names, one at a time.
12028         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12029                 $cat > signal.c <<EOCP
12030 #include <sys/types.h>
12031 #include <signal.h>
12032 #include <stdio.h>
12033 int main() {
12034 printf("$xx %d\n", SIG${xx});
12035 return 0;
12036 }
12037 EOCP
12038                 set signal
12039                 if eval $compile; then
12040                         echo "SIG${xx} found."
12041                         ./signal$_exe  >> signal.ls1
12042                 else
12043                         echo "SIG${xx} NOT found."
12044                 fi
12045         done
12046         if $test -s signal.ls1; then
12047                 $cat signal.nsg signal.ls1 |
12048                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12049         fi
12050
12051 fi
12052 if $test -s signal.lst; then
12053         :
12054 else
12055         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12056         echo 'kill -l' >signal
12057         set X `csh -f <signal`
12058         $rm -f signal
12059         shift
12060         case $# in
12061         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12062         esac
12063         echo $@ | $tr ' ' $trnl | \
12064             $awk '{ printf "%s %d\n", $1, ++s; }
12065                   END { printf "NSIG %d\n", ++s }' >signal.lst
12066 fi
12067 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12068 EOS
12069 chmod a+x signal_cmd
12070 $eunicefix signal_cmd
12071
12072 : generate list of signal names
12073 echo " "
12074 case "$sig_name_init" in
12075 '') doinit=yes ;;
12076 *)  case "$sig_num_init" in
12077     ''|*,*) doinit=yes ;;
12078     esac ;;
12079 esac
12080 case "$doinit" in
12081 yes)
12082         echo "Generating a list of signal names and numbers..." >&4
12083         . ./signal_cmd
12084         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12085         sig_name=`$awk 'BEGIN { printf "ZERO " }
12086                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12087         sig_num=`$awk  'BEGIN { printf "0 " }
12088                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12089         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12090                              !/^NSIG/   { printf "\"%s\", ", $1 }
12091                              END        { printf "0\n" }' signal.lst`
12092         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12093                              !/^NSIG/   { printf "%d, ", $2}
12094                              END        { printf "0\n"}' signal.lst`
12095         ;;
12096 esac
12097 echo "The following $sig_count signals are available:"
12098 echo " "
12099 echo $sig_name | $awk \
12100 'BEGIN { linelen = 0 }
12101 {
12102         for (i = 1; i <= NF; i++) {
12103                 name = "SIG" $i " "
12104                 linelen = linelen + length(name)
12105                 if (linelen > 70) {
12106                         printf "\n"
12107                         linelen = length(name)
12108                 }
12109                 printf "%s", name
12110         }
12111         printf "\n"
12112 }'
12113 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12114
12115 : see what type is used for signed size_t
12116 set ssize_t ssizetype int stdio.h sys/types.h
12117 eval $typedef
12118 dflt="$ssizetype"
12119 $cat > ssize.c <<EOM
12120 #include <stdio.h>
12121 #include <sys/types.h>
12122 #define Size_t $sizetype
12123 #define SSize_t $dflt
12124 int main()
12125 {
12126         if (sizeof(Size_t) == sizeof(SSize_t))
12127                 printf("$dflt\n");
12128         else if (sizeof(Size_t) == sizeof(int))
12129                 printf("int\n");
12130         else 
12131                 printf("long\n");
12132         exit(0);
12133 }
12134 EOM
12135 echo " "
12136 set ssize
12137 if eval $compile_ok && ./ssize > /dev/null; then
12138         ssizetype=`./ssize`
12139         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12140 else
12141         $cat >&4 <<EOM
12142 Help! I can't compile and run the ssize_t test program: please enlighten me!
12143 (This is probably a misconfiguration in your system or libraries, and
12144 you really ought to fix it.  Still, I'll try anyway.)
12145
12146 I need a type that is the same size as $sizetype, but is guaranteed to
12147 be signed.  Common values are ssize_t, int and long.
12148
12149 EOM
12150         rp="What signed type is the same size as $sizetype?"
12151         . ./myread
12152         ssizetype="$ans"
12153 fi
12154 $rm -f ssize ssize.*
12155
12156 : see what type of char stdio uses.
12157 echo " "
12158 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12159         echo "Your stdio uses unsigned chars." >&4
12160         stdchar="unsigned char"
12161 else
12162         echo "Your stdio uses signed chars." >&4
12163         stdchar="char"
12164 fi
12165
12166 : see if time exists
12167 echo " "
12168 if test "X$d_time" = X -o X"$timetype" = X; then
12169     if set time val -f d_time; eval $csym; $val; then
12170                 echo 'time() found.' >&4
12171                 val="$define"
12172                 rp="What is the type returned by time() on this system?"
12173                 set time_t timetype long stdio.h sys/types.h
12174                 eval $typedef_ask
12175     else
12176                 echo 'time() not found, hope that will do.' >&4
12177                 val="$undef"
12178                 timetype='int';
12179     fi
12180     set d_time
12181     eval $setvar
12182 fi
12183
12184 : see what type uids are declared as in the kernel
12185 echo " "
12186 echo "Looking for the type for user ids returned by getuid()."
12187 set uid_t uidtype xxx stdio.h sys/types.h
12188 eval $typedef
12189 case "$uidtype" in
12190 xxx)
12191         xxx=`./findhdr sys/user.h`
12192         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12193         case $1 in
12194         unsigned) dflt="$1 $2" ;;
12195         *) dflt="$1" ;;
12196         esac
12197         ;;
12198 *) dflt="$uidtype";;
12199 esac
12200 case "$uidtype" in
12201 uid_t)  echo "uid_t found." ;;
12202 *)      rp="What is the type for user ids returned by getuid()?"
12203         . ./myread
12204         uidtype="$ans"
12205         ;;
12206 esac
12207
12208 : see if dbm.h is available
12209 : see if dbmclose exists
12210 set dbmclose d_dbmclose
12211 eval $inlibc
12212
12213 case "$d_dbmclose" in
12214 $define)
12215         set dbm.h i_dbm
12216         eval $inhdr
12217         case "$i_dbm" in
12218         $define)
12219                 val="$undef"
12220                 set i_rpcsvcdbm
12221                 eval $setvar
12222                 ;;
12223         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12224                 eval $inhdr
12225                 ;;
12226         esac
12227         ;;
12228 *)      echo "We won't be including <dbm.h>"
12229         val="$undef"
12230         set i_dbm
12231         eval $setvar
12232         val="$undef"
12233         set i_rpcsvcdbm
12234         eval $setvar
12235         ;;
12236 esac
12237
12238 : see if this is a sys/file.h system
12239 val=''
12240 set sys/file.h val
12241 eval $inhdr
12242
12243 : do we need to include sys/file.h ?
12244 case "$val" in
12245 "$define")
12246         echo " "
12247         if $h_sysfile; then
12248                 val="$define"
12249                 echo "We'll be including <sys/file.h>." >&4
12250         else
12251                 val="$undef"
12252                 echo "We won't be including <sys/file.h>." >&4
12253         fi
12254         ;;
12255 *)
12256         h_sysfile=false
12257         ;;
12258 esac
12259 set i_sysfile
12260 eval $setvar
12261
12262 : see if fcntl.h is there
12263 val=''
12264 set fcntl.h val
12265 eval $inhdr
12266
12267 : see if we can include fcntl.h
12268 case "$val" in
12269 "$define")
12270         echo " "
12271         if $h_fcntl; then
12272                 val="$define"
12273                 echo "We'll be including <fcntl.h>." >&4
12274         else
12275                 val="$undef"
12276                 if $h_sysfile; then
12277         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12278                 else
12279                         echo "We won't be including <fcntl.h>." >&4
12280                 fi
12281         fi
12282         ;;
12283 *)
12284         h_fcntl=false
12285         val="$undef"
12286         ;;
12287 esac
12288 set i_fcntl
12289 eval $setvar
12290
12291 : see if locale.h is available
12292 set locale.h i_locale
12293 eval $inhdr
12294
12295 : see if mach cthreads are available
12296 if test "X$usethreads" = "X$define"; then
12297         set mach/cthreads.h i_machcthr
12298         eval $inhdr
12299 else
12300         i_machcthr="$undef"
12301 fi
12302
12303
12304
12305 : see if this is a math.h system
12306 set math.h i_math
12307 eval $inhdr
12308
12309 : see if this is a mntent.h system
12310 set mntent.h i_mntent
12311 eval $inhdr
12312
12313 : see if ndbm.h is available
12314 set ndbm.h t_ndbm
12315 eval $inhdr
12316 case "$t_ndbm" in
12317 $define)
12318         : see if dbm_open exists
12319         set dbm_open d_dbm_open
12320         eval $inlibc
12321         case "$d_dbm_open" in
12322         $undef)
12323                 t_ndbm="$undef"
12324                 echo "We won't be including <ndbm.h>"
12325                 ;;
12326         esac
12327         ;;
12328 esac
12329 val="$t_ndbm"
12330 set i_ndbm
12331 eval $setvar
12332
12333 : see if net/errno.h is available
12334 val=''
12335 set net/errno.h val
12336 eval $inhdr
12337
12338 : Unfortunately, it causes problems on some systems.  Arrgh.
12339 case "$val" in
12340 $define)
12341         cat > try.c <<'EOM'
12342 #include <stdio.h>
12343 #include <errno.h>
12344 #include <net/errno.h>
12345 int func()
12346 {
12347         return ENOTSOCK;
12348 }
12349 EOM
12350         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12351                 echo "We'll be including <net/errno.h>." >&4
12352         else
12353                 echo "We won't be including <net/errno.h>." >&4
12354                 val="$undef"
12355         fi
12356         $rm -f try.* try
12357         ;;
12358 esac
12359 set i_neterrno
12360 eval $setvar
12361
12362 : see if netinet/tcp.h is available
12363 set netinet/tcp.h i_netinettcp
12364 eval $inhdr
12365
12366 : see if this is a poll.h system
12367 set poll.h i_poll
12368 eval $inhdr
12369
12370 : get C preprocessor symbols handy
12371 echo " "
12372 $echo $n "Hmm... $c"
12373 echo $al | $tr ' ' $trnl >Cppsym.know
12374 $cat <<EOSS >Cppsym
12375 $startsh
12376 case "\$1" in
12377 -l) list=true
12378         shift
12379         ;;
12380 esac
12381 unknown=''
12382 case "\$list\$#" in
12383 1|2)
12384         for sym do
12385                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12386                         exit 0
12387                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12388                         :
12389                 else
12390                         unknown="\$unknown \$sym"
12391                 fi
12392         done
12393         set X \$unknown
12394         shift
12395         ;;
12396 esac
12397 case \$# in
12398 0) exit 1;;
12399 esac
12400 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12401 #ifdef \1\\
12402 exit 0; _ _ _ _\1\\      \1\\
12403 #endif\\
12404 /' >Cppsym\$\$
12405 echo "exit 1; _ _ _" >>Cppsym\$\$
12406 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12407 case "\$list" in
12408 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12409 *)
12410         sh Cppsym2\$\$
12411         status=\$?
12412         ;;
12413 esac
12414 $rm -f Cppsym\$\$ Cppsym2\$\$
12415 exit \$status
12416 EOSS
12417 chmod +x Cppsym
12418 $eunicefix Cppsym
12419 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12420
12421 : now check the C compiler for additional symbols
12422 postprocess_cc_v=''
12423 case "$osname" in
12424 aix) postprocess_cc_v="|$tr , ' '" ;;
12425 esac
12426 $cat >ccsym <<EOS
12427 $startsh
12428 $cat >tmp.c <<EOF
12429 extern int foo;
12430 EOF
12431 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12432 do
12433         case "\$i" in
12434         -D*) echo "\$i" | $sed 's/^-D//';;
12435         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12436         esac
12437 done
12438 $rm -f try.c
12439 EOS
12440 postprocess_cc_v=''
12441 chmod +x ccsym
12442 $eunicefix ccsym
12443 ./ccsym > ccsym1.raw
12444 if $test -s ccsym1.raw; then
12445        $sort ccsym1.raw | $uniq >ccsym.raw
12446 else
12447        mv ccsym1.raw ccsym.raw
12448 fi
12449
12450 $awk '/\=/ { print $0; next }
12451         { print $0"=1" }' ccsym.raw >ccsym.list
12452 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12453 $comm -13 ccsym.true ccsym.list >ccsym.own
12454 $comm -12 ccsym.true ccsym.list >ccsym.com
12455 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12456 also=''
12457 if $test -z ccsym.raw; then
12458         echo "Your C compiler doesn't seem to define any symbols!" >&4
12459         echo " "
12460         echo "However, your C preprocessor defines the following symbols:"
12461         $cat Cppsym.true
12462         ccsymbols=''
12463         cppsymbols=`$cat Cppsym.true`
12464         cppsymbols=`echo $cppsymbols`
12465         cppccsymbols="$cppsymbols"
12466 else
12467         if $test -s ccsym.com; then
12468                 echo "Your C compiler and pre-processor define these symbols:"
12469                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12470                 also='also '
12471                 symbols='ones'
12472                 cppccsymbols=`$cat ccsym.com`
12473                 cppccsymbols=`echo $cppccsymbols`
12474                 $test "$silent" || sleep 1
12475         fi
12476         if $test -s ccsym.cpp; then
12477                 $test "$also" && echo " "
12478                 echo "Your C pre-processor ${also}defines the following symbols:"
12479                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12480                 also='further '
12481                 cppsymbols=`$cat ccsym.cpp`
12482                 cppsymbols=`echo $cppsymbols`
12483                 $test "$silent" || sleep 1
12484         fi
12485         if $test -s ccsym.own; then
12486                 $test "$also" && echo " "
12487                 echo "Your C compiler ${also}defines the following cpp symbols:"
12488                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12489                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12490                 ccsymbols=`$cat ccsym.own`
12491                 ccsymbols=`echo $ccsymbols`
12492                 $test "$silent" || sleep 1
12493         fi
12494 fi
12495 $rm -f ccsym*
12496
12497 : see if this is a termio system
12498 val="$undef"
12499 val2="$undef"
12500 val3="$undef"
12501 if $test `./findhdr termios.h`; then
12502         set tcsetattr i_termios
12503         eval $inlibc
12504         val3="$i_termios"
12505 fi
12506 echo " "
12507 case "$val3" in
12508 "$define") echo "You have POSIX termios.h... good!" >&4;;
12509 *) if ./Cppsym pyr; then
12510                 case "`/bin/universe`" in
12511                 ucb) if $test `./findhdr sgtty.h`; then
12512                                 val2="$define"
12513                                 echo "<sgtty.h> found." >&4
12514                         else
12515                                 echo "System is pyramid with BSD universe."
12516                                 echo "<sgtty.h> not found--you could have problems." >&4
12517                         fi;;
12518                 *) if $test `./findhdr termio.h`; then
12519                                 val="$define"
12520                                 echo "<termio.h> found." >&4
12521                         else
12522                                 echo "System is pyramid with USG universe."
12523                                 echo "<termio.h> not found--you could have problems." >&4
12524                         fi;;
12525                 esac
12526         elif ./usg; then
12527                 if $test `./findhdr termio.h`; then
12528                         echo "<termio.h> found." >&4
12529                         val="$define"
12530                 elif $test `./findhdr sgtty.h`; then
12531                         echo "<sgtty.h> found." >&4
12532                         val2="$define"
12533                 else
12534 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12535                 fi
12536         else
12537                 if $test `./findhdr sgtty.h`; then
12538                         echo "<sgtty.h> found." >&4
12539                         val2="$define"
12540                 elif $test `./findhdr termio.h`; then
12541                         echo "<termio.h> found." >&4
12542                         val="$define"
12543                 else
12544 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12545                 fi
12546         fi;;
12547 esac
12548 set i_termio; eval $setvar
12549 val=$val2; set i_sgtty; eval $setvar
12550 val=$val3; set i_termios; eval $setvar
12551
12552 : see if this is a shadow.h system
12553 set shadow.h i_shadow
12554 eval $inhdr
12555
12556 : see if this is a socks.h system
12557 set socks.h i_socks
12558 eval $inhdr
12559
12560 : see if stdarg is available
12561 echo " "
12562 if $test `./findhdr stdarg.h`; then
12563         echo "<stdarg.h> found." >&4
12564         valstd="$define"
12565 else
12566         echo "<stdarg.h> NOT found." >&4
12567         valstd="$undef"
12568 fi
12569
12570 : see if varags is available
12571 echo " "
12572 if $test `./findhdr varargs.h`; then
12573         echo "<varargs.h> found." >&4
12574 else
12575         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12576 fi
12577
12578 : set up the varargs testing programs
12579 $cat > varargs.c <<EOP
12580 #ifdef I_STDARG
12581 #include <stdarg.h>
12582 #endif
12583 #ifdef I_VARARGS
12584 #include <varargs.h>
12585 #endif
12586
12587 #ifdef I_STDARG
12588 int f(char *p, ...)
12589 #else
12590 int f(va_alist)
12591 va_dcl
12592 #endif
12593 {
12594         va_list ap;
12595 #ifndef I_STDARG
12596         char *p;
12597 #endif
12598 #ifdef I_STDARG
12599         va_start(ap,p);
12600 #else
12601         va_start(ap);
12602         p = va_arg(ap, char *);
12603 #endif
12604         va_end(ap);
12605 }
12606 EOP
12607 $cat > varargs <<EOP
12608 $startsh
12609 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12610         echo "true"
12611 else
12612         echo "false"
12613 fi
12614 $rm -f varargs$_o
12615 EOP
12616 chmod +x varargs
12617
12618 : now check which varargs header should be included
12619 echo " "
12620 i_varhdr=''
12621 case "$valstd" in
12622 "$define")
12623         if `./varargs I_STDARG`; then
12624                 val='stdarg.h'
12625         elif `./varargs I_VARARGS`; then
12626                 val='varargs.h'
12627         fi
12628         ;;
12629 *)
12630         if `./varargs I_VARARGS`; then
12631                 val='varargs.h'
12632         fi
12633         ;;
12634 esac
12635 case "$val" in
12636 '')
12637 echo "I could not find the definition for va_dcl... You have problems..." >&4
12638         val="$undef"; set i_stdarg; eval $setvar
12639         val="$undef"; set i_varargs; eval $setvar
12640         ;;
12641 *) 
12642         set i_varhdr
12643         eval $setvar
12644         case "$i_varhdr" in
12645         stdarg.h)
12646                 val="$define"; set i_stdarg; eval $setvar
12647                 val="$undef"; set i_varargs; eval $setvar
12648                 ;;
12649         varargs.h)
12650                 val="$undef"; set i_stdarg; eval $setvar
12651                 val="$define"; set i_varargs; eval $setvar
12652                 ;;
12653         esac
12654         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12655 esac
12656 $rm -f varargs*
12657
12658 : see if stddef is available
12659 set stddef.h i_stddef
12660 eval $inhdr
12661
12662 : see if sys/access.h is available
12663 set sys/access.h i_sysaccess
12664 eval $inhdr
12665
12666 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12667 set sys/filio.h i_sysfilio
12668 eval $inhdr
12669 echo " "
12670 if $test `./findhdr sys/ioctl.h`; then
12671         val="$define"
12672         echo '<sys/ioctl.h> found.' >&4
12673 else
12674         val="$undef"
12675         if $test $i_sysfilio = "$define"; then
12676             echo '<sys/ioctl.h> NOT found.' >&4
12677         else
12678                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12679                 $test $i_termio = "$define" && xxx="termio.h"
12680                 $test $i_termios = "$define" && xxx="termios.h"
12681 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12682         fi
12683 fi
12684 set i_sysioctl
12685 eval $setvar
12686
12687 : see if sys/resource.h has to be included
12688 set sys/resource.h i_sysresrc
12689 eval $inhdr
12690
12691 : see if sys/security.h is available
12692 set sys/security.h i_syssecrt
12693 eval $inhdr
12694
12695 : see if this is a sys/statvfs.h system
12696 set sys/statvfs.h i_sysstatvfs
12697 eval $inhdr
12698
12699 : see if this is a sys/un.h system
12700 set sys/un.h i_sysun
12701 eval $inhdr
12702
12703 : see if this is a syswait system
12704 set sys/wait.h i_syswait
12705 eval $inhdr
12706
12707 : see if this is an utime system
12708 set utime.h i_utime
12709 eval $inhdr
12710
12711 : see if this is a values.h system
12712 set values.h i_values
12713 eval $inhdr
12714
12715 : see if this is a vfork system
12716 case "$d_vfork" in
12717 "$define")
12718         set vfork.h i_vfork
12719         eval $inhdr
12720         ;;
12721 *)
12722         i_vfork="$undef"
12723         ;;
12724 esac
12725
12726 : see if gdbm.h is available
12727 set gdbm.h t_gdbm
12728 eval $inhdr
12729 case "$t_gdbm" in
12730 $define)
12731         : see if gdbm_open exists
12732         set gdbm_open d_gdbm_open
12733         eval $inlibc
12734         case "$d_gdbm_open" in
12735         $undef)
12736                 t_gdbm="$undef"
12737                 echo "We won't be including <gdbm.h>"
12738                 ;;
12739         esac
12740         ;;
12741 esac
12742 val="$t_gdbm"
12743 set i_gdbm
12744 eval $setvar
12745
12746 echo " "
12747 echo "Looking for extensions..." >&4
12748 : If we are using the old config.sh, known_extensions may contain
12749 : old or inaccurate or duplicate values.
12750 known_extensions=''
12751 nonxs_extensions=''
12752 : We do not use find because it might not be available.
12753 : We do not just use MANIFEST because the user may have dropped
12754 : some additional extensions into the source tree and expect them
12755 : to be built.
12756
12757 : Function to recursively find available extensions, ignoring DynaLoader
12758 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12759 find_extensions='
12760     for xxx in *; do
12761        case "$xxx" in
12762            DynaLoader|dynaload) ;;
12763            *)
12764            if $test -f $xxx/$xxx.xs; then
12765                known_extensions="$known_extensions $1$xxx";
12766            elif $test -f $xxx/Makefile.PL; then
12767                nonxs_extensions="$nonxs_extensions $1$xxx";
12768            else
12769                if $test -d $xxx -a $# -lt 10; then
12770                    set $1$xxx/ $*;
12771                    cd $xxx;
12772                    eval $find_extensions;
12773                    cd ..;
12774                    shift;
12775                fi
12776            fi
12777            ;;
12778        esac
12779     done'
12780 tdir=`pwd`
12781 cd $rsrc/ext
12782 set X
12783 shift
12784 eval $find_extensions
12785 set X $nonxs_extensions
12786 shift
12787 nonxs_extensions="$*"
12788 set X $known_extensions
12789 shift
12790 known_extensions="$*"
12791 cd $tdir
12792
12793 : Now see which are supported on this system.
12794 avail_ext=''
12795 for xxx in $known_extensions ; do
12796         case "$xxx" in
12797         DB_File|db_file)
12798                 case "$i_db" in
12799                 $define) avail_ext="$avail_ext $xxx" ;;
12800                 esac
12801                 ;;
12802         GDBM_File|gdbm_fil)
12803                 case "$i_gdbm" in 
12804                 $define) avail_ext="$avail_ext $xxx" ;;
12805                 esac
12806                 ;;
12807         NDBM_File|ndbm_fil)
12808                 case "$i_ndbm" in
12809                 $define) avail_ext="$avail_ext $xxx" ;;
12810                 esac
12811                 ;;
12812         ODBM_File|odbm_fil) 
12813                 case "${i_dbm}${i_rpcsvcdbm}" in
12814                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12815                 esac
12816                 ;;
12817         POSIX|posix)
12818                 case "$useposix" in
12819                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12820                 esac
12821                 ;;
12822         Opcode|opcode)
12823                 case "$useopcode" in
12824                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12825                 esac
12826                 ;;
12827         Socket|socket)
12828                 case "$d_socket" in 
12829                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12830                 esac
12831                 ;;
12832         Thread|thread)
12833                 case "$usethreads" in 
12834                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12835                 esac
12836                 ;;
12837         IPC/SysV|ipc/sysv)
12838                 : XXX Do we need a useipcsysv variable here
12839                 case "${d_msg}${d_sem}${d_shm}" in 
12840                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12841                 esac
12842                 ;;
12843         *)      avail_ext="$avail_ext $xxx"
12844                 ;;
12845         esac
12846 done
12847
12848 set X $avail_ext
12849 shift
12850 avail_ext="$*"
12851
12852 : Now see which nonxs extensions are supported on this system.
12853 : For now assume all are.
12854 nonxs_ext=''
12855 for xxx in $nonxs_extensions ; do
12856         case "$xxx" in
12857         *)      nonxs_ext="$nonxs_ext $xxx"
12858                 ;;
12859         esac
12860 done
12861
12862 set X $nonxs_ext
12863 shift
12864 nonxs_ext="$*"
12865
12866 case $usedl in
12867 $define)
12868         $cat <<EOM
12869 A number of extensions are supplied with $package.  You may choose to
12870 compile these extensions for dynamic loading (the default), compile
12871 them into the $package executable (static loading), or not include
12872 them at all.  Answer "none" to include no extensions.
12873 Note that DynaLoader is always built and need not be mentioned here.
12874
12875 EOM
12876         case "$dynamic_ext" in
12877         '') dflt="$avail_ext" ;;
12878         *)      dflt="$dynamic_ext"
12879                 # Perhaps we are reusing an old out-of-date config.sh.
12880                 case "$hint" in
12881                 previous)
12882                         if test X"$dynamic_ext" != X"$avail_ext"; then
12883                                 $cat <<EOM
12884 NOTICE:  Your previous config.sh list may be incorrect. 
12885 The extensions now available to you are 
12886         ${avail_ext}
12887 but the default list from your previous config.sh is
12888         ${dynamic_ext} 
12889
12890 EOM
12891                         fi
12892                         ;;
12893                 esac
12894                 ;;
12895         esac
12896         case "$dflt" in
12897         '')     dflt=none;;
12898         esac
12899         rp="What extensions do you wish to load dynamically?"
12900         . ./myread
12901         case "$ans" in
12902         none) dynamic_ext=' ' ;;
12903         *) dynamic_ext="$ans" ;;
12904         esac
12905
12906         case "$static_ext" in
12907         '')
12908                 : Exclude those already listed in dynamic linking
12909                 dflt=''
12910                 for xxx in $avail_ext; do
12911                         case " $dynamic_ext " in
12912                         *" $xxx "*) ;;
12913                         *) dflt="$dflt $xxx" ;;
12914                         esac
12915                 done
12916                 set X $dflt
12917                 shift
12918                 dflt="$*"
12919                 ;;
12920         *)  dflt="$static_ext" 
12921                 ;;
12922         esac
12923
12924         case "$dflt" in
12925         '')     dflt=none;;
12926         esac
12927         rp="What extensions do you wish to load statically?"
12928         . ./myread
12929         case "$ans" in
12930         none) static_ext=' ' ;;
12931         *) static_ext="$ans" ;;
12932         esac
12933         ;;
12934 *)
12935         $cat <<EOM
12936 A number of extensions are supplied with $package.  Answer "none" 
12937 to include no extensions. 
12938 Note that DynaLoader is always built and need not be mentioned here.
12939
12940 EOM
12941         case "$static_ext" in
12942         '') dflt="$avail_ext" ;;
12943         *)      dflt="$static_ext"
12944                 # Perhaps we are reusing an old out-of-date config.sh.
12945                 case "$hint" in
12946                 previous)
12947                         if test X"$static_ext" != X"$avail_ext"; then
12948                                 $cat <<EOM
12949 NOTICE:  Your previous config.sh list may be incorrect. 
12950 The extensions now available to you are 
12951         ${avail_ext}
12952 but the default list from your previous config.sh is
12953         ${static_ext} 
12954
12955 EOM
12956                         fi
12957                         ;;
12958                 esac
12959                 ;;
12960         esac
12961         : Exclude those that are not xs extensions
12962         case "$dflt" in
12963         '')     dflt=none;;
12964         esac
12965         rp="What extensions do you wish to include?"
12966         . ./myread
12967         case "$ans" in
12968         none) static_ext=' ' ;;
12969         *) static_ext="$ans" ;;
12970         esac
12971         ;;
12972 esac
12973
12974 set X $dynamic_ext $static_ext $nonxs_ext
12975 shift
12976 extensions="$*"
12977
12978 : Remove build directory name from cppstdin so it can be used from
12979 : either the present location or the final installed location.
12980 echo " "
12981 : Get out of the UU directory to get correct path name.
12982 cd ..
12983 case "$cppstdin" in
12984 `pwd`/cppstdin)
12985         echo "Stripping down cppstdin path name"
12986         cppstdin=cppstdin
12987         ;;
12988 esac
12989 cd UU
12990
12991 : end of configuration questions
12992 echo " "
12993 echo "End of configuration questions."
12994 echo " "
12995
12996 : back to where it started
12997 if test -d ../UU; then
12998         cd ..
12999 fi
13000
13001 : configuration may be patched via a 'config.over' file
13002 if $test -f config.over; then
13003         echo " "
13004         dflt=y
13005         rp='I see a config.over file.  Do you wish to load it?'
13006         . UU/myread
13007         case "$ans" in
13008         n*) echo "OK, I'll ignore it.";;
13009         *)      . ./config.over
13010                 echo "Configuration override changes have been loaded."
13011                 ;;
13012         esac
13013 fi
13014
13015 : in case they want portability, strip down executable paths
13016 case "$d_portable" in
13017 "$define")
13018         echo " "
13019         echo "Stripping down executable paths..." >&4
13020         for file in $loclist $trylist; do
13021                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
13022                         eval $file="\$file"
13023                 fi
13024         done
13025         ;;
13026 esac
13027
13028 : create config.sh file
13029 echo " "
13030 echo "Creating config.sh..." >&4
13031 $spitshell <<EOT >config.sh
13032 $startsh
13033 #
13034 # This file was produced by running the Configure script. It holds all the
13035 # definitions figured out by Configure. Should you modify one of these values,
13036 # do not forget to propagate your changes by running "Configure -der". You may
13037 # instead choose to run each of the .SH files by yourself, or "Configure -S".
13038 #
13039
13040 # Package name      : $package
13041 # Source directory  : $src
13042 # Configuration time: $cf_time
13043 # Configured by     : $cf_by
13044 # Target system     : $myuname
13045
13046 Author='$Author'
13047 Date='$Date'
13048 Header='$Header'
13049 Id='$Id'
13050 Locker='$Locker'
13051 Log='$Log'
13052 Mcc='$Mcc'
13053 RCSfile='$RCSfile'
13054 Revision='$Revision'
13055 Source='$Source'
13056 State='$State'
13057 _a='$_a'
13058 _exe='$_exe'
13059 _o='$_o'
13060 afs='$afs'
13061 alignbytes='$alignbytes'
13062 ansi2knr='$ansi2knr'
13063 aphostname='$aphostname'
13064 apiversion='$apiversion'
13065 ar='$ar'
13066 archlib='$archlib'
13067 archlibexp='$archlibexp'
13068 archname64='$archname64'
13069 archname='$archname'
13070 archobjs='$archobjs'
13071 awk='$awk'
13072 baserev='$baserev'
13073 bash='$bash'
13074 bin='$bin'
13075 binexp='$binexp'
13076 bison='$bison'
13077 byacc='$byacc'
13078 byteorder='$byteorder'
13079 c='$c'
13080 castflags='$castflags'
13081 cat='$cat'
13082 cc='$cc'
13083 cccdlflags='$cccdlflags'
13084 ccdlflags='$ccdlflags'
13085 ccflags='$ccflags'
13086 ccsymbols='$ccsymbols'
13087 cf_by='$cf_by'
13088 cf_email='$cf_email'
13089 cf_time='$cf_time'
13090 chgrp='$chgrp'
13091 chmod='$chmod'
13092 chown='$chown'
13093 clocktype='$clocktype'
13094 comm='$comm'
13095 compress='$compress'
13096 contains='$contains'
13097 cp='$cp'
13098 cpio='$cpio'
13099 cpp='$cpp'
13100 cpp_stuff='$cpp_stuff'
13101 cppccsymbols='$cppccsymbols'
13102 cppflags='$cppflags'
13103 cpplast='$cpplast'
13104 cppminus='$cppminus'
13105 cpprun='$cpprun'
13106 cppstdin='$cppstdin'
13107 cppsymbols='$cppsymbols'
13108 crosscompile='$crosscompile'
13109 cryptlib='$cryptlib'
13110 csh='$csh'
13111 d_Gconvert='$d_Gconvert'
13112 d_access='$d_access'
13113 d_accessx='$d_accessx'
13114 d_alarm='$d_alarm'
13115 d_archlib='$d_archlib'
13116 d_attribut='$d_attribut'
13117 d_bcmp='$d_bcmp'
13118 d_bcopy='$d_bcopy'
13119 d_bsd='$d_bsd'
13120 d_bsdgetpgrp='$d_bsdgetpgrp'
13121 d_bsdsetpgrp='$d_bsdsetpgrp'
13122 d_bzero='$d_bzero'
13123 d_casti32='$d_casti32'
13124 d_castneg='$d_castneg'
13125 d_charvspr='$d_charvspr'
13126 d_chown='$d_chown'
13127 d_chroot='$d_chroot'
13128 d_chsize='$d_chsize'
13129 d_closedir='$d_closedir'
13130 d_cmsghdr_s='$d_cmsghdr_s'
13131 d_const='$d_const'
13132 d_crypt='$d_crypt'
13133 d_csh='$d_csh'
13134 d_cuserid='$d_cuserid'
13135 d_dbl_dig='$d_dbl_dig'
13136 d_dbmclose64='$d_dbmclose64'
13137 d_dbminit64='$d_dbminit64'
13138 d_delete64='$d_delete64'
13139 d_difftime='$d_difftime'
13140 d_dirent64_s='$d_dirent64_s'
13141 d_dirnamlen='$d_dirnamlen'
13142 d_dlerror='$d_dlerror'
13143 d_dlopen='$d_dlopen'
13144 d_dlsymun='$d_dlsymun'
13145 d_dosuid='$d_dosuid'
13146 d_drand48proto='$d_drand48proto'
13147 d_dup2='$d_dup2'
13148 d_eaccess='$d_eaccess'
13149 d_endgrent='$d_endgrent'
13150 d_endhent='$d_endhent'
13151 d_endnent='$d_endnent'
13152 d_endpent='$d_endpent'
13153 d_endpwent='$d_endpwent'
13154 d_endsent='$d_endsent'
13155 d_endspent='$d_endspent'
13156 d_eofnblk='$d_eofnblk'
13157 d_eunice='$d_eunice'
13158 d_fchmod='$d_fchmod'
13159 d_fchown='$d_fchown'
13160 d_fcntl='$d_fcntl'
13161 d_fd_macros='$d_fd_macros'
13162 d_fd_set='$d_fd_set'
13163 d_fds_bits='$d_fds_bits'
13164 d_fetch64='$d_fetch64'
13165 d_fgetpos64='$d_fgetpos64'
13166 d_fgetpos='$d_fgetpos'
13167 d_firstkey64='$d_firstkey64'
13168 d_flexfnam='$d_flexfnam'
13169 d_flock64_s='$d_flock64_s'
13170 d_flock='$d_flock'
13171 d_fopen64='$d_fopen64'
13172 d_fork='$d_fork'
13173 d_fpathconf='$d_fpathconf'
13174 d_freopen64='$d_freopen64'
13175 d_fseek64='$d_fseek64'
13176 d_fseeko64='$d_fseeko64'
13177 d_fseeko='$d_fseeko'
13178 d_fsetpos64='$d_fsetpos64'
13179 d_fsetpos='$d_fsetpos'
13180 d_fstat64='$d_fstat64'
13181 d_fstatfs='$d_fstatfs'
13182 d_fstatvfs='$d_fstatvfs'
13183 d_ftell64='$d_ftell64'
13184 d_ftello64='$d_ftello64'
13185 d_ftello='$d_ftello'
13186 d_ftime='$d_ftime'
13187 d_ftruncate64='$d_ftruncate64'
13188 d_getgrent='$d_getgrent'
13189 d_getgrps='$d_getgrps'
13190 d_gethbyaddr='$d_gethbyaddr'
13191 d_gethbyname='$d_gethbyname'
13192 d_gethent='$d_gethent'
13193 d_gethname='$d_gethname'
13194 d_gethostprotos='$d_gethostprotos'
13195 d_getlogin='$d_getlogin'
13196 d_getmntent='$d_getmntent'
13197 d_getnbyaddr='$d_getnbyaddr'
13198 d_getnbyname='$d_getnbyname'
13199 d_getnent='$d_getnent'
13200 d_getnetprotos='$d_getnetprotos'
13201 d_getpbyname='$d_getpbyname'
13202 d_getpbynumber='$d_getpbynumber'
13203 d_getpent='$d_getpent'
13204 d_getpgid='$d_getpgid'
13205 d_getpgrp2='$d_getpgrp2'
13206 d_getpgrp='$d_getpgrp'
13207 d_getppid='$d_getppid'
13208 d_getprior='$d_getprior'
13209 d_getprotoprotos='$d_getprotoprotos'
13210 d_getpwent='$d_getpwent'
13211 d_getsbyname='$d_getsbyname'
13212 d_getsbyport='$d_getsbyport'
13213 d_getsent='$d_getsent'
13214 d_getservprotos='$d_getservprotos'
13215 d_getspent='$d_getspent'
13216 d_getspnam='$d_getspnam'
13217 d_gettimeod='$d_gettimeod'
13218 d_gnulibc='$d_gnulibc'
13219 d_grpasswd='$d_grpasswd'
13220 d_hasmntopt='$d_hasmntopt'
13221 d_htonl='$d_htonl'
13222 d_index='$d_index'
13223 d_inetaton='$d_inetaton'
13224 d_ino64_t='$d_ino64_t'
13225 d_int64t='$d_int64t'
13226 d_iovec_s='$d_iovec_s'
13227 d_isascii='$d_isascii'
13228 d_killpg='$d_killpg'
13229 d_lchown='$d_lchown'
13230 d_link='$d_link'
13231 d_llseek='$d_llseek'
13232 d_locconv='$d_locconv'
13233 d_lockf64='$d_lockf64'
13234 d_lockf='$d_lockf'
13235 d_longdbl='$d_longdbl'
13236 d_longlong='$d_longlong'
13237 d_lseek64='$d_lseek64'
13238 d_lstat64='$d_lstat64'
13239 d_lstat='$d_lstat'
13240 d_madvise='$d_madvise'
13241 d_mblen='$d_mblen'
13242 d_mbstowcs='$d_mbstowcs'
13243 d_mbtowc='$d_mbtowc'
13244 d_memchr='$d_memchr'
13245 d_memcmp='$d_memcmp'
13246 d_memcpy='$d_memcpy'
13247 d_memmove='$d_memmove'
13248 d_memset='$d_memset'
13249 d_mkdir='$d_mkdir'
13250 d_mkfifo='$d_mkfifo'
13251 d_mktime='$d_mktime'
13252 d_mmap='$d_mmap'
13253 d_mprotect='$d_mprotect'
13254 d_msg='$d_msg'
13255 d_msg_ctrunc='$d_msg_ctrunc'
13256 d_msg_dontroute='$d_msg_dontroute'
13257 d_msg_oob='$d_msg_oob'
13258 d_msg_peek='$d_msg_peek'
13259 d_msg_proxy='$d_msg_proxy'
13260 d_msgctl='$d_msgctl'
13261 d_msgget='$d_msgget'
13262 d_msghdr_s='$d_msghdr_s'
13263 d_msgrcv='$d_msgrcv'
13264 d_msgsnd='$d_msgsnd'
13265 d_msync='$d_msync'
13266 d_munmap='$d_munmap'
13267 d_mymalloc='$d_mymalloc'
13268 d_nextkey64='$d_nextkey64'
13269 d_nice='$d_nice'
13270 d_off64_t='$d_off64_t'
13271 d_offset_t='$d_offset_t'
13272 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13273 d_oldpthreads='$d_oldpthreads'
13274 d_oldsock='$d_oldsock'
13275 d_open3='$d_open3'
13276 d_open64='$d_open64'
13277 d_opendir64='$d_opendir64'
13278 d_pathconf='$d_pathconf'
13279 d_pause='$d_pause'
13280 d_phostname='$d_phostname'
13281 d_pipe='$d_pipe'
13282 d_poll='$d_poll'
13283 d_portable='$d_portable'
13284 d_pthread_yield='$d_pthread_yield'
13285 d_pwage='$d_pwage'
13286 d_pwchange='$d_pwchange'
13287 d_pwclass='$d_pwclass'
13288 d_pwcomment='$d_pwcomment'
13289 d_pwexpire='$d_pwexpire'
13290 d_pwgecos='$d_pwgecos'
13291 d_pwpasswd='$d_pwpasswd'
13292 d_pwquota='$d_pwquota'
13293 d_readdir64='$d_readdir64'
13294 d_readdir='$d_readdir'
13295 d_readlink='$d_readlink'
13296 d_readv='$d_readv'
13297 d_recvmsg='$d_recvmsg'
13298 d_rename='$d_rename'
13299 d_rewinddir='$d_rewinddir'
13300 d_rmdir='$d_rmdir'
13301 d_safebcpy='$d_safebcpy'
13302 d_safemcpy='$d_safemcpy'
13303 d_sanemcmp='$d_sanemcmp'
13304 d_sched_yield='$d_sched_yield'
13305 d_scm_rights='$d_scm_rights'
13306 d_seekdir64='$d_seekdir64'
13307 d_seekdir='$d_seekdir'
13308 d_select='$d_select'
13309 d_sem='$d_sem'
13310 d_semctl='$d_semctl'
13311 d_semctl_semid_ds='$d_semctl_semid_ds'
13312 d_semctl_semun='$d_semctl_semun'
13313 d_semget='$d_semget'
13314 d_semop='$d_semop'
13315 d_sendmsg='$d_sendmsg'
13316 d_setegid='$d_setegid'
13317 d_seteuid='$d_seteuid'
13318 d_setgrent='$d_setgrent'
13319 d_setgrps='$d_setgrps'
13320 d_sethent='$d_sethent'
13321 d_setlinebuf='$d_setlinebuf'
13322 d_setlocale='$d_setlocale'
13323 d_setnent='$d_setnent'
13324 d_setpent='$d_setpent'
13325 d_setpgid='$d_setpgid'
13326 d_setpgrp2='$d_setpgrp2'
13327 d_setpgrp='$d_setpgrp'
13328 d_setprior='$d_setprior'
13329 d_setpwent='$d_setpwent'
13330 d_setregid='$d_setregid'
13331 d_setresgid='$d_setresgid'
13332 d_setresuid='$d_setresuid'
13333 d_setreuid='$d_setreuid'
13334 d_setrgid='$d_setrgid'
13335 d_setruid='$d_setruid'
13336 d_setsent='$d_setsent'
13337 d_setsid='$d_setsid'
13338 d_setspent='$d_setspent'
13339 d_setvbuf='$d_setvbuf'
13340 d_sfio='$d_sfio'
13341 d_shm='$d_shm'
13342 d_shmat='$d_shmat'
13343 d_shmatprototype='$d_shmatprototype'
13344 d_shmctl='$d_shmctl'
13345 d_shmdt='$d_shmdt'
13346 d_shmget='$d_shmget'
13347 d_sigaction='$d_sigaction'
13348 d_sigsetjmp='$d_sigsetjmp'
13349 d_socket='$d_socket'
13350 d_sockpair='$d_sockpair'
13351 d_stat64='$d_stat64'
13352 d_statblks='$d_statblks'
13353 d_statfs='$d_statfs'
13354 d_statfsflags='$d_statfsflags'
13355 d_statvfs='$d_statvfs'
13356 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13357 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13358 d_stdio_stream_array='$d_stdio_stream_array'
13359 d_stdiobase='$d_stdiobase'
13360 d_stdstdio='$d_stdstdio'
13361 d_store64='$d_store64'
13362 d_strchr='$d_strchr'
13363 d_strcoll='$d_strcoll'
13364 d_strctcpy='$d_strctcpy'
13365 d_strerrm='$d_strerrm'
13366 d_strerror='$d_strerror'
13367 d_strtod='$d_strtod'
13368 d_strtol='$d_strtol'
13369 d_strtoul='$d_strtoul'
13370 d_strxfrm='$d_strxfrm'
13371 d_suidsafe='$d_suidsafe'
13372 d_symlink='$d_symlink'
13373 d_syscall='$d_syscall'
13374 d_sysconf='$d_sysconf'
13375 d_sysernlst='$d_sysernlst'
13376 d_syserrlst='$d_syserrlst'
13377 d_system='$d_system'
13378 d_tcgetpgrp='$d_tcgetpgrp'
13379 d_tcsetpgrp='$d_tcsetpgrp'
13380 d_telldir64='$d_telldir64'
13381 d_telldir='$d_telldir'
13382 d_telldirproto='$d_telldirproto'
13383 d_time='$d_time'
13384 d_times='$d_times'
13385 d_tmpfile64='$d_tmpfile64'
13386 d_truncate64='$d_truncate64'
13387 d_truncate='$d_truncate'
13388 d_tzname='$d_tzname'
13389 d_umask='$d_umask'
13390 d_uname='$d_uname'
13391 d_union_semun='$d_union_semun'
13392 d_vendorlib='$d_vendorlib'
13393 d_vfork='$d_vfork'
13394 d_void_closedir='$d_void_closedir'
13395 d_voidsig='$d_voidsig'
13396 d_voidtty='$d_voidtty'
13397 d_volatile='$d_volatile'
13398 d_vprintf='$d_vprintf'
13399 d_wait4='$d_wait4'
13400 d_waitpid='$d_waitpid'
13401 d_wcstombs='$d_wcstombs'
13402 d_wctomb='$d_wctomb'
13403 d_writev='$d_writev'
13404 d_xenix='$d_xenix'
13405 date='$date'
13406 db_hashtype='$db_hashtype'
13407 db_prefixtype='$db_prefixtype'
13408 defvoidused='$defvoidused'
13409 direntrytype='$direntrytype'
13410 dlext='$dlext'
13411 dlsrc='$dlsrc'
13412 doublesize='$doublesize'
13413 drand01='$drand01'
13414 dynamic_ext='$dynamic_ext'
13415 eagain='$eagain'
13416 ebcdic='$ebcdic'
13417 echo='$echo'
13418 egrep='$egrep'
13419 emacs='$emacs'
13420 eunicefix='$eunicefix'
13421 exe_ext='$exe_ext'
13422 expr='$expr'
13423 extensions='$extensions'
13424 fflushNULL='$fflushNULL'
13425 fflushall='$fflushall'
13426 find='$find'
13427 firstmakefile='$firstmakefile'
13428 flex='$flex'
13429 fpostype='$fpostype'
13430 freetype='$freetype'
13431 full_ar='$full_ar'
13432 full_csh='$full_csh'
13433 full_sed='$full_sed'
13434 gccversion='$gccversion'
13435 gidtype='$gidtype'
13436 glibpth='$glibpth'
13437 grep='$grep'
13438 groupcat='$groupcat'
13439 groupstype='$groupstype'
13440 gzip='$gzip'
13441 h_fcntl='$h_fcntl'
13442 h_sysfile='$h_sysfile'
13443 hint='$hint'
13444 hostcat='$hostcat'
13445 huge='$huge'
13446 i_arpainet='$i_arpainet'
13447 i_bsdioctl='$i_bsdioctl'
13448 i_db='$i_db'
13449 i_dbm='$i_dbm'
13450 i_dirent='$i_dirent'
13451 i_dld='$i_dld'
13452 i_dlfcn='$i_dlfcn'
13453 i_fcntl='$i_fcntl'
13454 i_float='$i_float'
13455 i_gdbm='$i_gdbm'
13456 i_grp='$i_grp'
13457 i_inttypes='$i_inttypes'
13458 i_limits='$i_limits'
13459 i_locale='$i_locale'
13460 i_machcthr='$i_machcthr'
13461 i_malloc='$i_malloc'
13462 i_math='$i_math'
13463 i_memory='$i_memory'
13464 i_mntent='$i_mntent'
13465 i_ndbm='$i_ndbm'
13466 i_netdb='$i_netdb'
13467 i_neterrno='$i_neterrno'
13468 i_netinettcp='$i_netinettcp'
13469 i_niin='$i_niin'
13470 i_poll='$i_poll'
13471 i_pthread='$i_pthread'
13472 i_pwd='$i_pwd'
13473 i_rpcsvcdbm='$i_rpcsvcdbm'
13474 i_sfio='$i_sfio'
13475 i_sgtty='$i_sgtty'
13476 i_shadow='$i_shadow'
13477 i_socks='$i_socks'
13478 i_stdarg='$i_stdarg'
13479 i_stddef='$i_stddef'
13480 i_stdlib='$i_stdlib'
13481 i_string='$i_string'
13482 i_sysaccess='$i_sysaccess'
13483 i_sysdir='$i_sysdir'
13484 i_sysfile='$i_sysfile'
13485 i_sysfilio='$i_sysfilio'
13486 i_sysin='$i_sysin'
13487 i_sysioctl='$i_sysioctl'
13488 i_sysmman='$i_sysmman'
13489 i_sysmount='$i_sysmount'
13490 i_sysndir='$i_sysndir'
13491 i_sysparam='$i_sysparam'
13492 i_sysresrc='$i_sysresrc'
13493 i_syssecrt='$i_syssecrt'
13494 i_sysselct='$i_sysselct'
13495 i_syssockio='$i_syssockio'
13496 i_sysstat='$i_sysstat'
13497 i_sysstatvfs='$i_sysstatvfs'
13498 i_systime='$i_systime'
13499 i_systimek='$i_systimek'
13500 i_systimes='$i_systimes'
13501 i_systypes='$i_systypes'
13502 i_sysuio='$i_sysuio'
13503 i_sysun='$i_sysun'
13504 i_syswait='$i_syswait'
13505 i_termio='$i_termio'
13506 i_termios='$i_termios'
13507 i_time='$i_time'
13508 i_unistd='$i_unistd'
13509 i_utime='$i_utime'
13510 i_values='$i_values'
13511 i_varargs='$i_varargs'
13512 i_varhdr='$i_varhdr'
13513 i_vfork='$i_vfork'
13514 ignore_versioned_solibs='$ignore_versioned_solibs'
13515 incpath='$incpath'
13516 inews='$inews'
13517 installarchlib='$installarchlib'
13518 installbin='$installbin'
13519 installman1dir='$installman1dir'
13520 installman3dir='$installman3dir'
13521 installprefix='$installprefix'
13522 installprefixexp='$installprefixexp'
13523 installprivlib='$installprivlib'
13524 installscript='$installscript'
13525 installsitearch='$installsitearch'
13526 installsitelib='$installsitelib'
13527 installstyle='$installstyle'
13528 installusrbinperl='$installusrbinperl'
13529 installvendorlib='$installvendorlib'
13530 intsize='$intsize'
13531 known_extensions='$known_extensions'
13532 ksh='$ksh'
13533 large='$large'
13534 ld='$ld'
13535 lddlflags='$lddlflags'
13536 ldflags='$ldflags'
13537 ldlibpthname='$ldlibpthname'
13538 less='$less'
13539 lib_ext='$lib_ext'
13540 libc='$libc'
13541 libperl='$libperl'
13542 libpth='$libpth'
13543 libs='$libs'
13544 libswanted='$libswanted'
13545 line='$line'
13546 lint='$lint'
13547 lkflags='$lkflags'
13548 ln='$ln'
13549 lns='$lns'
13550 locincpth='$locincpth'
13551 loclibpth='$loclibpth'
13552 longdblsize='$longdblsize'
13553 longlongsize='$longlongsize'
13554 longsize='$longsize'
13555 lp='$lp'
13556 lpr='$lpr'
13557 ls='$ls'
13558 lseeksize='$lseeksize'
13559 lseektype='$lseektype'
13560 mail='$mail'
13561 mailx='$mailx'
13562 make='$make'
13563 make_set_make='$make_set_make'
13564 mallocobj='$mallocobj'
13565 mallocsrc='$mallocsrc'
13566 malloctype='$malloctype'
13567 man1dir='$man1dir'
13568 man1direxp='$man1direxp'
13569 man1ext='$man1ext'
13570 man3dir='$man3dir'
13571 man3direxp='$man3direxp'
13572 man3ext='$man3ext'
13573 medium='$medium'
13574 mips='$mips'
13575 mips_type='$mips_type'
13576 mkdir='$mkdir'
13577 mmaptype='$mmaptype'
13578 models='$models'
13579 modetype='$modetype'
13580 more='$more'
13581 multiarch='$multiarch'
13582 mv='$mv'
13583 myarchname='$myarchname'
13584 mydomain='$mydomain'
13585 myhostname='$myhostname'
13586 myuname='$myuname'
13587 n='$n'
13588 netdb_hlen_type='$netdb_hlen_type'
13589 netdb_host_type='$netdb_host_type'
13590 netdb_name_type='$netdb_name_type'
13591 netdb_net_type='$netdb_net_type'
13592 nm='$nm'
13593 nm_opt='$nm_opt'
13594 nm_so_opt='$nm_so_opt'
13595 nonxs_ext='$nonxs_ext'
13596 nroff='$nroff'
13597 o_nonblock='$o_nonblock'
13598 obj_ext='$obj_ext'
13599 old_pthread_create_joinable='$old_pthread_create_joinable'
13600 optimize='$optimize'
13601 orderlib='$orderlib'
13602 osname='$osname'
13603 osvers='$osvers'
13604 package='$package'
13605 pager='$pager'
13606 passcat='$passcat'
13607 patchlevel='$patchlevel'
13608 path_sep='$path_sep'
13609 perl='$perl'
13610 perladmin='$perladmin'
13611 perlpath='$perlpath'
13612 pg='$pg'
13613 phostname='$phostname'
13614 pidtype='$pidtype'
13615 plibpth='$plibpth'
13616 pmake='$pmake'
13617 pr='$pr'
13618 prefix='$prefix'
13619 prefixexp='$prefixexp'
13620 privlib='$privlib'
13621 privlibexp='$privlibexp'
13622 prototype='$prototype'
13623 ptrsize='$ptrsize'
13624 randbits='$randbits'
13625 randfunc='$randfunc'
13626 randseedtype='$randseedtype'
13627 ranlib='$ranlib'
13628 rd_nodata='$rd_nodata'
13629 rm='$rm'
13630 rmail='$rmail'
13631 runnm='$runnm'
13632 sched_yield='$sched_yield'
13633 scriptdir='$scriptdir'
13634 scriptdirexp='$scriptdirexp'
13635 sed='$sed'
13636 seedfunc='$seedfunc'
13637 selectminbits='$selectminbits'
13638 selecttype='$selecttype'
13639 sendmail='$sendmail'
13640 sh='$sh'
13641 shar='$shar'
13642 sharpbang='$sharpbang'
13643 shmattype='$shmattype'
13644 shortsize='$shortsize'
13645 shrpenv='$shrpenv'
13646 shsharp='$shsharp'
13647 sig_count='$sig_count'
13648 sig_name='$sig_name'
13649 sig_name_init='$sig_name_init'
13650 sig_num='$sig_num'
13651 sig_num_init='$sig_num_init'
13652 signal_t='$signal_t'
13653 sitearch='$sitearch'
13654 sitearchexp='$sitearchexp'
13655 sitelib='$sitelib'
13656 sitelibexp='$sitelibexp'
13657 siteprefix='$siteprefix'
13658 siteprefixexp='$siteprefixexp'
13659 sizetype='$sizetype'
13660 sleep='$sleep'
13661 smail='$smail'
13662 small='$small'
13663 so='$so'
13664 sockethdr='$sockethdr'
13665 socketlib='$socketlib'
13666 sort='$sort'
13667 spackage='$spackage'
13668 spitshell='$spitshell'
13669 split='$split'
13670 src='$src'
13671 ssizetype='$ssizetype'
13672 startperl='$startperl'
13673 startsh='$startsh'
13674 static_ext='$static_ext'
13675 stdchar='$stdchar'
13676 stdio_base='$stdio_base'
13677 stdio_bufsiz='$stdio_bufsiz'
13678 stdio_cnt='$stdio_cnt'
13679 stdio_filbuf='$stdio_filbuf'
13680 stdio_ptr='$stdio_ptr'
13681 stdio_stream_array='$stdio_stream_array'
13682 strings='$strings'
13683 submit='$submit'
13684 subversion='$subversion'
13685 sysman='$sysman'
13686 tail='$tail'
13687 tar='$tar'
13688 tbl='$tbl'
13689 tee='$tee'
13690 test='$test'
13691 timeincl='$timeincl'
13692 timetype='$timetype'
13693 touch='$touch'
13694 tr='$tr'
13695 trnl='$trnl'
13696 troff='$troff'
13697 uidtype='$uidtype'
13698 uname='$uname'
13699 uniq='$uniq'
13700 use64bits='$use64bits'
13701 usedl='$usedl'
13702 usemultiplicity='$usemultiplicity'
13703 usemymalloc='$usemymalloc'
13704 usenm='$usenm'
13705 useopcode='$useopcode'
13706 useperlio='$useperlio'
13707 useposix='$useposix'
13708 usesfio='$usesfio'
13709 useshrplib='$useshrplib'
13710 usesocks='$usesocks'
13711 usethreads='$usethreads'
13712 usevendorprefix='$usevendorprefix'
13713 usevfork='$usevfork'
13714 usrinc='$usrinc'
13715 uuname='$uuname'
13716 vendorlib='$vendorlib'
13717 vendorlibexp='$vendorlibexp'
13718 vendorprefix='$vendorprefix'
13719 vendorprefixexp='$vendorprefixexp'
13720 version='$version'
13721 vi='$vi'
13722 voidflags='$voidflags'
13723 xlibpth='$xlibpth'
13724 zcat='$zcat'
13725 zip='$zip'
13726 EOT
13727
13728 : Add in command line options if available
13729 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13730
13731 : add special variables
13732 $test -f $src/patchlevel.h && \
13733 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13734 echo "CONFIGDOTSH=true" >>config.sh
13735
13736 : propagate old symbols
13737 if $test -f UU/config.sh; then
13738         <UU/config.sh sort | uniq >UU/oldconfig.sh
13739         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13740         sort | uniq -u >UU/oldsyms
13741         set X `cat UU/oldsyms`
13742         shift
13743         case $# in
13744         0) ;;
13745         *)
13746                 cat <<EOM
13747 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13748 EOM
13749                 echo "# Variables propagated from previous config.sh file." >>config.sh
13750                 for sym in `cat UU/oldsyms`; do
13751                         echo "    Propagating $hint variable "'$'"$sym..."
13752                         eval 'tmp="$'"${sym}"'"'
13753                         echo "$tmp" | \
13754                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13755                 done
13756                 ;;
13757         esac
13758 fi
13759
13760 : Finish up by extracting the .SH files
13761 case "$alldone" in
13762 exit)
13763         $rm -rf UU
13764         echo "Done."
13765         exit 0
13766         ;;
13767 cont)
13768         ;;
13769 '')
13770         dflt=''
13771         nostick=true
13772         $cat <<EOM
13773
13774 If you'd like to make any changes to the config.sh file before I begin
13775 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13776
13777 EOM
13778         rp="Press return or use a shell escape to edit config.sh:"
13779         . UU/myread
13780         nostick=''
13781         case "$ans" in
13782         '') ;;
13783         *) : in case they cannot read
13784                 sh 1>&4 -c "$ans";;
13785         esac
13786         ;;
13787 esac
13788
13789 : if this fails, just run all the .SH files by hand
13790 . ./config.sh
13791
13792 echo " "
13793 exec 1>&4
13794 . ./UU/extract
13795
13796 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13797         dflt=y
13798         case "$silent" in
13799         true) ;;
13800         *)
13801                 $cat <<EOM
13802
13803 Now you need to generate make dependencies by running "$make depend".
13804 You might prefer to run it in background: "$make depend > makedepend.out &"
13805 It can take a while, so you might not want to run it right now.
13806
13807 EOM
13808                 ;;
13809         esac
13810         rp="Run $make depend now?"
13811         . UU/myread
13812         case "$ans" in
13813         y*)
13814                 $make depend && echo "Now you must run a $make."
13815                 ;;
13816         *)
13817                 echo "You must run '$make depend' then '$make'."
13818                 ;;
13819         esac
13820 elif test -f [Mm]akefile; then
13821         echo " "
13822         echo "Now you must run a $make."
13823 else
13824         echo "Done."
13825 fi
13826
13827 if $test -f Policy.sh; then
13828     $cat <<EOM
13829
13830 If you compile $package on a different machine or from a different object
13831 directory, copy the Policy.sh file from this object directory to the
13832 new one before you run Configure -- this will help you with most of
13833 the policy defaults.
13834
13835 EOM
13836 fi
13837 if $test -f config.msg; then
13838     echo "Hmm.  I also noted the following information while running:"
13839     echo " "
13840     $cat config.msg >&4
13841     $rm -f config.msg
13842 fi
13843 $rm -f kit*isdone ark*isdone
13844 $rm -rf UU
13845
13846 : End of Configure
13847