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