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