d527d961177652aab44742010eb7af211c6c3a80
[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}$_exe $* ${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                 $cat <<EOM  | $tee -a ../config.msg >&4
5141
5142 To build perl, you must add the current working directory to your
5143 $xxx environment variable before running make.  You can do
5144 this with
5145    $xxx=\`pwd\`; export $xxx
5146 for Bourne-style shells, or
5147    setenv $xxx \`pwd\`
5148 for Csh-style shells.  You *MUST* do this before running make.
5149
5150 EOM
5151                 ;;
5152         *)      useshrplib='false' ;;
5153         esac
5154         ;;
5155 esac
5156
5157 case "$useshrplib" in
5158 true)
5159         case "$libperl" in
5160         '')
5161                 # Figure out a good name for libperl.so.  Since it gets stored in
5162                 # a version-specific architecture-dependent library, the version
5163                 # number isn't really that important, except for making cc/ld happy.
5164                 #
5165                 # A name such as libperl.so.3.1
5166                 majmin="libperl.$so.$patchlevel.$subversion"
5167                 # A name such as libperl.so.301
5168                 majonly=`echo $patchlevel $subversion |
5169                         $awk '{printf "%d%02d", $1, $2}'`
5170                 majonly=libperl.$so.$majonly
5171                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5172                 # rely on figuring it out from the naming of libc.
5173                 case "${osname}${osvers}" in
5174                 next4*)
5175                         dflt=libperl.5.$so
5176                         # XXX How handle the --version stuff for MAB?
5177                         ;;
5178                 linux*)  # ld won't link with a bare -lperl otherwise.
5179                         dflt=libperl.$so
5180                         ;;
5181                 *)      # Try to guess based on whether libc has major.minor.
5182                         case "$libc" in
5183                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5184                         *libc.$so.[0-9]*) dflt=$majonly ;;
5185                         *)      dflt=libperl.$so ;;
5186                         esac
5187                         ;;
5188                 esac
5189                 ;;
5190         *)      dflt=$libperl
5191                 ;;
5192         esac
5193         cat << EOM
5194
5195 I need to select a good name for the shared libperl.  If your system uses
5196 library names with major and minor numbers, then you might want something
5197 like $majmin.  Alternatively, if your system uses a single version
5198 number for shared libraries, then you might want to use $majonly.
5199 Or, your system might be quite happy with a simple libperl.$so.
5200
5201 Since the shared libperl will get installed into a version-specific
5202 architecture-dependent directory, the version number of the shared perl
5203 library probably isn't important, so the default should be o.k.
5204
5205 EOM
5206         rp='What name do you want to give to the shared libperl?'
5207         . ./myread
5208         libperl=$ans
5209         echo "Ok, I'll use $libperl"
5210         ;;
5211 *)
5212         libperl="libperl${_a}"
5213         ;;
5214 esac
5215
5216 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5217 case "$shrpdir" in
5218 '') ;;
5219 *)      $cat >&4 <<EOM
5220 WARNING:  Use of the shrpdir variable for the installation location of
5221 the shared $libperl is not supported.  It was never documented and
5222 will not work in this version.  Let me (doughera@lafcol.lafayette.edu)
5223 know of any problems this may cause.
5224
5225 EOM
5226         case "$shrpdir" in
5227         "$archlibexp/CORE")
5228                 $cat >&4 <<EOM
5229 But your current setting of $shrpdir is
5230 the default anyway, so it's harmless.
5231 EOM
5232                 ;;
5233         *)
5234                 $cat >&4 <<EOM
5235 Further, your current attempted setting of $shrpdir
5236 conflicts with the value of $archlibexp/CORE
5237 that installperl will use.
5238 EOM
5239                 ;;
5240         esac
5241         ;;
5242 esac
5243
5244 # How will the perl executable find the installed shared $libperl?
5245 # Add $xxx to ccdlflags.
5246 # If we can't figure out a command-line option, use $shrpenv to
5247 # set env LD_RUN_PATH.  The main perl makefile uses this.
5248 shrpdir=$archlibexp/CORE
5249 xxx=''
5250 tmp_shrpenv=''
5251 if "$useshrplib"; then
5252     case "$osname" in 
5253         aix)
5254                 # We'll set it in Makefile.SH...
5255                 ;;
5256         solaris|netbsd)
5257                 xxx="-R $shrpdir"
5258                 ;;
5259         freebsd)
5260                 xxx="-Wl,-R$shrpdir"
5261                 ;;
5262         linux|irix*|dec_osf)
5263                 xxx="-Wl,-rpath,$shrpdir"
5264                 ;;
5265         next)
5266                 # next doesn't like the default...
5267                 ;;
5268         *)
5269                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5270                 ;;
5271         esac
5272         case "$xxx" in
5273         '') ;;
5274         *)      
5275                 # Only add $xxx if it isn't already in ccdlflags.
5276                 case " $ccdlflags " in
5277                 *" $xxx "*)     ;;
5278                 *)      ccdlflags="$ccdlflags $xxx"
5279                         cat <<EOM >&4
5280
5281 Adding $xxx to the flags
5282 passed to $ld so that the perl executable will find the 
5283 installed shared $libperl.
5284
5285 EOM
5286                         ;;
5287                 esac
5288                 ;;
5289         esac
5290 fi
5291 # Respect a hint or command-line value.
5292 case "$shrpenv" in
5293 '') shrpenv="$tmp_shrpenv" ;;
5294 esac
5295
5296 : see if we have to deal with yellow pages, now NIS.
5297 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5298         if $test -f /usr/etc/nibindd; then
5299                 echo " "
5300                 echo "I'm fairly confident you're on a NeXT."
5301                 echo " "
5302                 rp='Do you get the hosts file via NetInfo?'
5303                 dflt=y
5304                 case "$hostcat" in
5305                 nidump*) ;;
5306                 '') ;;
5307                 *) dflt=n;;
5308                 esac
5309                 . ./myread
5310                 case "$ans" in
5311                 y*) hostcat='nidump hosts .';;
5312                 *)      case "$hostcat" in
5313                         nidump*) hostcat='';;
5314                         esac
5315                         ;;
5316                 esac
5317         fi
5318         case "$hostcat" in
5319         nidump*) ;;
5320         *)
5321                 case "$hostcat" in
5322                 *ypcat*) dflt=y;;
5323                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5324                                 dflt=y
5325                         else
5326                                 dflt=n
5327                         fi;;
5328                 *) dflt=n;;
5329                 esac
5330                 echo " "
5331                 rp='Are you getting the hosts file via yellow pages?'
5332                 . ./myread
5333                 case "$ans" in
5334                 y*) hostcat='ypcat hosts';;
5335                 *) hostcat='cat /etc/hosts';;
5336                 esac
5337                 ;;
5338         esac
5339 fi
5340 case "$hostcat" in
5341 '') hostcat='cat /etc/hosts';;
5342 esac
5343 case "$groupcat" in
5344 '') groupcat='cat /etc/group';;
5345 esac
5346 case "$passcat" in
5347 '') passcat='cat /etc/passwd';;
5348 esac
5349
5350 : now get the host name
5351 echo " "
5352 echo "Figuring out host name..." >&4
5353 case "$myhostname" in
5354 '') cont=true
5355         echo 'Maybe "hostname" will work...'
5356         if tans=`sh -c hostname 2>&1` ; then
5357                 myhostname=$tans
5358                 phostname=hostname
5359                 cont=''
5360         fi
5361         ;;
5362 *) cont='';;
5363 esac
5364 if $test "$cont"; then
5365         if ./xenix; then
5366                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5367                 if tans=`cat /etc/systemid 2>&1` ; then
5368                         myhostname=$tans
5369                         phostname='cat /etc/systemid'
5370                         echo "Whadyaknow.  Xenix always was a bit strange..."
5371                         cont=''
5372                 fi
5373         elif $test -r /etc/systemid; then
5374                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5375         fi
5376 fi
5377 if $test "$cont"; then
5378         echo 'No, maybe "uuname -l" will work...'
5379         if tans=`sh -c 'uuname -l' 2>&1` ; then
5380                 myhostname=$tans
5381                 phostname='uuname -l'
5382         else
5383                 echo 'Strange.  Maybe "uname -n" will work...'
5384                 if tans=`sh -c 'uname -n' 2>&1` ; then
5385                         myhostname=$tans
5386                         phostname='uname -n'
5387                 else
5388                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5389                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5390                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5391                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5392                         else
5393                                 case "$myhostname" in
5394                                 '') echo "Does this machine have an identity crisis or something?"
5395                                         phostname='';;
5396                                 *)
5397                                         echo "Well, you said $myhostname before..."
5398                                         phostname='echo $myhostname';;
5399                                 esac
5400                         fi
5401                 fi
5402         fi
5403 fi
5404 : you do not want to know about this
5405 set $myhostname
5406 myhostname=$1
5407
5408 : verify guess
5409 if $test "$myhostname" ; then
5410         dflt=y
5411         rp='Your host name appears to be "'$myhostname'".'" Right?"
5412         . ./myread
5413         case "$ans" in
5414         y*) ;;
5415         *) myhostname='';;
5416         esac
5417 fi
5418
5419 : bad guess or no guess
5420 while $test "X$myhostname" = X ; do
5421         dflt=''
5422         rp="Please type the (one word) name of your host:"
5423         . ./myread
5424         myhostname="$ans"
5425 done
5426
5427 : translate upper to lower if necessary
5428 case "$myhostname" in
5429 *[A-Z]*)
5430         echo "(Normalizing case in your host name)"
5431         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5432         ;;
5433 esac
5434
5435 case "$myhostname" in
5436 *.*)
5437         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5438         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5439         echo "(Trimming domain name from host name--host name is now $myhostname)"
5440         ;;
5441 *) case "$mydomain" in
5442         '')
5443                 {
5444                         test "X$hostcat" = "Xypcat hosts" &&
5445                         ypmatch "$myhostname" hosts 2>/dev/null |\
5446                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5447                         $test -s hosts
5448                 } || {
5449                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5450                                         /[       ]$myhostname[  . ]/p" > hosts
5451                 }
5452                 tmp_re="[       . ]"
5453                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5454                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5455                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5456                         hosts | $sort | $uniq | \
5457                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5458                 case `$echo X$dflt` in
5459                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5460                         dflt=.
5461                         ;;
5462                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5463                         ;;
5464                 esac
5465                 case "$dflt" in
5466                 .)
5467                         tans=`./loc resolv.conf X /etc /usr/etc`
5468                         if $test -f "$tans"; then
5469                                 echo "(Attempting domain name extraction from $tans)"
5470                                 dflt=.`$sed -n -e 's/   / /g' \
5471                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5472                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5473                                 case "$dflt" in
5474                                 .) dflt=.`$sed -n -e 's/        / /g' \
5475                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5476                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5477                                         ;;
5478                                 esac
5479                         fi
5480                         ;;
5481                 esac
5482                 case "$dflt" in
5483                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5484                         dflt=.`sh -c domainname 2>/dev/null`
5485                         case "$dflt" in
5486                         '') dflt='.';;
5487                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5488                         esac
5489                         ;;
5490                 esac
5491                 case "$dflt" in
5492                 .) echo "(Lost all hope -- silly guess then)"
5493                         dflt='.uucp'
5494                         ;;
5495                 esac
5496                 $rm -f hosts
5497                 ;;
5498         *) dflt="$mydomain";;
5499         esac;;
5500 esac
5501 echo " "
5502 rp="What is your domain name?"
5503 . ./myread
5504 tans="$ans"
5505 case "$ans" in
5506 '') ;;
5507 .*) ;;
5508 *) tans=".$tans";;
5509 esac
5510 mydomain="$tans"
5511
5512 : translate upper to lower if necessary
5513 case "$mydomain" in
5514 *[A-Z]*)
5515         echo "(Normalizing case in your domain name)"
5516         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5517         ;;
5518 esac
5519
5520 : a little sanity check here
5521 case "$phostname" in
5522 '') ;;
5523 *)
5524         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5525         $myhostname$mydomain|$myhostname) ;;
5526         *)
5527                 case "$phostname" in
5528                 sed*)
5529                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5530                         ;;
5531                 *)
5532                         echo "(That doesn't agree with your $phostname command, by the way.)"
5533                         ;;
5534                 esac
5535         ;;
5536         esac
5537         ;;
5538 esac
5539
5540 $cat <<EOM
5541
5542 I need to get your e-mail address in Internet format if possible, i.e.
5543 something like user@host.domain. Please answer accurately since I have
5544 no easy means to double check it. The default value provided below
5545 is most probably close to the reality but may not be valid from outside
5546 your organization...
5547
5548 EOM
5549 cont=x
5550 while test "$cont"; do
5551         case "$cf_email" in
5552         '') dflt="$cf_by@$myhostname$mydomain";;
5553         *) dflt="$cf_email";;
5554         esac
5555         rp='What is your e-mail address?'
5556         . ./myread
5557         cf_email="$ans"
5558         case "$cf_email" in
5559         *@*.*) cont='' ;;
5560         *)
5561                 rp='Address does not look like an Internet one.  Use it anyway?'
5562                 case "$fastread" in
5563                 yes) dflt=y ;;
5564                 *) dflt=n ;;
5565                 esac
5566                 . ./myread
5567                 case "$ans" in
5568                 y*) cont='' ;;
5569                 *) echo " " ;;
5570                 esac
5571                 ;;
5572         esac
5573 done
5574
5575 $cat <<EOM
5576
5577 If you or somebody else will be maintaining perl at your site, please
5578 fill in the correct e-mail address here so that they may be contacted
5579 if necessary. Currently, the "perlbug" program included with perl
5580 will send mail to this address in addition to perlbug@perl.com. You may
5581 enter "none" for no administrator.
5582
5583 EOM
5584 case "$perladmin" in
5585 '') dflt="$cf_email";;
5586 *) dflt="$perladmin";;
5587 esac
5588 rp='Perl administrator e-mail address'
5589 . ./myread
5590 perladmin="$ans"
5591
5592 : figure out how to guarantee perl startup
5593 case "$startperl" in
5594 '')
5595         case "$sharpbang" in
5596         *!)
5597                 $cat <<EOH
5598
5599 I can use the #! construct to start perl on your system. This will
5600 make startup of perl scripts faster, but may cause problems if you
5601 want to share those scripts and perl is not in a standard place
5602 ($binexp/perl) on all your platforms. The alternative is to force
5603 a shell by starting the script with a single ':' character.
5604
5605 EOH
5606                 dflt="$binexp/perl"
5607                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5608                 . ./myread
5609                 case "$ans" in
5610                 none)   startperl=": # use perl";;
5611                 *)      startperl="#!$ans"
5612                         if $test 30 -lt `echo "$ans" | wc -c`; then
5613                                 $cat >&4 <<EOM
5614
5615 WARNING:  Some systems limit the #! command to 32 characters.
5616 If you experience difficulty running Perl scripts with #!, try
5617 installing Perl in a directory with a shorter pathname.
5618
5619 EOM
5620                         fi ;;
5621                 esac
5622                 ;;
5623         *) startperl=": # use perl"
5624                 ;;
5625         esac
5626         ;;
5627 esac
5628 echo "I'll use $startperl to start perl scripts."
5629
5630 : figure best path for perl in scripts
5631 case "$perlpath" in
5632 '')
5633         perlpath="$binexp/perl"
5634         case "$startperl" in
5635         *!*) ;;
5636         *)
5637                 $cat <<EOH
5638
5639 I will use the "eval 'exec'" idiom to start Perl on your system.
5640 I can use the full path of your Perl binary for this purpose, but
5641 doing so may cause problems if you want to share those scripts and
5642 Perl is not always in a standard place ($binexp/perl).
5643
5644 EOH
5645                 dflt="$binexp/perl"
5646                 rp="What path shall I use in \"eval 'exec'\"?"
5647                 . ./myread
5648                 perlpath="$ans"
5649                 ;;
5650         esac
5651         ;;
5652 esac
5653 case "$startperl" in
5654 *!*)    ;;
5655 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
5656 esac
5657
5658 cat <<EOM
5659
5660 Previous version of $package used the standard IO mechanisms as defined
5661 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
5662 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
5663 the default.  This abstraction layer can use AT&T's sfio (if you already
5664 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
5665 problems with some extension modules.  Using PerlIO with stdio is safe,
5666 but it is slower than plain stdio and therefore is not the default.
5667
5668 If this doesn't make any sense to you, just accept the default 'n'.
5669 EOM
5670 case "$useperlio" in
5671 $define|true|[yY]*)     dflt='y';;
5672 *) dflt='n';;
5673 esac
5674 rp='Use the experimental PerlIO abstraction layer?'
5675 . ./myread
5676 case "$ans" in
5677 y|Y) 
5678         val="$define"
5679         ;;     
5680 *)      
5681         echo "Ok, doing things the stdio way"
5682         val="$undef"
5683         ;;
5684 esac
5685 set useperlio
5686 eval $setvar 
5687
5688 : Check how to convert floats to strings.
5689 echo " "
5690 echo "Checking for an efficient way to convert floats to strings."
5691 $cat >try.c <<'EOP'
5692 #ifdef TRY_gconvert
5693 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
5694 char *myname = "gconvert";
5695 #endif
5696 #ifdef TRY_gcvt
5697 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
5698 char *myname = "gcvt";
5699 #endif
5700 #ifdef TRY_sprintf
5701 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
5702 char *myname = "sprintf";
5703 #endif
5704
5705 #include <stdio.h>
5706
5707 int
5708 checkit(expect, got)
5709 char *expect;
5710 char *got;
5711 {
5712     if (strcmp(expect, got)) {
5713                 printf("%s oddity:  Expected %s, got %s\n",
5714                         myname, expect, got);
5715                 exit(1);
5716         }
5717 }
5718
5719 int
5720 main()
5721
5722         char buf[64]; 
5723         buf[63] = '\0';
5724
5725         /* This must be 1st test on (which?) platform */
5726         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
5727         Gconvert(0.1, 8, 0, buf);
5728         checkit("0.1", buf);
5729
5730         Gconvert(1.0, 8, 0, buf); 
5731         checkit("1", buf);
5732
5733         Gconvert(0.0, 8, 0, buf); 
5734         checkit("0", buf);
5735
5736         Gconvert(-1.0, 8, 0, buf); 
5737         checkit("-1", buf);
5738
5739         /* Some Linux gcvt's give 1.e+5 here. */
5740         Gconvert(100000.0, 8, 0, buf); 
5741         checkit("100000", buf);
5742         
5743         /* Some Linux gcvt's give -1.e+5 here. */
5744         Gconvert(-100000.0, 8, 0, buf); 
5745         checkit("-100000", buf);
5746
5747         exit(0);
5748 }
5749 EOP
5750 case "$d_Gconvert" in
5751 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
5752 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
5753 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
5754 *) xxx_list='gconvert gcvt sprintf' ;;
5755 esac
5756
5757 for xxx_convert in $xxx_list; do
5758         echo "Trying $xxx_convert"
5759         $rm -f try try$_o
5760         set try -DTRY_$xxx_convert
5761         if eval $compile; then
5762                 echo "$xxx_convert" found. >&4
5763                 if ./try; then
5764                         echo "I'll use $xxx_convert to convert floats into a string." >&4
5765                         break;
5766                 else
5767                         echo "...But $xxx_convert didn't work as I expected."
5768                 fi
5769         else
5770                 echo "$xxx_convert NOT found." >&4
5771         fi
5772 done
5773                 
5774 case "$xxx_convert" in
5775 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
5776 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
5777 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
5778 esac
5779
5780 : Initialize h_fcntl
5781 h_fcntl=false
5782
5783 : Initialize h_sysfile
5784 h_sysfile=false
5785
5786 : access call always available on UNIX
5787 set access d_access
5788 eval $inlibc
5789
5790 : locate the flags for 'access()'
5791 case "$d_access" in
5792 "$define")
5793         echo " "
5794         $cat >access.c <<'EOCP'
5795 #include <sys/types.h>
5796 #ifdef I_FCNTL
5797 #include <fcntl.h>
5798 #endif
5799 #ifdef I_SYS_FILE
5800 #include <sys/file.h>
5801 #endif
5802 #ifdef I_UNISTD
5803 #include <unistd.h>
5804 #endif
5805 main() {
5806         exit(R_OK);
5807 }
5808 EOCP
5809         : check sys/file.h first, no particular reason here
5810         if $test `./findhdr sys/file.h` && \
5811                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
5812                 h_sysfile=true;
5813                 echo "<sys/file.h> defines the *_OK access constants." >&4
5814         elif $test `./findhdr fcntl.h` && \
5815                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
5816                 h_fcntl=true;
5817                 echo "<fcntl.h> defines the *_OK access constants." >&4
5818         elif $test `./findhdr unistd.h` && \
5819                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
5820                 echo "<unistd.h> defines the *_OK access constants." >&4
5821         else
5822                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
5823         fi
5824         ;;
5825 esac
5826 $rm -f access*
5827
5828 : see if alarm exists
5829 set alarm d_alarm
5830 eval $inlibc
5831
5832 : Look for GNU-cc style attribute checking
5833 echo " "
5834 echo "Checking whether your compiler can handle __attribute__ ..." >&4
5835 $cat >attrib.c <<'EOCP'
5836 #include <stdio.h>
5837 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
5838 EOCP
5839 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
5840         if $contains 'warning' attrib.out >/dev/null 2>&1; then
5841                 echo "Your C compiler doesn't fully support __attribute__."
5842                 val="$undef"
5843         else
5844                 echo "Your C compiler supports __attribute__."
5845                 val="$define"
5846         fi
5847 else
5848         echo "Your C compiler doesn't seem to understand __attribute__ at all."
5849         val="$undef"
5850 fi
5851 set d_attribut
5852 eval $setvar
5853 $rm -f attrib*
5854
5855 : see if bcmp exists
5856 set bcmp d_bcmp
5857 eval $inlibc
5858
5859 : see if bcopy exists
5860 set bcopy d_bcopy
5861 eval $inlibc
5862
5863 : see if this is a unistd.h system
5864 set unistd.h i_unistd
5865 eval $inhdr
5866
5867 : see if getpgrp exists
5868 set getpgrp d_getpgrp
5869 eval $inlibc
5870
5871 case "$d_getpgrp" in
5872 "$define")
5873         echo " "
5874         echo "Checking to see which flavor of getpgrp is in use..."
5875         $cat >set.c <<EOP
5876 #$i_unistd I_UNISTD
5877 #include <sys/types.h>
5878 #ifdef I_UNISTD
5879 #  include <unistd.h>
5880 #endif
5881 main()
5882 {
5883         if (getuid() == 0) {
5884                 printf("(I see you are running Configure as super-user...)\n");
5885                 setuid(1);
5886         }
5887 #ifdef TRY_BSD_PGRP
5888         if (getpgrp(1) == 0)
5889                 exit(0);
5890 #else
5891         if (getpgrp() > 0)
5892                 exit(0);
5893 #endif
5894         exit(1);
5895 }
5896 EOP
5897         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5898                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
5899                 val="$define"
5900         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5901                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
5902                 val="$undef"
5903         else
5904                 echo "I can't seem to compile and run the test program."
5905                 if ./usg; then
5906                         xxx="a USG one, i.e. you use getpgrp()."
5907                 else
5908                         # SVR4 systems can appear rather BSD-ish.
5909                         case "$i_unistd" in
5910                         $undef)
5911                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
5912                                 val="$define"
5913                                 ;;
5914                         $define)
5915                                 xxx="probably a USG one, i.e. you use getpgrp()."
5916                                 val="$undef"
5917                                 ;;
5918                         esac
5919                 fi
5920                 echo "Assuming your getpgrp is $xxx" >&4
5921         fi
5922         ;;
5923 *) val="$undef";;
5924 esac
5925 set d_bsdgetpgrp
5926 eval $setvar
5927 $rm -f set set.c
5928
5929 : see if setpgrp exists
5930 set setpgrp d_setpgrp
5931 eval $inlibc
5932
5933 case "$d_setpgrp" in
5934 "$define")
5935         echo " "
5936         echo "Checking to see which flavor of setpgrp is in use..."
5937         $cat >set.c <<EOP
5938 #$i_unistd I_UNISTD
5939 #include <sys/types.h>
5940 #ifdef I_UNISTD
5941 #  include <unistd.h>
5942 #endif
5943 main()
5944 {
5945         if (getuid() == 0) {
5946                 printf("(I see you are running Configure as super-user...)\n");
5947                 setuid(1);
5948         }
5949 #ifdef TRY_BSD_PGRP
5950         if (-1 == setpgrp(1, 1))
5951                 exit(0);
5952 #else
5953         if (setpgrp() != -1)
5954                 exit(0);
5955 #endif
5956         exit(1);
5957 }
5958 EOP
5959         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5960                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
5961                 val="$define"
5962         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5963                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
5964                 val="$undef"
5965         else
5966                 echo "(I can't seem to compile and run the test program.)"
5967                 if ./usg; then
5968                         xxx="a USG one, i.e. you use setpgrp()."
5969                 else
5970                         # SVR4 systems can appear rather BSD-ish.
5971                         case "$i_unistd" in
5972                         $undef)
5973                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
5974                                 val="$define"
5975                                 ;;
5976                         $define)
5977                                 xxx="probably a USG one, i.e. you use setpgrp()."
5978                                 val="$undef"
5979                                 ;;
5980                         esac
5981                 fi
5982                 echo "Assuming your setpgrp is $xxx" >&4
5983         fi
5984         ;;
5985 *) val="$undef";;
5986 esac
5987 set d_bsdsetpgrp
5988 eval $setvar
5989 $rm -f set set.c
5990 : see if bzero exists
5991 set bzero d_bzero
5992 eval $inlibc
5993
5994 : check for lengths of integral types
5995 echo " "
5996 case "$intsize" in
5997 '')
5998         echo "Checking to see how big your integers are..." >&4
5999         $cat >intsize.c <<'EOCP'
6000 #include <stdio.h>
6001 main()
6002 {
6003         printf("intsize=%d;\n", sizeof(int));
6004         printf("longsize=%d;\n", sizeof(long));
6005         printf("shortsize=%d;\n", sizeof(short));
6006         exit(0);
6007 }
6008 EOCP
6009         set intsize
6010         if eval $compile && ./intsize > /dev/null; then
6011                 eval `./intsize`
6012                 echo "Your integers are $intsize bytes long."
6013                 echo "Your long integers are $longsize bytes long."
6014                 echo "Your short integers are $shortsize bytes long."
6015         else
6016                 $cat >&4 <<EOM
6017 !
6018 Help! I can't compile and run the intsize test program: please enlighten me!
6019 (This is probably a misconfiguration in your system or libraries, and
6020 you really ought to fix it.  Still, I'll try anyway.)
6021 !
6022 EOM
6023                 dflt=4
6024                 rp="What is the size of an integer (in bytes)?"
6025                 . ./myread
6026                 intsize="$ans"
6027                 dflt=$intsize
6028                 rp="What is the size of a long integer (in bytes)?"
6029                 . ./myread
6030                 longsize="$ans"
6031                 dflt=2
6032                 rp="What is the size of a short integer (in bytes)?"
6033                 . ./myread
6034                 shortsize="$ans"
6035         fi
6036         ;;
6037 esac
6038 $rm -f intsize intsize.*
6039
6040 : see if signal is declared as pointer to function returning int or void
6041 echo " "
6042 xxx=`./findhdr signal.h`
6043 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6044 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6045         echo "You have int (*signal())() instead of void." >&4
6046         val="$undef"
6047 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6048         echo "You have void (*signal())()." >&4
6049         val="$define"
6050 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6051         echo "You have int (*signal())() instead of void." >&4
6052         val="$undef"
6053 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6054         echo "You have void (*signal())()." >&4
6055         val="$define"
6056 else
6057         case "$d_voidsig" in
6058         '')
6059         echo "I can't determine whether signal handler returns void or int..." >&4
6060                 dflt=void
6061                 rp="What type does your signal handler return?"
6062                 . ./myread
6063                 case "$ans" in
6064                 v*) val="$define";;
6065                 *) val="$undef";;
6066                 esac;;
6067         "$define")
6068                 echo "As you already told me, signal handler returns void." >&4
6069                 val="$define"
6070                 ;;
6071         *)      echo "As you already told me, signal handler returns int." >&4
6072                 val="$undef"
6073                 ;;
6074         esac
6075 fi
6076 set d_voidsig
6077 eval $setvar
6078 case "$d_voidsig" in
6079 "$define") signal_t="void";;
6080 *) signal_t="int";;
6081 esac
6082 $rm -f $$.tmp
6083
6084 : check for ability to cast large floats to 32-bit ints.
6085 echo " "
6086 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6087 if $test "$intsize" -ge 4; then
6088         xxx=int
6089 else
6090         xxx=long
6091 fi
6092 $cat >try.c <<EOCP
6093 #include <stdio.h>
6094 #include <sys/types.h>
6095 #include <signal.h>
6096 $signal_t blech() { exit(3); }
6097 main()
6098 {
6099         $xxx i32;
6100         double f, g;
6101         int result = 0;
6102         signal(SIGFPE, blech);
6103
6104         /* Don't let compiler optimize the test away */
6105         sscanf("2147483647", "%lf", &f); /* f = (double) 0x7fffffff; */
6106         g = 10 * f;
6107         i32  = ($xxx) g;
6108
6109         /* x86 processors will probably give 0x8000 0000, which is a
6110        sign change.  We don't want that.  We want to mimic SPARC
6111            behavior here, which is to preserve the sign and give
6112            back 0x7fff ffff.
6113         */
6114         if (i32 != ($xxx) f)
6115                 result |= 1;
6116         exit(result);
6117 }
6118 EOCP
6119 set try
6120 if eval $compile; then
6121         ./try
6122         yyy=$?
6123 else
6124         echo "(I can't seem to compile the test program--assuming it can't)"
6125         yyy=1
6126 fi
6127 case "$yyy" in
6128 0)      val="$define"
6129         echo "Yup, it can."
6130         ;;
6131 *)      val="$undef"
6132         echo "Nope, it can't."
6133         ;;
6134 esac
6135 set d_casti32
6136 eval $setvar
6137 $rm -f try try.*
6138
6139 : check for ability to cast negative floats to unsigned
6140 echo " "
6141 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6142 $cat >try.c <<EOCP
6143 #include <stdio.h>
6144 #include <sys/types.h>
6145 #include <signal.h>
6146 $signal_t blech() { exit(7); }
6147 $signal_t blech_in_list() { exit(4); }
6148 unsigned long dummy_long(p) unsigned long p; { return p; }
6149 unsigned int dummy_int(p) unsigned int p; { return p; }
6150 unsigned short dummy_short(p) unsigned short p; { return p; }
6151 main()
6152 {
6153         double f;
6154         unsigned long along;
6155         unsigned int aint;
6156         unsigned short ashort;
6157         int result = 0;
6158         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6159            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6160            optimized the whole file away
6161         */
6162         sscanf("-123.", "%lf", &f);  /* f = -123.; */
6163
6164         signal(SIGFPE, blech);
6165         along = (unsigned long)f;
6166         aint = (unsigned int)f;
6167         ashort = (unsigned short)f;
6168         if (along != (unsigned long)-123)
6169                 result |= 1;
6170         if (aint != (unsigned int)-123)
6171                 result |= 1;
6172         if (ashort != (unsigned short)-123)
6173                 result |= 1;
6174         sscanf("1073741824.", "%lf", &f); /* f = (double)0x40000000; */
6175         f = f + f;
6176         along = 0;
6177         along = (unsigned long)f;
6178         if (along != 0x80000000)
6179                 result |= 2;
6180         f -= 1.;
6181         along = 0;
6182         along = (unsigned long)f;
6183         if (along != 0x7fffffff)
6184                 result |= 1;
6185         f += 2.;
6186         along = 0;
6187         along = (unsigned long)f;
6188         if (along != 0x80000001)
6189                 result |= 2;
6190         if (result)
6191                 exit(result);
6192         signal(SIGFPE, blech_in_list);
6193         sscanf("123.", "%lf", &f);  /* f = 123.; */
6194         along = dummy_long((unsigned long)f);
6195         aint = dummy_int((unsigned int)f);
6196         ashort = dummy_short((unsigned short)f);
6197         if (along != (unsigned long)123)
6198                 result |= 4;
6199         if (aint != (unsigned int)123)
6200                 result |= 4;
6201         if (ashort != (unsigned short)123)
6202                 result |= 4;
6203         exit(result);
6204
6205 }
6206 EOCP
6207 set try
6208 if eval $compile; then
6209         ./try
6210         castflags=$?
6211 else
6212         echo "(I can't seem to compile the test program--assuming it can't)"
6213         castflags=7
6214 fi
6215 case "$castflags" in
6216 0)      val="$define"
6217         echo "Yup, it can."
6218         ;;
6219 *)      val="$undef"
6220         echo "Nope, it can't."
6221         ;;
6222 esac
6223 set d_castneg
6224 eval $setvar
6225 $rm -f try.*
6226
6227 : see if vprintf exists
6228 echo " "
6229 if set vprintf val -f d_vprintf; eval $csym; $val; then
6230         echo 'vprintf() found.' >&4
6231         val="$define"
6232         $cat >vprintf.c <<'EOF'
6233 #include <varargs.h>
6234
6235 main() { xxx("foo"); }
6236
6237 xxx(va_alist)
6238 va_dcl
6239 {
6240         va_list args;
6241         char buf[10];
6242
6243         va_start(args);
6244         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6245 }
6246 EOF
6247         set vprintf
6248         if eval $compile && ./vprintf; then
6249                 echo "Your vsprintf() returns (int)." >&4
6250                 val2="$undef"
6251         else
6252                 echo "Your vsprintf() returns (char*)." >&4
6253                 val2="$define"
6254         fi
6255 else
6256         echo 'vprintf() NOT found.' >&4
6257                 val="$undef"
6258                 val2="$undef"
6259 fi
6260 set d_vprintf
6261 eval $setvar
6262 val=$val2
6263 set d_charvspr
6264 eval $setvar
6265
6266 : see if chown exists
6267 set chown d_chown
6268 eval $inlibc
6269
6270 : see if chroot exists
6271 set chroot d_chroot
6272 eval $inlibc
6273
6274 : see if chsize exists
6275 set chsize d_chsize
6276 eval $inlibc
6277
6278 : check for const keyword
6279 echo " "
6280 echo 'Checking to see if your C compiler knows about "const"...' >&4
6281 $cat >const.c <<'EOCP'
6282 typedef struct spug { int drokk; } spug;
6283 main()
6284 {
6285         const char *foo;
6286         const spug y;
6287 }
6288 EOCP
6289 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
6290         val="$define"
6291         echo "Yup, it does."
6292 else
6293         val="$undef"
6294         echo "Nope, it doesn't."
6295 fi
6296 set d_const
6297 eval $setvar
6298
6299 : see if crypt exists
6300 echo " "
6301 if set crypt val -f d_crypt; eval $csym; $val; then
6302         echo 'crypt() found.' >&4
6303         val="$define"
6304         cryptlib=''
6305 else
6306         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
6307         if $test -z "$cryptlib"; then
6308                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
6309         else
6310                 cryptlib=-lcrypt
6311         fi
6312         if $test -z "$cryptlib"; then
6313                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
6314         else
6315                 cryptlib=-lcrypt
6316         fi
6317         if $test -z "$cryptlib"; then
6318                 cryptlib=`./loc libcrypt$_a "" $libpth`
6319         else
6320                 cryptlib=-lcrypt
6321         fi
6322         if $test -z "$cryptlib"; then
6323                 echo 'crypt() NOT found.' >&4
6324                 val="$undef"
6325         else
6326                 val="$define"
6327         fi
6328 fi
6329 set d_crypt
6330 eval $setvar
6331
6332 : see if cuserid exists
6333 set cuserid d_cuserid
6334 eval $inlibc
6335
6336 : see if this is a limits.h system
6337 set limits.h i_limits
6338 eval $inhdr
6339
6340 : see if this is a float.h system
6341 set float.h i_float
6342 eval $inhdr
6343
6344 : See if number of significant digits in a double precision number is known
6345 echo " "
6346 $cat >dbl_dig.c <<EOM
6347 #$i_limits I_LIMITS
6348 #$i_float I_FLOAT
6349 #ifdef I_LIMITS
6350 #include <limits.h>
6351 #endif
6352 #ifdef I_FLOAT
6353 #include <float.h>
6354 #endif
6355 #ifdef DBL_DIG
6356 printf("Contains DBL_DIG");
6357 #endif
6358 EOM
6359 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
6360 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
6361         echo "DBL_DIG found." >&4
6362         val="$define"
6363 else
6364         echo "DBL_DIG NOT found." >&4
6365         val="$undef"
6366 fi
6367 $rm -f dbl_dig.?
6368 set d_dbl_dig
6369 eval $setvar
6370
6371 : see if difftime exists
6372 set difftime d_difftime
6373 eval $inlibc
6374
6375 : see if this is a dirent system
6376 echo " "
6377 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
6378         val="$define"
6379         echo "<dirent.h> found." >&4
6380 else
6381         val="$undef"
6382         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
6383                 echo "<sys/dir.h> found." >&4
6384                 echo " "
6385         else
6386                 xinc=`./findhdr sys/ndir.h`
6387         fi
6388         echo "<dirent.h> NOT found." >&4
6389 fi
6390 set i_dirent
6391 eval $setvar
6392
6393 : Look for type of directory structure.
6394 echo " "
6395 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6396
6397 case "$direntrytype" in
6398 ''|' ')
6399         case "$i_dirent" in
6400         $define) guess1='struct dirent' ;;
6401         *) guess1='struct direct'  ;;
6402         esac
6403         ;;
6404 *)      guess1="$direntrytype"
6405         ;;
6406 esac
6407
6408 case "$guess1" in
6409 'struct dirent') guess2='struct direct' ;;
6410 *) guess2='struct dirent' ;;
6411 esac
6412                 
6413 if $contains "$guess1" try.c >/dev/null 2>&1; then
6414         direntrytype="$guess1"
6415         echo "Your directory entries are $direntrytype." >&4
6416 elif $contains "$guess2" try.c >/dev/null 2>&1; then
6417         direntrytype="$guess2"
6418         echo "Your directory entries seem to be $direntrytype." >&4
6419 else
6420         echo "I don't recognize your system's directory entries." >&4
6421         rp="What type is used for directory entries on this system?"
6422         dflt="$guess1"
6423         . ./myread
6424         direntrytype="$ans"
6425 fi
6426 $rm -f try.c
6427
6428
6429 : see if the directory entry stores field length
6430 echo " "
6431 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6432 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
6433         echo "Good, your directory entry keeps length information in d_namlen." >&4
6434         val="$define"
6435 else
6436         echo "Your directory entry does not know about the d_namlen field." >&4
6437         val="$undef"
6438 fi
6439 set d_dirnamlen
6440 eval $setvar
6441 $rm -f try.c
6442
6443 : see if dlerror exists
6444 xxx_runnm="$runnm"
6445 runnm=false
6446 set dlerror d_dlerror
6447 eval $inlibc
6448 runnm="$xxx_runnm"
6449
6450 : see if dlfcn is available
6451 set dlfcn.h i_dlfcn
6452 eval $inhdr
6453
6454 case "$usedl" in
6455 $define|y|true)
6456         $cat << EOM
6457
6458 On a few systems, the dynamically loaded modules that perl generates and uses
6459 will need a different extension then shared libs. The default will probably
6460 be appropriate.
6461
6462 EOM
6463         case "$dlext" in
6464         '')     dflt="$so" ;;
6465         *)      dflt="$dlext" ;;
6466         esac
6467         rp='What is the extension of dynamically loaded modules'
6468         . ./myread
6469         dlext="$ans"
6470         ;;
6471 *)
6472         dlext="none"
6473         ;;
6474 esac
6475
6476 : Check if dlsym need a leading underscore
6477 echo " "
6478 val="$undef"
6479
6480 case "$dlsrc" in
6481 dl_dlopen.xs)
6482         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
6483         $cat >dyna.c <<'EOM'
6484 fred () { }
6485 EOM
6486
6487 $cat >fred.c<<EOM
6488
6489 #include <stdio.h>
6490 #$i_dlfcn I_DLFCN
6491 #ifdef I_DLFCN
6492 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
6493 #else
6494 #include <sys/types.h>
6495 #include <nlist.h>
6496 #include <link.h>
6497 #endif
6498
6499 extern int fred() ;
6500
6501 main()
6502 {
6503     void * handle ;
6504     void * symbol ;
6505 #ifndef RTLD_LAZY
6506     int mode = 1 ;
6507 #else
6508     int mode = RTLD_LAZY ;
6509 #endif
6510     handle = dlopen("./dyna.$dlext", mode) ;
6511     if (handle == NULL) {
6512         printf ("1\n") ;
6513         fflush (stdout) ;
6514         exit(0);
6515     }
6516     symbol = dlsym(handle, "fred") ;
6517     if (symbol == NULL) {
6518         /* try putting a leading underscore */
6519         symbol = dlsym(handle, "_fred") ;
6520         if (symbol == NULL) {
6521             printf ("2\n") ;
6522             fflush (stdout) ;
6523             exit(0);
6524         }
6525         printf ("3\n") ;
6526     }
6527     else
6528         printf ("4\n") ;
6529     fflush (stdout) ;
6530     exit(0);
6531 }
6532 EOM
6533         : Call the object file tmp-dyna.o in case dlext=o.
6534         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
6535                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
6536                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
6537                 $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
6538                 xxx=`./fred`
6539                 case $xxx in
6540                 1)      echo "Test program failed using dlopen." >&4
6541                         echo "Perhaps you should not use dynamic loading." >&4;;
6542                 2)      echo "Test program failed using dlsym." >&4
6543                         echo "Perhaps you should not use dynamic loading." >&4;;
6544                 3)      echo "dlsym needs a leading underscore" >&4
6545                         val="$define" ;;
6546                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
6547                 esac
6548         else
6549                 echo "I can't compile and run the test program." >&4
6550         fi
6551         ;;
6552 esac
6553                 
6554 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
6555
6556 set d_dlsymun
6557 eval $setvar
6558
6559 : see if dup2 exists
6560 set dup2 d_dup2
6561 eval $inlibc
6562
6563 : see if endhostent exists
6564 set endhostent d_endhent
6565 eval $inlibc
6566
6567 : see if endnetent exists
6568 set endnetent d_endnent
6569 eval $inlibc
6570
6571 : see if endprotoent exists
6572 set endprotoent d_endpent
6573 eval $inlibc
6574
6575 : see if endservent exists
6576 set endservent d_endsent
6577 eval $inlibc
6578
6579 : Locate the flags for 'open()'
6580 echo " "
6581 $cat >open3.c <<'EOCP'
6582 #include <sys/types.h>
6583 #ifdef I_FCNTL
6584 #include <fcntl.h>
6585 #endif
6586 #ifdef I_SYS_FILE
6587 #include <sys/file.h>
6588 #endif
6589 main() {
6590         if(O_RDONLY);
6591 #ifdef O_TRUNC
6592         exit(0);
6593 #else
6594         exit(1);
6595 #endif
6596 }
6597 EOCP
6598 : check sys/file.h first to get FREAD on Sun
6599 if $test `./findhdr sys/file.h` && \
6600                 set open3 -DI_SYS_FILE && eval $compile; then
6601         h_sysfile=true;
6602         echo "<sys/file.h> defines the O_* constants..." >&4
6603         if ./open3; then
6604                 echo "and you have the 3 argument form of open()." >&4
6605                 val="$define"
6606         else
6607                 echo "but not the 3 argument form of open().  Oh, well." >&4
6608                 val="$undef"
6609         fi
6610 elif $test `./findhdr fcntl.h` && \
6611                 set open3 -DI_FCNTL && eval $compile; then
6612         h_fcntl=true;
6613         echo "<fcntl.h> defines the O_* constants..." >&4
6614         if ./open3; then
6615                 echo "and you have the 3 argument form of open()." >&4
6616                 val="$define"
6617         else
6618                 echo "but not the 3 argument form of open().  Oh, well." >&4
6619                 val="$undef"
6620         fi
6621 else
6622         val="$undef"
6623         echo "I can't find the O_* constant definitions!  You got problems." >&4
6624 fi
6625 set d_open3
6626 eval $setvar
6627 $rm -f open3*
6628
6629 : check for non-blocking I/O stuff
6630 case "$h_sysfile" in
6631 true) echo "#include <sys/file.h>" > head.c;;
6632 *)
6633         case "$h_fcntl" in
6634         true) echo "#include <fcntl.h>" > head.c;;
6635         *) echo "#include <sys/fcntl.h>" > head.c;;
6636         esac
6637         ;;
6638 esac
6639 echo " "
6640 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
6641 case "$o_nonblock" in
6642 '')
6643         $cat head.c > try.c
6644         $cat >>try.c <<'EOCP'
6645 main() {
6646 #ifdef O_NONBLOCK
6647         printf("O_NONBLOCK\n");
6648         exit(0);
6649 #endif
6650 #ifdef O_NDELAY
6651         printf("O_NDELAY\n");
6652         exit(0);
6653 #endif
6654 #ifdef FNDELAY
6655         printf("FNDELAY\n");
6656         exit(0);
6657 #endif
6658         exit(0);
6659 }
6660 EOCP
6661         set try
6662         if eval $compile; then
6663                 o_nonblock=`./try`
6664                 case "$o_nonblock" in
6665                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
6666                 *) echo "Seems like we can use $o_nonblock.";;
6667                 esac
6668         else
6669                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
6670         fi
6671         ;;
6672 *) echo "Using $hint value $o_nonblock.";;
6673 esac
6674 $rm -f try try.* .out core
6675
6676 echo " "
6677 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
6678 case "$eagain" in
6679 '')
6680         $cat head.c > try.c
6681         $cat >>try.c <<EOCP
6682 #include <errno.h>
6683 #include <sys/types.h>
6684 #include <signal.h>
6685 #define MY_O_NONBLOCK $o_nonblock
6686 extern int errno;
6687 $signal_t blech(x) int x; { exit(3); }
6688 EOCP
6689         $cat >> try.c <<'EOCP'
6690 main()
6691 {
6692         int pd[2];
6693         int pu[2];
6694         char buf[1];
6695         char string[100];
6696
6697         pipe(pd);       /* Down: child -> parent */
6698         pipe(pu);       /* Up: parent -> child */
6699         if (0 != fork()) {
6700                 int ret;
6701                 close(pd[1]);   /* Parent reads from pd[0] */
6702                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
6703                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
6704                         exit(1);
6705                 signal(SIGALRM, blech);
6706                 alarm(5);
6707                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
6708                         exit(2);
6709                 sprintf(string, "%d\n", ret);
6710                 write(2, string, strlen(string));
6711                 alarm(0);
6712 #ifdef EAGAIN
6713                 if (errno == EAGAIN) {
6714                         printf("EAGAIN\n");
6715                         goto ok;
6716                 }
6717 #endif
6718 #ifdef EWOULDBLOCK
6719                 if (errno == EWOULDBLOCK)
6720                         printf("EWOULDBLOCK\n");
6721 #endif
6722         ok:
6723                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
6724                 sleep(2);                               /* Give it time to close our pipe */
6725                 alarm(5);
6726                 ret = read(pd[0], buf, 1);      /* Should read EOF */
6727                 alarm(0);
6728                 sprintf(string, "%d\n", ret);
6729                 write(3, string, strlen(string));
6730                 exit(0);
6731         }
6732
6733         close(pd[0]);                   /* We write to pd[1] */
6734         close(pu[1]);                   /* We read from pu[0] */
6735         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
6736         close(pd[1]);                   /* Pipe pd is now fully closed! */
6737         exit(0);                                /* Bye bye, thank you for playing! */
6738 }
6739 EOCP
6740         set try
6741         if eval $compile; then
6742                 echo "$startsh" >mtry
6743                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
6744                 chmod +x mtry
6745                 ./mtry >/dev/null 2>&1
6746                 case $? in
6747                 0) eagain=`$cat try.out`;;
6748                 1) echo "Could not perform non-blocking setting!";;
6749                 2) echo "I did a successful read() for something that was not there!";;
6750                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
6751                 *) echo "Something terribly wrong happened during testing.";;
6752                 esac
6753                 rd_nodata=`$cat try.ret`
6754                 echo "A read() system call with no data present returns $rd_nodata."
6755                 case "$rd_nodata" in
6756                 0|-1) ;;
6757                 *)
6758                         echo "(That's peculiar, fixing that to be -1.)"
6759                         rd_nodata=-1
6760                         ;;
6761                 esac
6762                 case "$eagain" in
6763                 '')
6764                         echo "Forcing errno EAGAIN on read() with no data available."
6765                         eagain=EAGAIN
6766                         ;;
6767                 *)
6768                         echo "Your read() sets errno to $eagain when no data is available."
6769                         ;;
6770                 esac
6771                 status=`$cat try.err`
6772                 case "$status" in
6773                 0) echo "And it correctly returns 0 to signal EOF.";;
6774                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
6775                 *) echo "However, your read() returns '$status' on EOF??";;
6776                 esac
6777                 val="$define"
6778                 if test "$status" = "$rd_nodata"; then
6779                         echo "WARNING: you can't distinguish between EOF and no data!"
6780                         val="$undef"
6781                 fi
6782         else
6783                 echo "I can't compile the test program--assuming errno EAGAIN will do."
6784                 eagain=EAGAIN
6785         fi
6786         set d_eofnblk
6787         eval $setvar
6788         ;;
6789 *)
6790         echo "Using $hint value $eagain."
6791         echo "Your read() returns $rd_nodata when no data is present."
6792         case "$d_eofnblk" in
6793         "$define") echo "And you can see EOF because read() returns 0.";;
6794         "$undef") echo "But you can't see EOF status from read() returned value.";;
6795         *)
6796                 echo "(Assuming you can't see EOF status from read anyway.)"
6797                 d_eofnblk=$undef
6798                 ;;
6799         esac
6800         ;;
6801 esac
6802 $rm -f try try.* .out core head.c mtry
6803
6804 : see if fchmod exists
6805 set fchmod d_fchmod
6806 eval $inlibc
6807
6808 : see if fchown exists
6809 set fchown d_fchown
6810 eval $inlibc
6811
6812 : see if this is an fcntl system
6813 set fcntl d_fcntl
6814 eval $inlibc
6815
6816 : see if fgetpos exists
6817 set fgetpos d_fgetpos
6818 eval $inlibc
6819
6820 : see if flock exists
6821 set flock d_flock
6822 eval $inlibc
6823
6824 : see if fork exists
6825 set fork d_fork
6826 eval $inlibc
6827
6828 : see if pathconf exists
6829 set pathconf d_pathconf
6830 eval $inlibc
6831
6832 : see if fpathconf exists
6833 set fpathconf d_fpathconf
6834 eval $inlibc
6835
6836 : see if fsetpos exists
6837 set fsetpos d_fsetpos
6838 eval $inlibc
6839
6840 : see if gethostbyaddr exists
6841 set gethostbyaddr d_gethbyaddr
6842 eval $inlibc
6843
6844 : see if gethostbyname exists
6845 set gethostbyname d_gethbyname
6846 eval $inlibc
6847
6848 : see if gethostent exists
6849 set gethostent d_gethent
6850 eval $inlibc
6851
6852 : see if getlogin exists
6853 set getlogin d_getlogin
6854 eval $inlibc
6855
6856 : see if getnetbyaddr exists
6857 set getnetbyaddr d_getnbyaddr
6858 eval $inlibc
6859
6860 : see if getnetbyname exists
6861 set getnetbyname d_getnbyname
6862 eval $inlibc
6863
6864 : see if getnetent exists
6865 set getnetent d_getnent
6866 eval $inlibc
6867
6868
6869 : see if getprotobyname exists
6870 set getprotobyname d_getpbyname
6871 eval $inlibc
6872
6873 : see if getprotobynumber exists
6874 set getprotobynumber d_getpbynumber
6875 eval $inlibc
6876
6877 : see if getprotoent exists
6878 set getprotoent d_getpent
6879 eval $inlibc
6880
6881 : see if getpgid exists
6882 set getpgid d_getpgid
6883 eval $inlibc
6884
6885 : see if getpgrp2 exists
6886 set getpgrp2 d_getpgrp2
6887 eval $inlibc
6888
6889 : see if getppid exists
6890 set getppid d_getppid
6891 eval $inlibc
6892
6893 : see if getpriority exists
6894 set getpriority d_getprior
6895 eval $inlibc
6896
6897
6898 : see if getservbyname exists
6899 set getservbyname d_getsbyname
6900 eval $inlibc
6901
6902 : see if getservbyport exists
6903 set getservbyport d_getsbyport
6904 eval $inlibc
6905
6906 : see if getservent exists
6907 set getservent d_getsent
6908 eval $inlibc
6909
6910 : see if gettimeofday or ftime exists
6911 set gettimeofday d_gettimeod
6912 eval $inlibc
6913 case "$d_gettimeod" in
6914 "$undef")
6915         set ftime d_ftime 
6916         eval $inlibc
6917         ;;
6918 *)
6919         val="$undef"; set d_ftime; eval $setvar
6920         ;;
6921 esac
6922 case "$d_gettimeod$d_ftime" in
6923 "$undef$undef")
6924         echo " "
6925         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
6926         ;;
6927 esac
6928
6929 : see if this is a netinet/in.h or sys/in.h system
6930 set netinet/in.h i_niin sys/in.h i_sysin
6931 eval $inhdr
6932
6933 : see if htonl --and friends-- exists
6934 val=''
6935 set htonl val
6936 eval $inlibc
6937
6938 : Maybe they are macros.
6939 case "$val" in
6940 $undef)
6941         $cat >htonl.c <<EOM
6942 #include <stdio.h>
6943 #include <sys/types.h>
6944 #$i_niin I_NETINET_IN
6945 #$i_sysin I_SYS_IN
6946 #ifdef I_NETINET_IN
6947 #include <netinet/in.h>
6948 #endif
6949 #ifdef I_SYS_IN
6950 #include <sys/in.h>
6951 #endif
6952 #ifdef htonl
6953 printf("Defined as a macro.");
6954 #endif
6955 EOM
6956         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
6957         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
6958                 val="$define"
6959                 echo "But it seems to be defined as a macro." >&4
6960         fi
6961         $rm -f htonl.?
6962         ;;
6963 esac
6964 set d_htonl
6965 eval $setvar
6966
6967 : see which of string.h or strings.h is needed
6968 echo " "
6969 strings=`./findhdr string.h`
6970 if $test "$strings" && $test -r "$strings"; then
6971         echo "Using <string.h> instead of <strings.h>." >&4
6972         val="$define"
6973 else
6974         val="$undef"
6975         strings=`./findhdr strings.h`
6976         if $test "$strings" && $test -r "$strings"; then
6977                 echo "Using <strings.h> instead of <string.h>." >&4
6978         else
6979                 echo "No string header found -- You'll surely have problems." >&4
6980         fi
6981 fi
6982 set i_string
6983 eval $setvar
6984 case "$i_string" in
6985 "$undef") strings=`./findhdr strings.h`;;
6986 *)        strings=`./findhdr string.h`;;
6987 esac
6988
6989 : index or strchr
6990 echo " "
6991 if set index val -f; eval $csym; $val; then
6992         if set strchr val -f d_strchr; eval $csym; $val; then
6993                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
6994                         val="$define"
6995                         vali="$undef"
6996                         echo "strchr() found." >&4
6997                 else
6998                         val="$undef"
6999                         vali="$define"
7000                         echo "index() found." >&4
7001                 fi
7002         else
7003                 val="$undef"
7004                 vali="$define"
7005                 echo "index() found." >&4
7006         fi
7007 else
7008         if set strchr val -f d_strchr; eval $csym; $val; then
7009                 val="$define"
7010                 vali="$undef"
7011                 echo "strchr() found." >&4
7012         else
7013                 echo "No index() or strchr() found!" >&4
7014                 val="$undef"
7015                 vali="$undef"
7016         fi
7017 fi
7018 set d_strchr; eval $setvar
7019 val="$vali"
7020 set d_index; eval $setvar
7021
7022 : check whether inet_aton exists
7023 set inet_aton d_inetaton
7024 eval $inlibc
7025
7026 : Look for isascii
7027 echo " "
7028 $cat >isascii.c <<'EOCP'
7029 #include <stdio.h>
7030 #include <ctype.h>
7031 main() {
7032         int c = 'A';
7033         if (isascii(c))
7034                 exit(0);
7035         else
7036                 exit(1);
7037 }
7038 EOCP
7039 set isascii
7040 if eval $compile; then
7041         echo "isascii() found." >&4
7042         val="$define"
7043 else
7044         echo "isascii() NOT found." >&4
7045         val="$undef"
7046 fi
7047 set d_isascii
7048 eval $setvar
7049 $rm -f isascii*
7050
7051 : see if killpg exists
7052 set killpg d_killpg
7053 eval $inlibc
7054
7055 : see if link exists
7056 set link d_link
7057 eval $inlibc
7058
7059 : see if localeconv exists
7060 set localeconv d_locconv
7061 eval $inlibc
7062
7063 : see if lockf exists
7064 set lockf d_lockf
7065 eval $inlibc
7066
7067 : check for long doubles
7068 echo " "
7069 echo $n "Checking to see if your system supports long doubles...$c" >&4
7070 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
7071 if $cc $optimize $ccflags -c try.c; then
7072         val="$define"
7073         echo " Yup, it does." >&4
7074 else
7075         val="$undef"
7076         echo " Nope, it doesn't." >&4
7077 fi
7078 $rm try.*
7079 set d_longdbl
7080 eval $setvar
7081
7082 : check for length of long double
7083 echo " "
7084
7085 case "${d_longdbl}${longdblsize}" in
7086 $define)
7087         $echo $n "Checking to see how big your long doubles are...$c" >&4
7088         $cat >try.c <<'EOCP'
7089 #include <stdio.h>
7090 main()
7091 {
7092         printf("%d\n", sizeof(long double));
7093 }
7094 EOCP
7095         set try
7096         if eval $compile; then
7097                 longdblsize=`./try`
7098         else
7099                 dflt='8'
7100                 echo "(I can't seem to compile the test program.  Guessing...)"
7101                 rp="What is the size of a long double (in bytes)?"
7102                 . ./myread
7103                 longdblsize="$ans"
7104         fi
7105         $echo " $longdblsize bytes."
7106         ;;
7107 esac
7108 $rm -f try.c try
7109
7110 : see if lstat exists
7111 set lstat d_lstat
7112 eval $inlibc
7113
7114 : see if mblen exists
7115 set mblen d_mblen
7116 eval $inlibc
7117
7118 : see if mbstowcs exists
7119 set mbstowcs d_mbstowcs
7120 eval $inlibc
7121
7122 : see if mbtowc exists
7123 set mbtowc d_mbtowc
7124 eval $inlibc
7125
7126 : see if memcmp exists
7127 set memcmp d_memcmp
7128 eval $inlibc
7129
7130 : see if memcpy exists
7131 set memcpy d_memcpy
7132 eval $inlibc
7133
7134 : see if memmove exists
7135 set memmove d_memmove
7136 eval $inlibc
7137
7138 : see if memset exists
7139 set memset d_memset
7140 eval $inlibc
7141
7142 : see if mkdir exists
7143 set mkdir d_mkdir
7144 eval $inlibc
7145
7146 : see if mkfifo exists
7147 set mkfifo d_mkfifo
7148 eval $inlibc
7149
7150 : see if mkstemp exists
7151 set mkstemp d_mkstemp
7152 eval $inlibc
7153
7154 : see if mktime exists
7155 set mktime d_mktime
7156 eval $inlibc
7157
7158 : see if msgctl exists
7159 set msgctl d_msgctl
7160 eval $inlibc
7161
7162 : see if msgget exists
7163 set msgget d_msgget
7164 eval $inlibc
7165
7166 : see if msgsnd exists
7167 set msgsnd d_msgsnd
7168 eval $inlibc
7169
7170 : see if msgrcv exists
7171 set msgrcv d_msgrcv
7172 eval $inlibc
7173
7174 : see how much of the 'msg*(2)' library is present.
7175 h_msg=true
7176 echo " "
7177 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
7178 *"$undef"*) h_msg=false;;
7179 esac
7180 : we could also check for sys/ipc.h ...
7181 if $h_msg && $test `./findhdr sys/msg.h`; then
7182         echo "You have the full msg*(2) library." >&4
7183         val="$define"
7184 else
7185         echo "You don't have the full msg*(2) library." >&4
7186         val="$undef"
7187 fi
7188 set d_msg
7189 eval $setvar
7190
7191 : see if this is a malloc.h system
7192 set malloc.h i_malloc
7193 eval $inhdr
7194
7195 : see if stdlib is available
7196 set stdlib.h i_stdlib
7197 eval $inhdr
7198
7199 : determine which malloc to compile in
7200 echo " "
7201 case "$usemymalloc" in
7202 ''|y*|true)     dflt='y' ;;
7203 n*|false)       dflt='n' ;;
7204 *)      dflt="$usemymalloc" ;;
7205 esac
7206 rp="Do you wish to attempt to use the malloc that comes with $package?"
7207 . ./myread
7208 usemymalloc="$ans"
7209 case "$ans" in
7210 y*|true)
7211         usemymalloc='y'
7212         mallocsrc='malloc.c'
7213         mallocobj="malloc$_o"
7214         d_mymalloc="$define"
7215         case "$libs" in
7216         *-lmalloc*)
7217                 : Remove malloc from list of libraries to use
7218                 echo "Removing unneeded -lmalloc from library list" >&4
7219                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
7220                 shift
7221                 libs="$*"
7222                 echo "libs = $libs" >&4
7223                 ;;
7224         esac
7225         ;;
7226 *)
7227         usemymalloc='n'
7228         mallocsrc=''
7229         mallocobj=''
7230         d_mymalloc="$undef"
7231         ;;
7232 esac
7233
7234 : compute the return types of malloc and free
7235 echo " "
7236 $cat >malloc.c <<END
7237 #$i_malloc I_MALLOC
7238 #$i_stdlib I_STDLIB
7239 #include <stdio.h>
7240 #include <sys/types.h>
7241 #ifdef I_MALLOC
7242 #include <malloc.h>
7243 #endif
7244 #ifdef I_STDLIB
7245 #include <stdlib.h>
7246 #endif
7247 #ifdef TRY_MALLOC
7248 void *malloc();
7249 #endif
7250 #ifdef TRY_FREE
7251 void free();
7252 #endif
7253 END
7254 case "$malloctype" in
7255 '')
7256         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
7257                 malloctype='void *'
7258         else
7259                 malloctype='char *'
7260         fi
7261         ;;
7262 esac
7263 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
7264
7265 case "$freetype" in
7266 '')
7267         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
7268                 freetype='void'
7269         else
7270                 freetype='int'
7271         fi
7272         ;;
7273 esac
7274 echo "Your system uses $freetype free(), it would seem." >&4
7275 $rm -f malloc.[co]
7276 : see if nice exists
7277 set nice d_nice
7278 eval $inlibc
7279
7280 : see if pause exists
7281 set pause d_pause
7282 eval $inlibc
7283
7284 : see if pipe exists
7285 set pipe d_pipe
7286 eval $inlibc
7287
7288 : see if poll exists
7289 set poll d_poll
7290 eval $inlibc
7291
7292
7293 : see whether the various POSIXish _yields exist within given cccmd
7294 $cat >try.c <<EOP
7295 #include <pthread.h>
7296 main() {
7297         YIELD();
7298         exit(0);
7299 }
7300 EOP
7301 : see if pthread_yield exists within given cccmd,
7302 : if we do not usethreads this may well end up undef.
7303 set try -DYIELD=pthread_yield
7304 if eval $compile; then
7305     val="$define"
7306     echo 'pthread_yield() found.' >&4
7307 else
7308     val="$undef"
7309     echo 'pthread_yield() NOT found.' >&4
7310 fi
7311 set d_pthread_yield
7312 eval $setvar
7313
7314 : see if sched_yield exists within given cccmd,
7315 : if we do not usethreads this may well end up undef.
7316 set try -DYIELD=sched_yield
7317 if eval $compile; then
7318     val="$define"
7319     echo 'sched_yield() found.' >&4
7320 else
7321     val="$undef"
7322     echo 'sched_yield() NOT found.' >&4
7323 fi
7324 set d_sched_yield
7325 eval $setvar
7326 $rm -f try try.*
7327
7328 : test whether pthreads are created in joinable -- aka undetached -- state
7329 if test "X$usethreads" = "X$define"; then
7330         echo $n "Checking whether pthreads are created joinable. $c" >&4 
7331         $cat >try.c <<'EOCP'
7332 #include <pthread.h>
7333 #include <stdio.h>
7334 int main() {
7335     pthread_attr_t attr;
7336     int detachstate;
7337     printf("%s\n",
7338         pthread_attr_init(&attr) == 0 &&
7339         pthread_attr_getdetachstate(&attr, &detachstate) == 0 &&
7340         detachstate == PTHREAD_CREATE_DETACHED ?
7341         "detached" : "joinable");
7342     exit(0);
7343 }
7344 EOCP
7345         set try
7346         if eval $compile; then
7347                 yyy=`./try`
7348                 case "$yyy" in
7349                         detached) echo "Nope, they aren't." >&4 ;;
7350                         *) echo "Yup, they are." >&4 ;;
7351                 esac
7352         else
7353                 echo " "
7354                 echo "(I can't execute the test program--assuming they are.)" >&4
7355                 yyy=joinable
7356         fi
7357         $rm -f try try.*
7358         case "$yyy" in
7359                 detached) val="$undef" ;;
7360                 *) val="$define" ;;
7361         esac
7362         set d_pthreads_created_joinable
7363         eval $setvar
7364 else
7365     d_pthreads_created_joinable="$undef"
7366 fi
7367
7368 : see if this is a pwd.h system
7369 set pwd.h i_pwd
7370 eval $inhdr
7371
7372 case "$i_pwd" in
7373 $define)
7374         xxx=`./findhdr pwd.h`
7375         $cppstdin $cppflags $cppminus < $xxx >$$.h
7376
7377         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
7378                 val="$define"
7379         else
7380                 val="$undef"
7381         fi
7382         set d_pwquota
7383         eval $setvar
7384
7385         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
7386                 val="$define"
7387         else
7388                 val="$undef"
7389         fi
7390         set d_pwage
7391         eval $setvar
7392
7393         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
7394                 val="$define"
7395         else
7396                 val="$undef"
7397         fi
7398         set d_pwchange
7399         eval $setvar
7400
7401         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
7402                 val="$define"
7403         else
7404                 val="$undef"
7405         fi
7406         set d_pwclass
7407         eval $setvar
7408
7409         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
7410                 val="$define"
7411         else
7412                 val="$undef"
7413         fi
7414         set d_pwexpire
7415         eval $setvar
7416
7417         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
7418                 val="$define"
7419         else
7420                 val="$undef"
7421         fi
7422         set d_pwcomment
7423         eval $setvar
7424
7425         $rm -f $$.h
7426         ;;
7427 *)
7428         val="$undef"; 
7429         set d_pwquota; eval $setvar
7430         set d_pwage; eval $setvar
7431         set d_pwchange; eval $setvar
7432         set d_pwclass; eval $setvar
7433         set d_pwexpire; eval $setvar
7434         set d_pwcomment; eval $setvar
7435         ;;
7436 esac
7437
7438 : see if readdir and friends exist
7439 set readdir d_readdir
7440 eval $inlibc
7441 set seekdir d_seekdir
7442 eval $inlibc
7443 set telldir d_telldir
7444 eval $inlibc
7445 set rewinddir d_rewinddir
7446 eval $inlibc
7447
7448 : see if readlink exists
7449 set readlink d_readlink
7450 eval $inlibc
7451
7452 : see if rename exists
7453 set rename d_rename
7454 eval $inlibc
7455
7456 : see if rmdir exists
7457 set rmdir d_rmdir
7458 eval $inlibc
7459
7460 : see if memory.h is available.
7461 val=''
7462 set memory.h val
7463 eval $inhdr
7464
7465 : See if it conflicts with string.h
7466 case "$val" in
7467 $define)
7468         case "$strings" in
7469         '') ;;
7470         *)
7471                 $cppstdin $cppflags $cppminus < $strings > mem.h
7472                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
7473                         echo " "
7474                         echo "We won't be including <memory.h>."
7475                         val="$undef"
7476                 fi
7477                 $rm -f mem.h
7478                 ;;
7479         esac
7480 esac
7481 set i_memory
7482 eval $setvar
7483
7484 : can bcopy handle overlapping blocks?
7485 val="$undef"
7486 case "$d_bcopy" in
7487 "$define")
7488         echo " "
7489         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
7490         $cat >try.c <<EOCP
7491 #$i_memory I_MEMORY
7492 #$i_stdlib I_STDLIB
7493 #$i_string I_STRING
7494 #$i_unistd I_UNISTD
7495 EOCP
7496         $cat >>try.c <<'EOCP'
7497 #include <stdio.h>
7498 #ifdef I_MEMORY
7499 #  include <memory.h>
7500 #endif
7501 #ifdef I_STDLIB
7502 #  include <stdlib.h>
7503 #endif
7504 #ifdef I_STRING
7505 #  include <string.h>
7506 #else
7507 #  include <strings.h>
7508 #endif
7509 #ifdef I_UNISTD
7510 #  include <unistd.h>  /* Needed for NetBSD */
7511 #endif
7512 main()
7513 {
7514 char buf[128], abc[128];
7515 char *b;
7516 int len;
7517 int off;
7518 int align;
7519
7520 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
7521
7522 for (align = 7; align >= 0; align--) {
7523         for (len = 36; len; len--) {
7524                 b = buf+align;
7525                 bcopy(abc, b, len);
7526                 for (off = 1; off <= len; off++) {
7527                         bcopy(b, b+off, len);
7528                         bcopy(b+off, b, len);
7529                         if (bcmp(b, abc, len))
7530                                 exit(1);
7531                 }
7532         }
7533 }
7534 exit(0);
7535 }
7536 EOCP
7537         set try
7538         if eval $compile; then
7539                 if ./try 2>/dev/null; then
7540                         echo "Yes, it can."
7541                         val="$define"
7542                 else
7543                         echo "It can't, sorry."
7544                         case "$d_memmove" in
7545                         "$define") echo "But that's Ok since you have memmove()." ;;
7546                         esac
7547                 fi
7548         else
7549                 echo "(I can't compile the test program, so we'll assume not...)"
7550                 case "$d_memmove" in
7551                 "$define") echo "But that's Ok since you have memmove()." ;;
7552                 esac
7553         fi
7554         ;;
7555 esac
7556 $rm -f try.* try core
7557 set d_safebcpy
7558 eval $setvar
7559
7560 : can memcpy handle overlapping blocks?
7561 val="$undef"
7562 case "$d_memcpy" in
7563 "$define")
7564         echo " "
7565         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
7566         $cat >try.c <<EOCP
7567 #$i_memory I_MEMORY
7568 #$i_stdlib I_STDLIB
7569 #$i_string I_STRING
7570 #$i_unistd I_UNISTD
7571 EOCP
7572         $cat >>try.c <<'EOCP'
7573 #include <stdio.h>
7574 #ifdef I_MEMORY
7575 #  include <memory.h>
7576 #endif
7577 #ifdef I_STDLIB
7578 #  include <stdlib.h>
7579 #endif
7580 #ifdef I_STRING
7581 #  include <string.h>
7582 #else
7583 #  include <strings.h>
7584 #endif
7585 #ifdef I_UNISTD
7586 #  include <unistd.h>  /* Needed for NetBSD */
7587 #endif
7588 main()
7589 {
7590 char buf[128], abc[128];
7591 char *b;
7592 int len;
7593 int off;
7594 int align;
7595
7596 /* Copy "abcde..." string to char abc[] so that gcc doesn't
7597    try to store the string in read-only memory. */
7598 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
7599
7600 for (align = 7; align >= 0; align--) {
7601         for (len = 36; len; len--) {
7602                 b = buf+align;
7603                 memcpy(b, abc, len);
7604                 for (off = 1; off <= len; off++) {
7605                         memcpy(b+off, b, len);
7606                         memcpy(b, b+off, len);
7607                         if (memcmp(b, abc, len))
7608                                 exit(1);
7609                 }
7610         }
7611 }
7612 exit(0);
7613 }
7614 EOCP
7615         set try
7616         if eval $compile; then
7617                 if ./try 2>/dev/null; then
7618                         echo "Yes, it can."
7619                         val="$define"
7620                 else
7621                         echo "It can't, sorry."
7622                         case "$d_memmove" in
7623                         "$define") echo "But that's Ok since you have memmove()." ;;
7624                         esac
7625                 fi
7626         else
7627                 echo "(I can't compile the test program, so we'll assume not...)"
7628                 case "$d_memmove" in
7629                 "$define") echo "But that's Ok since you have memmove()." ;;
7630                 esac
7631         fi
7632         ;;
7633 esac
7634 $rm -f try.* try core
7635 set d_safemcpy
7636 eval $setvar
7637
7638 : can memcmp be trusted to compare relative magnitude?
7639 val="$undef"
7640 case "$d_memcmp" in
7641 "$define")
7642         echo " "
7643         echo "Checking if your memcmp() can compare relative magnitude..." >&4
7644         $cat >try.c <<EOCP
7645 #$i_memory I_MEMORY
7646 #$i_stdlib I_STDLIB
7647 #$i_string I_STRING
7648 #$i_unistd I_UNISTD
7649 EOCP
7650         $cat >>try.c <<'EOCP'
7651 #include <stdio.h>
7652 #ifdef I_MEMORY
7653 #  include <memory.h>
7654 #endif
7655 #ifdef I_STDLIB
7656 #  include <stdlib.h>
7657 #endif
7658 #ifdef I_STRING
7659 #  include <string.h>
7660 #else
7661 #  include <strings.h>
7662 #endif
7663 #ifdef I_UNISTD
7664 #  include <unistd.h>  /* Needed for NetBSD */
7665 #endif
7666 main()
7667 {
7668 char a = -1;
7669 char b = 0;
7670 if ((a < b) && memcmp(&a, &b, 1) < 0)
7671         exit(1);
7672 exit(0);
7673 }
7674 EOCP
7675         set try
7676         if eval $compile; then
7677                 if ./try 2>/dev/null; then
7678                         echo "Yes, it can."
7679                         val="$define"
7680                 else
7681                         echo "No, it can't (it uses signed chars)."
7682                 fi
7683         else
7684                 echo "(I can't compile the test program, so we'll assume not...)"
7685         fi
7686         ;;
7687 esac
7688 $rm -f try.* try core
7689 set d_sanemcmp
7690 eval $setvar
7691
7692 : see if select exists
7693 set select d_select
7694 eval $inlibc
7695
7696 : see if semctl exists
7697 set semctl d_semctl
7698 eval $inlibc
7699
7700 : see if semget exists
7701 set semget d_semget
7702 eval $inlibc
7703
7704 : see if semop exists
7705 set semop d_semop
7706 eval $inlibc
7707
7708 : see how much of the 'sem*(2)' library is present.
7709 h_sem=true
7710 echo " "
7711 case "$d_semctl$d_semget$d_semop" in
7712 *"$undef"*) h_sem=false;;
7713 esac
7714 : we could also check for sys/ipc.h ...
7715 if $h_sem && $test `./findhdr sys/sem.h`; then
7716         echo "You have the full sem*(2) library." >&4
7717         val="$define"
7718 else
7719         echo "You don't have the full sem*(2) library." >&4
7720         val="$undef"
7721 fi
7722 set d_sem
7723 eval $setvar
7724
7725 : see if setegid exists
7726 set setegid d_setegid
7727 eval $inlibc
7728
7729 : see if seteuid exists
7730 set seteuid d_seteuid
7731 eval $inlibc
7732
7733 : see if sethostent exists
7734 set sethostent d_sethent
7735 eval $inlibc
7736
7737 : see if setlinebuf exists
7738 set setlinebuf d_setlinebuf
7739 eval $inlibc
7740
7741 : see if setlocale exists
7742 set setlocale d_setlocale
7743 eval $inlibc
7744
7745 : see if setnetent exists
7746 set setnetent d_setnent
7747 eval $inlibc
7748
7749 : see if setprotoent exists
7750 set setprotoent d_setpent
7751 eval $inlibc
7752
7753 : see if setpgid exists
7754 set setpgid d_setpgid
7755 eval $inlibc
7756
7757 : see if setpgrp2 exists
7758 set setpgrp2 d_setpgrp2
7759 eval $inlibc
7760
7761 : see if setpriority exists
7762 set setpriority d_setprior
7763 eval $inlibc
7764
7765 : see if setregid exists
7766 set setregid d_setregid
7767 eval $inlibc
7768 set setresgid d_setresgid
7769 eval $inlibc
7770
7771 : see if setreuid exists
7772 set setreuid d_setreuid
7773 eval $inlibc
7774 set setresuid d_setresuid
7775 eval $inlibc
7776
7777 : see if setrgid exists
7778 set setrgid d_setrgid
7779 eval $inlibc
7780
7781 : see if setruid exists
7782 set setruid d_setruid
7783 eval $inlibc
7784
7785 : see if setservent exists
7786 set setservent d_setsent
7787 eval $inlibc
7788
7789 : see if setsid exists
7790 set setsid d_setsid
7791 eval $inlibc
7792
7793 : see if setvbuf exists
7794 set setvbuf d_setvbuf
7795 eval $inlibc
7796
7797 : see if sfio.h is available
7798 set sfio.h i_sfio
7799 eval $inhdr
7800
7801
7802 : see if sfio library is available
7803 case "$i_sfio" in
7804 $define)
7805         val=''
7806         set sfreserve val
7807         eval $inlibc
7808         ;;
7809 *)
7810         val="$undef"
7811         ;;
7812 esac
7813 : Ok, but do we want to use it.
7814 case "$val" in
7815 $define)
7816         case "$usesfio" in
7817         true|$define|[yY]*) dflt='y';;
7818         *) dflt='n';;
7819         esac
7820         echo "$package can use the sfio library, but it is experimental."
7821         rp="You seem to have sfio available, do you want to try using it?"
7822         . ./myread
7823         case "$ans" in
7824         y|Y) ;;
7825         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
7826                 val="$undef"
7827                 : Remove sfio from list of libraries to use
7828                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
7829                 shift
7830                 libs="$*"
7831                 echo "libs = $libs" >&4
7832                 ;;
7833         esac
7834         ;;
7835 *)      case "$usesfio" in
7836         true|$define|[yY]*)
7837                 echo "Sorry, cannot find sfio on this machine" >&4
7838                 echo "Ignoring your setting of usesfio=$usesfio" >&4
7839                 ;;
7840         esac
7841         ;;
7842 esac
7843 set d_sfio
7844 eval $setvar
7845 case "$d_sfio" in
7846 $define) usesfio='true';;
7847 *) usesfio='false';;
7848 esac
7849
7850 : see if shmctl exists
7851 set shmctl d_shmctl
7852 eval $inlibc
7853
7854 : see if shmget exists
7855 set shmget d_shmget
7856 eval $inlibc
7857
7858 : see if shmat exists
7859 set shmat d_shmat
7860 eval $inlibc
7861 : see what shmat returns
7862 case "$d_shmat" in
7863 "$define")
7864         $cat >shmat.c <<'END'
7865 #include <sys/shm.h>
7866 void *shmat();
7867 END
7868         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
7869                 shmattype='void *'
7870         else
7871                 shmattype='char *'
7872         fi
7873         echo "and it returns ($shmattype)." >&4
7874         : see if a prototype for shmat is available
7875         xxx=`./findhdr sys/shm.h`
7876         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
7877         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
7878                 val="$define"
7879         else
7880                 val="$undef"
7881         fi
7882         $rm -f shmat.[co]
7883         ;;
7884 *)
7885         val="$undef"
7886         ;;
7887 esac
7888 set d_shmatprototype
7889 eval $setvar
7890
7891 : see if shmdt exists
7892 set shmdt d_shmdt
7893 eval $inlibc
7894
7895 : see how much of the 'shm*(2)' library is present.
7896 h_shm=true
7897 echo " "
7898 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
7899 *"$undef"*) h_shm=false;;
7900 esac
7901 : we could also check for sys/ipc.h ...
7902 if $h_shm && $test `./findhdr sys/shm.h`; then
7903         echo "You have the full shm*(2) library." >&4
7904         val="$define"
7905 else
7906         echo "You don't have the full shm*(2) library." >&4
7907         val="$undef"
7908 fi
7909 set d_shm
7910 eval $setvar
7911
7912 echo " "
7913 : see if we have sigaction
7914 if set sigaction val -f d_sigaction; eval $csym; $val; then
7915         echo 'sigaction() found.' >&4
7916         val="$define"
7917 else
7918         echo 'sigaction NOT found.' >&4
7919         val="$undef"
7920 fi
7921 $cat > try.c <<'EOP'
7922 #include <stdio.h>
7923 #include <sys/types.h>
7924 #include <signal.h>
7925 main()
7926 {
7927     struct sigaction act, oact;
7928 }
7929 EOP
7930 set try
7931 if eval $compile; then
7932         :
7933 else
7934         echo "But you don't seem to have a useable struct sigaction." >&4
7935         val="$undef"
7936 fi
7937 set d_sigaction; eval $setvar
7938 $rm -f try try$_o try.c
7939
7940 : see if sigsetjmp exists
7941 echo " "
7942 case "$d_sigsetjmp" in
7943 '')
7944         $cat >try.c <<'EOP'
7945 #include <setjmp.h>
7946 sigjmp_buf env;
7947 int set = 1;
7948 main()
7949 {
7950         if (sigsetjmp(env,1))
7951                 exit(set);
7952         set = 0;
7953         siglongjmp(env, 1);
7954         exit(1);
7955 }
7956 EOP
7957         set try
7958         if eval $compile; then
7959                 if ./try >/dev/null 2>&1; then
7960                         echo "POSIX sigsetjmp found." >&4
7961                         val="$define"
7962                 else
7963                         $cat >&4 <<EOM
7964 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
7965 I'll ignore them.
7966 EOM
7967                         val="$undef"
7968                 fi
7969         else
7970                 echo "sigsetjmp not found." >&4
7971                 val="$undef"
7972         fi
7973         ;;
7974 *) val="$d_sigsetjmp"
7975         case "$d_sigsetjmp" in
7976         $define) echo "POSIX sigsetjmp found." >&4;;
7977         $undef) echo "sigsetjmp not found." >&4;;
7978         esac
7979         ;;
7980 esac
7981 set d_sigsetjmp
7982 eval $setvar
7983 $rm -f try.c try
7984
7985 socketlib=''
7986 sockethdr=''
7987 : see whether socket exists
7988 echo " "
7989 $echo $n "Hmm... $c" >&4
7990 if set socket val -f d_socket; eval $csym; $val; then
7991         echo "Looks like you have Berkeley networking support." >&4
7992         d_socket="$define"
7993         if set setsockopt val -f; eval $csym; $val; then
7994                 d_oldsock="$undef"
7995         else
7996                 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
7997                 d_oldsock="$define"
7998         fi
7999 else
8000         if $contains socklib libc.list >/dev/null 2>&1; then
8001                 echo "Looks like you have Berkeley networking support." >&4
8002                 d_socket="$define"
8003                 : we will have to assume that it supports the 4.2 BSD interface
8004                 d_oldsock="$undef"
8005         else
8006                 echo "You don't have Berkeley networking in libc$_a..." >&4
8007                 if test -f /usr/lib/libnet$_a; then
8008                         ( (nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) ||  \
8009                         ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list
8010                         if $contains socket libc.list >/dev/null 2>&1; then
8011                         echo "...but the Wollongong group seems to have hacked it in." >&4
8012                                 socketlib="-lnet"
8013                                 sockethdr="-I/usr/netinclude"
8014                                 d_socket="$define"
8015                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8016                                         d_oldsock="$undef"
8017                                 else
8018                                         echo "...using the old 4.1c interface, rather than 4.2" >&4
8019                                         d_oldsock="$define"
8020                                 fi
8021                         else
8022                                 echo "or even in libnet$_a, which is peculiar." >&4
8023                                 d_socket="$undef"
8024                                 d_oldsock="$undef"
8025                         fi
8026                 else
8027                         echo "or anywhere else I see." >&4
8028                         d_socket="$undef"
8029                         d_oldsock="$undef"
8030                 fi
8031         fi
8032 fi
8033
8034 : see if socketpair exists
8035 set socketpair d_sockpair
8036 eval $inlibc
8037
8038 : see if stat knows about block sizes
8039 echo " "
8040 xxx=`./findhdr sys/stat.h`
8041 if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
8042         if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
8043                 echo "Your stat() knows about block sizes." >&4
8044                 val="$define"
8045         else
8046                 echo "Your stat() doesn't know about block sizes." >&4
8047                 val="$undef"
8048         fi
8049 else
8050         echo "Your stat() doesn't know about block sizes." >&4
8051         val="$undef"
8052 fi
8053 set d_statblks
8054 eval $setvar
8055
8056 : see if _ptr and _cnt from stdio act std
8057 echo " "
8058 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
8059         echo "(Looks like you have stdio.h from Linux.)"
8060         case "$stdio_ptr" in
8061         '') stdio_ptr='((fp)->_IO_read_ptr)'
8062                 ptr_lval=$define
8063                 ;;
8064         *)      ptr_lval=$d_stdio_ptr_lval;;
8065         esac
8066         case "$stdio_cnt" in
8067         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
8068                 cnt_lval=$undef
8069                 ;;
8070         *)      cnt_lval=$d_stdio_cnt_lval;;
8071         esac
8072         case "$stdio_base" in
8073         '') stdio_base='((fp)->_IO_read_base)';;
8074         esac
8075         case "$stdio_bufsiz" in
8076         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
8077         esac
8078 else
8079         case "$stdio_ptr" in
8080         '') stdio_ptr='((fp)->_ptr)'
8081                 ptr_lval=$define
8082                 ;;
8083         *)      ptr_lval=$d_stdio_ptr_lval;;
8084         esac
8085         case "$stdio_cnt" in
8086         '') stdio_cnt='((fp)->_cnt)'
8087                 cnt_lval=$define
8088                 ;;
8089         *)      cnt_lval=$d_stdio_cnt_lval;;
8090         esac
8091         case "$stdio_base" in
8092         '') stdio_base='((fp)->_base)';;
8093         esac
8094         case "$stdio_bufsiz" in
8095         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
8096         esac
8097 fi
8098 : test whether _ptr and _cnt really work
8099 echo "Checking how std your stdio is..." >&4
8100 $cat >try.c <<EOP
8101 #include <stdio.h>
8102 #define FILE_ptr(fp)    $stdio_ptr
8103 #define FILE_cnt(fp)    $stdio_cnt
8104 main() {
8105         FILE *fp = fopen("try.c", "r");
8106         char c = getc(fp);
8107         if (
8108                 18 <= FILE_cnt(fp) &&
8109                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
8110         )
8111                 exit(0);
8112         exit(1);
8113 }
8114 EOP
8115 val="$undef"
8116 set try
8117 if eval $compile; then
8118         if ./try; then
8119                 echo "Your stdio acts pretty std."
8120                 val="$define"
8121         else
8122                 echo "Your stdio isn't very std."
8123         fi
8124 else
8125         echo "Your stdio doesn't appear very std."
8126 fi
8127 $rm -f try.c try
8128 set d_stdstdio
8129 eval $setvar
8130
8131 : Can _ptr be used as an lvalue?
8132 case "$d_stdstdio$ptr_lval" in
8133 $define$define) val=$define ;;
8134 *) val=$undef ;;
8135 esac
8136 set d_stdio_ptr_lval
8137 eval $setvar
8138
8139 : Can _cnt be used as an lvalue?
8140 case "$d_stdstdio$cnt_lval" in
8141 $define$define) val=$define ;;
8142 *) val=$undef ;;
8143 esac
8144 set d_stdio_cnt_lval
8145 eval $setvar
8146
8147 : see if _base is also standard
8148 val="$undef"
8149 case "$d_stdstdio" in
8150 $define)
8151         $cat >try.c <<EOP
8152 #include <stdio.h>
8153 #define FILE_base(fp)   $stdio_base
8154 #define FILE_bufsiz(fp) $stdio_bufsiz
8155 main() {
8156         FILE *fp = fopen("try.c", "r");
8157         char c = getc(fp);
8158         if (
8159                 19 <= FILE_bufsiz(fp) &&
8160                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
8161         )
8162                 exit(0);
8163         exit(1);
8164 }
8165 EOP
8166         set try
8167         if eval $compile; then
8168                 if ./try; then
8169                         echo "And its _base field acts std."
8170                         val="$define"
8171                 else
8172                         echo "But its _base field isn't std."
8173                 fi
8174         else
8175                 echo "However, it seems to be lacking the _base field."
8176         fi
8177         $rm -f try.c try
8178         ;;
8179 esac
8180 set d_stdiobase
8181 eval $setvar
8182
8183 : see if strcoll exists
8184 set strcoll d_strcoll
8185 eval $inlibc
8186
8187 : check for structure copying
8188 echo " "
8189 echo "Checking to see if your C compiler can copy structs..." >&4
8190 $cat >try.c <<'EOCP'
8191 main()
8192 {
8193         struct blurfl {
8194                 int dyick;
8195         } foo, bar;
8196
8197         foo = bar;
8198 }
8199 EOCP
8200 if $cc -c try.c >/dev/null 2>&1 ; then
8201         val="$define"
8202         echo "Yup, it can."
8203 else
8204         val="$undef"
8205         echo "Nope, it can't."
8206 fi
8207 set d_strctcpy
8208 eval $setvar
8209 $rm -f try.*
8210
8211 : see if strerror and/or sys_errlist[] exist
8212 echo " "
8213 if set strerror val -f d_strerror; eval $csym; $val; then
8214         echo 'strerror() found.' >&4
8215         d_strerror="$define"
8216         d_strerrm='strerror(e)'
8217         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
8218                 echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
8219                 d_syserrlst="$define"
8220         else
8221         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
8222                 d_syserrlst="$undef"
8223         fi
8224 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
8225         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
8226         echo 'strerror() found in string header.' >&4
8227         d_strerror="$define"
8228         d_strerrm='strerror(e)'
8229         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
8230                 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
8231                 d_syserrlst="$define"
8232         else
8233                 echo "(You don't appear to have any sys_errlist[], how can this be?)"
8234                 d_syserrlst="$undef"
8235         fi
8236 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
8237 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
8238         d_strerror="$undef"
8239         d_syserrlst="$define"
8240         d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
8241 else
8242         echo 'strerror() and sys_errlist[] NOT found.' >&4
8243         d_strerror="$undef"
8244         d_syserrlst="$undef"
8245         d_strerrm='"unknown"'
8246 fi
8247
8248 : see if strtod exists
8249 set strtod d_strtod
8250 eval $inlibc
8251
8252 : see if strtol exists
8253 set strtol d_strtol
8254 eval $inlibc
8255
8256 : see if strtoul exists
8257 set strtoul d_strtoul
8258 eval $inlibc
8259
8260 : see if strxfrm exists
8261 set strxfrm d_strxfrm
8262 eval $inlibc
8263
8264 : see if symlink exists
8265 set symlink d_symlink
8266 eval $inlibc
8267
8268 : see if syscall exists
8269 set syscall d_syscall
8270 eval $inlibc
8271
8272 : see if sysconf exists
8273 set sysconf d_sysconf
8274 eval $inlibc
8275
8276 : see if system exists
8277 set system d_system
8278 eval $inlibc
8279
8280 : see if tcgetpgrp exists
8281 set tcgetpgrp d_tcgetpgrp
8282 eval $inlibc
8283
8284 : see if tcsetpgrp exists
8285 set tcsetpgrp d_tcsetpgrp
8286 eval $inlibc
8287
8288 : define an is-a-typedef? function
8289 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8290 case "$inclist" in
8291 "") inclist="sys/types.h";;
8292 esac;
8293 eval "varval=\$$var";
8294 case "$varval" in
8295 "")
8296         $rm -f temp.c;
8297         for inc in $inclist; do
8298                 echo "#include <$inc>" >>temp.c;
8299         done;
8300         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8301         if $contains $type temp.E >/dev/null 2>&1; then
8302                 eval "$var=\$type";
8303         else
8304                 eval "$var=\$def";
8305         fi;
8306         $rm -f temp.?;;
8307 *) eval "$var=\$varval";;
8308 esac'
8309
8310 : see if this is a sys/times.h system
8311 set sys/times.h i_systimes
8312 eval $inhdr
8313
8314 : see if times exists
8315 echo " "
8316 if set times val -f d_times; eval $csym; $val; then
8317         echo 'times() found.' >&4
8318         d_times="$define"
8319         inc=''
8320         case "$i_systimes" in
8321         "$define") inc='sys/times.h';;
8322         esac
8323         set clock_t clocktype long stdio.h sys/types.h $inc
8324         eval $typedef
8325         dflt="$clocktype"
8326         echo " "
8327         rp="What type is returned by times() on this system?"
8328         . ./myread
8329         clocktype="$ans"
8330 else
8331         echo 'times() NOT found, hope that will do.' >&4
8332         d_times="$undef"
8333         clocktype='int'
8334 fi
8335
8336 : see if truncate exists
8337 set truncate d_truncate
8338 eval $inlibc
8339
8340 : see if tzname[] exists
8341 echo " "
8342 if set tzname val -a d_tzname; eval $csym; $val; then
8343         val="$define"
8344         echo 'tzname[] found.' >&4
8345 else
8346         val="$undef"
8347         echo 'tzname[] NOT found.' >&4
8348 fi
8349 set d_tzname
8350 eval $setvar
8351
8352 : see if umask exists
8353 set umask d_umask
8354 eval $inlibc
8355
8356 : see how we will look up host name
8357 echo " "
8358 if false; then
8359         : dummy stub to allow use of elif
8360 elif set uname val -f d_uname; eval $csym; $val; then
8361         if ./xenix; then
8362                 $cat <<'EOM'
8363 uname() was found, but you're running xenix, and older versions of xenix
8364 have a broken uname(). If you don't really know whether your xenix is old
8365 enough to have a broken system call, use the default answer.
8366
8367 EOM
8368                 dflt=y
8369                 case "$d_uname" in
8370                 "$define") dflt=n;;
8371                 esac
8372                 rp='Is your uname() broken?'
8373                 . ./myread
8374                 case "$ans" in
8375                 n*) d_uname="$define"; call=uname;;
8376                 esac
8377         else
8378                 echo 'uname() found.' >&4
8379                 d_uname="$define"
8380                 call=uname
8381         fi
8382 fi
8383 case "$d_gethname" in
8384 '') d_gethname="$undef";;
8385 esac
8386 case "$d_uname" in
8387 '') d_uname="$undef";;
8388 esac
8389 case "$d_phostname" in
8390 '') d_phostname="$undef";;
8391 esac
8392
8393 : backward compatibility for d_hvfork
8394 if test X$d_hvfork != X; then
8395         d_vfork="$d_hvfork"
8396         d_hvfork=''
8397 fi
8398 : see if there is a vfork
8399 val=''
8400 set vfork val
8401 eval $inlibc
8402
8403 : Ok, but do we want to use it. vfork is reportedly unreliable in 
8404 : perl on Solaris 2.x, and probably elsewhere.
8405 case "$val" in
8406 $define)
8407         echo " "
8408         case "$usevfork" in
8409         false) dflt='n';;
8410         *) dflt='y';;
8411         esac
8412         rp="Some systems have problems with vfork().  Do you want to use it?"
8413         . ./myread
8414         case "$ans" in
8415         y|Y) ;;
8416         *)
8417                 echo "Ok, we won't use vfork()."
8418                 val="$undef"
8419                 ;;
8420         esac
8421         ;;
8422 esac
8423 set d_vfork
8424 eval $setvar
8425 case "$d_vfork" in
8426 $define) usevfork='true';;
8427 *) usevfork='false';;
8428 esac
8429
8430 : see if this is an sysdir system
8431 set sys/dir.h i_sysdir
8432 eval $inhdr
8433
8434 : see if this is an sysndir system
8435 set sys/ndir.h i_sysndir
8436 eval $inhdr
8437
8438 : see if closedir exists
8439 set closedir d_closedir
8440 eval $inlibc
8441
8442 case "$d_closedir" in
8443 "$define")
8444         echo " "
8445         echo "Checking whether closedir() returns a status..." >&4
8446         cat > closedir.c <<EOM
8447 #$i_dirent I_DIRENT             /**/
8448 #$i_sysdir I_SYS_DIR            /**/
8449 #$i_sysndir I_SYS_NDIR          /**/
8450
8451 #if defined(I_DIRENT)
8452 #include <dirent.h>
8453 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
8454 #include <sys/dir.h>
8455 #endif
8456 #else
8457 #ifdef I_SYS_NDIR
8458 #include <sys/ndir.h>
8459 #else
8460 #ifdef I_SYS_DIR
8461 #ifdef hp9000s500
8462 #include <ndir.h>       /* may be wrong in the future */
8463 #else
8464 #include <sys/dir.h>
8465 #endif
8466 #endif
8467 #endif
8468 #endif 
8469 int main() { return closedir(opendir(".")); }
8470 EOM
8471         set closedir
8472         if eval $compile; then
8473                 if ./closedir > /dev/null 2>&1 ; then
8474                         echo "Yes, it does."
8475                         val="$undef"
8476                 else
8477                         echo "No, it doesn't."
8478                         val="$define"
8479                 fi
8480         else
8481                 echo "(I can't seem to compile the test program--assuming it doesn't)"
8482                 val="$define"
8483         fi
8484         ;;
8485 *)
8486         val="$undef";
8487         ;;
8488 esac
8489 set d_void_closedir
8490 eval $setvar
8491 $rm -f closedir*
8492 : check for volatile keyword
8493 echo " "
8494 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
8495 $cat >try.c <<'EOCP'
8496 main()
8497 {
8498         typedef struct _goo_struct goo_struct;
8499         goo_struct * volatile goo = ((goo_struct *)0);
8500         struct _goo_struct {
8501                 long long_int;
8502                 int reg_int;
8503                 char char_var;
8504         };
8505         typedef unsigned short foo_t;
8506         char *volatile foo;
8507         volatile int bar;
8508         volatile foo_t blech;
8509         foo = foo;
8510 }
8511 EOCP
8512 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
8513         val="$define"
8514         echo "Yup, it does."
8515 else
8516         val="$undef"
8517         echo "Nope, it doesn't."
8518 fi
8519 set d_volatile
8520 eval $setvar
8521 $rm -f try.*
8522
8523 : see if there is a wait4
8524 set wait4 d_wait4
8525 eval $inlibc
8526
8527 : see if waitpid exists
8528 set waitpid d_waitpid
8529 eval $inlibc
8530
8531 : see if wcstombs exists
8532 set wcstombs d_wcstombs
8533 eval $inlibc
8534
8535 : see if wctomb exists
8536 set wctomb d_wctomb
8537 eval $inlibc
8538
8539 : preserve RCS keywords in files with variable substitution, grrr
8540 Date='$Date'
8541 Id='$Id'
8542 Log='$Log'
8543 RCSfile='$RCSfile'
8544 Revision='$Revision'
8545
8546 : check for alignment requirements
8547 echo " "
8548 case "$alignbytes" in
8549 '') echo "Checking alignment constraints..." >&4
8550         $cat >try.c <<'EOCP'
8551 struct foobar {
8552         char foo;
8553         double bar;
8554 } try;
8555 main()
8556 {
8557         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
8558 }
8559 EOCP
8560         set try
8561         if eval $compile; then
8562                 dflt=`./try`
8563         else
8564                 dflt='8'
8565                 echo "(I can't seem to compile the test program...)"
8566         fi
8567         ;;
8568 *) dflt="$alignbytes"
8569         ;;
8570 esac
8571 rp="Doubles must be aligned on a how-many-byte boundary?"
8572 . ./myread
8573 alignbytes="$ans"
8574 $rm -f try.c try
8575
8576 : check for ordering of bytes in a long
8577 case "$byteorder" in
8578 '')
8579         $cat <<'EOM'
8580   
8581 In the following, larger digits indicate more significance.  A big-endian
8582 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
8583 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
8584 machines may have weird orders like 3412.  A Cray will report 87654321. If
8585 the test program works the default is probably right.
8586 I'm now running the test program...
8587 EOM
8588         $cat >try.c <<'EOCP'
8589 #include <stdio.h>
8590 main()
8591 {
8592         int i;
8593         union {
8594                 unsigned long l;
8595                 char c[sizeof(long)];
8596         } u;
8597
8598         if (sizeof(long) > 4)
8599                 u.l = (0x08070605L << 32) | 0x04030201L;
8600         else
8601                 u.l = 0x04030201L;
8602         for (i = 0; i < sizeof(long); i++)
8603                 printf("%c", u.c[i]+'0');
8604         printf("\n");
8605         exit(0);
8606 }
8607 EOCP
8608         xxx_prompt=y
8609         set try
8610         if eval $compile && ./try > /dev/null; then
8611                 dflt=`./try`
8612                 case "$dflt" in
8613                 [1-4][1-4][1-4][1-4]|12345678|87654321)
8614                         echo "(The test program ran ok.)"
8615                         echo "byteorder=$dflt"
8616                         xxx_prompt=n
8617                         ;;
8618                 ????|????????) echo "(The test program ran ok.)" ;;
8619                 *) echo "(The test program didn't run right for some reason.)" ;;
8620                 esac
8621         else
8622                 dflt='4321'
8623                 cat <<'EOM'
8624 (I can't seem to compile the test program.  Guessing big-endian...)
8625 EOM
8626         fi
8627         case "$xxx_prompt" in
8628         y)
8629                 rp="What is the order of bytes in a long?"
8630                 . ./myread
8631                 byteorder="$ans"
8632                 ;;
8633         *)      byteorder=$dflt
8634                 ;;
8635         esac
8636         ;;
8637 esac
8638 $rm -f try.c try
8639
8640 : how do we catenate cpp tokens here?
8641 echo " "
8642 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
8643 $cat >cpp_stuff.c <<'EOCP'
8644 #define RCAT(a,b)a/**/b
8645 #define ACAT(a,b)a ## b
8646 RCAT(Rei,ser)
8647 ACAT(Cir,cus)
8648 EOCP
8649 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
8650 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
8651         echo "Oh!  Smells like ANSI's been here." >&4
8652         echo "We can catify or stringify, separately or together!"
8653         cpp_stuff=42
8654 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
8655         echo "Ah, yes!  The good old days!" >&4
8656         echo "However, in the good old days we don't know how to stringify and"
8657         echo "catify at the same time."
8658         cpp_stuff=1
8659 else
8660         $cat >&4 <<EOM
8661 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
8662 to have to edit the values of CAT[2-5] in config.h...
8663 EOM
8664         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
8665 fi
8666 $rm -f cpp_stuff.*
8667
8668 : see if this is a db.h system
8669 set db.h i_db
8670 eval $inhdr
8671
8672 case "$i_db" in
8673 define)
8674         : Check the return type needed for hash 
8675         echo " "
8676         echo "Checking return type needed for hash for Berkeley DB ..." >&4
8677         $cat >try.c <<EOCP
8678 #$d_const HASCONST
8679 #ifndef HASCONST
8680 #define const
8681 #endif
8682 #include <sys/types.h>
8683 #include <db.h>
8684
8685 #ifndef DB_VERSION_MAJOR
8686 u_int32_t hash_cb (ptr, size)
8687 const void *ptr;
8688 size_t size;
8689 {
8690 }
8691 HASHINFO info;
8692 main()
8693 {
8694         info.hash = hash_cb;
8695 }
8696 #endif
8697 EOCP
8698         if $cc $ccflags -c try.c >try.out 2>&1 ; then
8699                 if $contains warning try.out >>/dev/null 2>&1 ; then
8700                         db_hashtype='int'
8701                 else
8702                         db_hashtype='u_int32_t'
8703                 fi
8704         else
8705                 : XXX Maybe we should just give up here.
8706                 db_hashtype=u_int32_t
8707                 echo "Help:  I can't seem to compile the db test program." >&4
8708                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
8709         fi
8710         $rm -f try.*
8711         echo "Your version of Berkeley DB uses $db_hashtype for hash."
8712         ;;
8713 *)      db_hashtype=u_int32_t
8714         ;;
8715 esac
8716
8717 case "$i_db" in
8718 $define)
8719         : Check db version.
8720         echo " "
8721         echo "Checking Berkeley DB version ..." >&4
8722         $cat >try.c <<EOCP
8723 #$d_const HASCONST
8724 #ifndef HASCONST
8725 #define const
8726 #endif
8727 #include <sys/types.h>
8728 #include <stdio.h>
8729 #include <db.h>
8730 main()
8731 {
8732 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
8733     int Major, Minor, Patch ;
8734     unsigned long Version ;
8735     (void)db_version(&Major, &Minor, &Patch) ;
8736     printf("You have Berkeley DB Version 2 or greater\n");
8737
8738     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
8739                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
8740     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
8741                 Major, Minor, Patch) ;
8742
8743     /* check that db.h & libdb are compatible */
8744     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
8745         printf("db.h and libdb are incompatible\n") ;
8746         exit(3);        
8747     }
8748
8749     printf("db.h and libdb are compatible\n") ;
8750
8751     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
8752                 + DB_VERSION_PATCH ;
8753
8754     /* needs to be >= 2.3.4 */
8755     if (Version < 2003004) {
8756     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
8757         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
8758         exit(2);        
8759     }
8760
8761     exit(0);
8762 #else
8763 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
8764     printf("You have Berkeley DB Version 1\n");
8765     exit(0);    /* DB version < 2: the coast is clear. */
8766 #else
8767     exit(1);    /* <db.h> not Berkeley DB? */
8768 #endif
8769 #endif
8770 }
8771 EOCP
8772         set try
8773         if eval $compile && ./try; then
8774                 echo 'Looks OK.' >&4
8775         else
8776                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
8777                 i_db=$undef
8778                 case " $libs " in
8779                 *"-ldb "*)
8780                         : Remove db from list of libraries to use
8781                         echo "Removing unusable -ldb from library list" >&4
8782                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
8783                         shift
8784                         libs="$*"
8785                         echo "libs = $libs" >&4
8786                         ;;
8787                 esac
8788         fi
8789         $rm -f try.*
8790         ;;
8791 esac
8792
8793 case "$i_db" in
8794 define)
8795         : Check the return type needed for prefix 
8796         echo " "
8797         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
8798         cat >try.c <<EOCP
8799 #$d_const HASCONST
8800 #ifndef HASCONST
8801 #define const
8802 #endif
8803 #include <sys/types.h>
8804 #include <db.h>
8805
8806 #ifndef DB_VERSION_MAJOR
8807 size_t prefix_cb (key1, key2)
8808 const DBT *key1;
8809 const DBT *key2;
8810 {
8811 }
8812 BTREEINFO info;
8813 main()
8814 {
8815         info.prefix = prefix_cb;
8816 }
8817 #endif
8818 EOCP
8819         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
8820                 if $contains warning try.out >>/dev/null 2>&1 ; then
8821                         db_prefixtype='int'
8822                 else
8823                         db_prefixtype='size_t'
8824                 fi
8825         else
8826                 db_prefixtype='size_t'
8827                 : XXX Maybe we should just give up here.
8828                 echo "Help:  I can't seem to compile the db test program." >&4
8829                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
8830         fi
8831         $rm -f try.*
8832         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
8833         ;;
8834 *)      db_prefixtype='size_t'
8835         ;;
8836 esac
8837
8838 : check for void type
8839 echo " "
8840 echo "Checking to see how well your C compiler groks the void type..." >&4
8841 echo " "
8842 $cat >&4 <<EOM
8843   Support flag bits are:
8844     1: basic void declarations.
8845     2: arrays of pointers to functions returning void.
8846     4: operations between pointers to and addresses of void functions.
8847     8: generic void pointers.
8848 EOM
8849 echo " "
8850 case "$voidflags" in
8851 '')
8852         $cat >try.c <<'EOCP'
8853 #if TRY & 1
8854 void sub() {
8855 #else
8856 sub() {
8857 #endif
8858         extern void moo();      /* function returning void */
8859         void (*goo)();          /* ptr to func returning void */
8860 #if TRY & 8
8861         void *hue;              /* generic ptr */
8862 #endif
8863 #if TRY & 2
8864         void (*foo[10])();
8865 #endif
8866
8867 #if TRY & 4
8868         if(goo == moo) {
8869                 exit(0);
8870         }
8871 #endif
8872         exit(0);
8873 }
8874 main() { sub(); }
8875 EOCP
8876         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
8877                 voidflags=$defvoidused
8878         echo "It appears to support void to the level $package wants ($defvoidused)."
8879                 if $contains warning .out >/dev/null 2>&1; then
8880                         echo "However, you might get some warnings that look like this:"
8881                         $cat .out
8882                 fi
8883         else
8884 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
8885                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
8886                         echo "It supports 1..."
8887                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
8888                                 echo "It also supports 2..."
8889                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
8890                                         voidflags=7
8891                                         echo "And it supports 4 but not 8 definitely."
8892                                 else
8893                                         echo "It doesn't support 4..."
8894                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
8895                                                 voidflags=11
8896                                                 echo "But it supports 8."
8897                                         else
8898                                                 voidflags=3
8899                                                 echo "Neither does it support 8."
8900                                         fi
8901                                 fi
8902                         else
8903                                 echo "It does not support 2..."
8904                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
8905                                         voidflags=13
8906                                         echo "But it supports 4 and 8."
8907                                 else
8908                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
8909                                                 voidflags=5
8910                                                 echo "And it supports 4 but has not heard about 8."
8911                                         else
8912                                                 echo "However it supports 8 but not 4."
8913                                         fi
8914                                 fi
8915                         fi
8916                 else
8917                         echo "There is no support at all for void."
8918                         voidflags=0
8919                 fi
8920         fi
8921 esac
8922 case "$voidflags" in
8923 "$defvoidused") ;;
8924 *)
8925         dflt="$voidflags";
8926         rp="Your void support flags add up to what?"
8927         . ./myread
8928         voidflags="$ans"
8929         ;;
8930 esac
8931 $rm -f try.* .out
8932
8933 : check for length of double
8934 echo " "
8935 case "$doublesize" in
8936 '')
8937         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8938         $cat >try.c <<'EOCP'
8939 #include <stdio.h>
8940 main()
8941 {
8942         printf("%d\n", sizeof(double));
8943 }
8944 EOCP
8945         set try
8946         if eval $compile; then
8947                 doublesize=`./try`
8948                 $echo $doublesize >&4
8949         else
8950                 dflt='8'
8951                 echo "(I can't seem to compile the test program.  Guessing...)"
8952                 rp="What is the size of a double precision number (in bytes)?"
8953                 . ./myread
8954                 doublesize="$ans"
8955         fi
8956         ;;
8957 esac
8958 $rm -f try.c try
8959
8960 : see what type file positions are declared as in the library
8961 set fpos_t fpostype long stdio.h sys/types.h
8962 eval $typedef
8963 echo " "
8964 dflt="$fpostype"
8965 rp="What is the type for file position used by fsetpos()?"
8966 . ./myread
8967 fpostype="$ans"
8968
8969 : get csh whereabouts
8970 case "$csh" in
8971 'csh') val="$undef" ;;
8972 *) val="$define" ;;
8973 esac
8974 set d_csh
8975 eval $setvar
8976 : Respect a hint or command line value for full_csh.
8977 case "$full_csh" in
8978 '') full_csh=$csh ;;
8979 esac
8980
8981 : Store the full pathname to the sed program for use in the C program
8982 full_sed=$sed
8983
8984 : see what type gids are declared as in the kernel
8985 set gid_t gidtype xxx stdio.h sys/types.h
8986 eval $typedef
8987 case "$gidtype" in
8988 xxx)
8989         xxx=`./findhdr sys/user.h`
8990         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
8991         case $1 in
8992         unsigned) dflt="$1 $2" ;;
8993         *) dflt="$1" ;;
8994         esac
8995         ;;
8996 *) dflt="$gidtype";;
8997 esac
8998 echo " "
8999 rp="What is the type for group ids returned by getgid()?"
9000 . ./myread
9001 gidtype="$ans"
9002
9003 : see if getgroups exists
9004 set getgroups d_getgrps
9005 eval $inlibc
9006
9007 : see if setgroups exists
9008 set setgroups d_setgrps
9009 eval $inlibc
9010
9011
9012 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
9013 echo " "
9014 case "$d_getgrps$d_setgrps" in
9015 *define*)
9016         case "$groupstype" in
9017         '') dflt="$gidtype" ;;
9018         *)  dflt="$groupstype" ;;
9019         esac
9020         $cat <<EOM
9021 What is the type of the second argument to getgroups() and setgroups()?
9022 Usually this is the same as group ids, $gidtype, but not always.
9023
9024 EOM
9025         rp='What type is the second argument to getgroups() and setgroups()?'
9026         . ./myread
9027         groupstype="$ans"
9028         ;;
9029 *)  groupstype="$gidtype";;
9030 esac
9031
9032 : see what type lseek is declared as in the kernel
9033 set off_t lseektype long stdio.h sys/types.h
9034 eval $typedef
9035 echo " "
9036 dflt="$lseektype"
9037 rp="What type is lseek's offset on this system declared as?"
9038 . ./myread
9039 lseektype="$ans"
9040
9041 echo " "
9042 echo "Checking if your $make program sets \$(MAKE)..." >&4
9043 case "$make_set_make" in
9044 '')
9045         $sed 's/^X //' > testmake.mak << 'EOF'
9046 Xall:
9047 X       @echo 'maketemp="$(MAKE)"'
9048 EOF
9049         case "`$make -f testmake.mak 2>/dev/null`" in
9050         *maketemp=*) make_set_make='#' ;;
9051         *)      make_set_make="MAKE=$make" ;;
9052         esac
9053         $rm -f testmake.mak
9054         ;;
9055 esac
9056 case "$make_set_make" in
9057 '#') echo "Yup, it does.";;
9058 *) echo "Nope, it doesn't.";;
9059 esac
9060
9061 : see what type is used for mode_t
9062 set mode_t modetype int stdio.h sys/types.h
9063 eval $typedef
9064 dflt="$modetype"
9065 echo " "
9066 rp="What type is used for file modes?"
9067 . ./myread
9068 modetype="$ans"
9069
9070 : Cruising for prototypes
9071 echo " "
9072 echo "Checking out function prototypes..." >&4
9073 $cat >prototype.c <<'EOCP'
9074 main(int argc, char *argv[]) {
9075         exit(0);}
9076 EOCP
9077 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
9078         echo "Your C compiler appears to support function prototypes."
9079         val="$define"
9080 else
9081         echo "Your C compiler doesn't seem to understand function prototypes."
9082         val="$undef"
9083 fi
9084 set prototype
9085 eval $setvar
9086 $rm -f prototype*
9087
9088 : define a fucntion to check prototypes
9089 $cat > protochk <<EOSH
9090 $startsh
9091 cc="$cc"
9092 optimize="$optimize"
9093 ccflags="$ccflags"
9094 prototype="$prototype"
9095 define="$define"
9096 rm=$rm
9097 EOSH
9098
9099 $cat >> protochk <<'EOSH'
9100
9101 $rm -f try.c
9102 foo="$1"
9103 shift
9104 while test $# -ge 2; do
9105         case "$1" in
9106                 $define) echo "#include <$2>" >> try.c ;;
9107                 literal) echo "$2" >> try.c ;;
9108         esac
9109     shift 2
9110 done
9111 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
9112 cat >> try.c <<'EOCP'
9113 #ifdef CAN_PROTOTYPE
9114 #define _(args) args
9115 #else
9116 #define _(args) ()
9117 #endif
9118 EOCP
9119 echo "$foo" >> try.c
9120 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
9121 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
9122 status=$?
9123 $rm -f try.[co]
9124 exit $status
9125 EOSH
9126 chmod +x protochk
9127 $eunicefix protochk
9128
9129 : see if this is a netdb.h system
9130 set netdb.h i_netdb
9131 eval $inhdr
9132
9133 : see what type is used for size_t
9134 set size_t sizetype 'unsigned int' stdio.h sys/types.h
9135 eval $typedef
9136 dflt="$sizetype"
9137 echo " "
9138 rp="What type is used for the length parameter for string functions?"
9139 . ./myread
9140 sizetype="$ans"
9141
9142 : check for type of arguments to gethostbyaddr. 
9143 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
9144         case "$d_gethbyaddr" in
9145         $define)
9146                 $cat <<EOM
9147
9148 Checking to see what type of arguments are accepted by gethostbyaddr().
9149 EOM
9150                 hdrs="$define sys/types.h
9151                         $d_socket sys/socket.h 
9152                         $i_niin netinet/in.h 
9153                         $i_netdb netdb.h
9154                         $i_unistd unistd.h"
9155                 : The first arg can 'char *' or 'void *'
9156                 : The second arg is some of integral type
9157                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
9158                         for yyy in size_t long int; do
9159                                 case "$netdb_host_type" in
9160                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
9161                                         if ./protochk "$try" $hdrs; then
9162                                                 echo "Your system accepts $xxx for the first arg."
9163                                                 echo "...and $yyy for the second arg."
9164                                                 netdb_host_type="$xxx"
9165                                                 netdb_hlen_type="$yyy"
9166                                         fi
9167                                         ;;
9168                                 esac
9169                         done
9170                 done
9171                 : In case none of those worked, prompt the user.
9172                 case "$netdb_host_type" in
9173                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
9174                         dflt='char *'
9175                         . ./myread
9176                         netdb_host_type=$ans
9177                         rp='What is the type for the 2nd argument to gethostbyaddr?'
9178                         dflt="$sizetype"
9179                         . ./myread
9180                         netdb_hlen_type=$ans
9181                         ;;
9182                 esac
9183                 ;;
9184         *)      : no gethostbyaddr, so pick harmless defaults
9185                 netdb_host_type='char *'
9186                 netdb_hlen_type="$sizetype"
9187                 ;;
9188         esac
9189         # Remove the "const" if needed. -- but then we'll have a 
9190         # prototype clash!
9191         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
9192 fi
9193
9194 : check for type of argument to gethostbyname. 
9195 if test "X$netdb_name_type" = X ; then
9196         case "$d_gethbyname" in
9197         $define)
9198                 $cat <<EOM
9199
9200 Checking to see what type of argument is accepted by gethostbyname().
9201 EOM
9202                 hdrs="$define sys/types.h
9203                         $d_socket sys/socket.h 
9204                         $i_niin netinet/in.h 
9205                         $i_netdb netdb.h
9206                         $i_unistd unistd.h"
9207                 for xxx in "const char *" "char *"; do
9208                         case "$netdb_name_type" in
9209                         '')     try="extern struct hostent *gethostbyname($xxx);"
9210                                 if ./protochk "$try" $hdrs; then
9211                                         echo "Your system accepts $xxx."
9212                                         netdb_name_type="$xxx"
9213                                 fi
9214                                 ;;
9215                         esac
9216                 done
9217                 : In case none of those worked, prompt the user.
9218                 case "$netdb_name_type" in
9219                 '')     rp='What is the type for the 1st argument to gethostbyname?'
9220                         dflt='char *'
9221                         . ./myread
9222                         netdb_name_type=$ans
9223                         ;;
9224                 esac
9225                 ;;
9226         *)      : no gethostbyname, so pick harmless default
9227                 netdb_name_type='char *'
9228                 ;;
9229         esac
9230 fi
9231
9232 : check for type of 1st argument to getnetbyaddr. 
9233 if test "X$netdb_net_type" = X ; then
9234         case "$d_getnbyaddr" in
9235         $define)
9236                 $cat <<EOM
9237
9238 Checking to see what type of 1st argument is accepted by getnetbyaddr().
9239 EOM
9240                 hdrs="$define sys/types.h
9241                         $d_socket sys/socket.h 
9242                         $i_niin netinet/in.h 
9243                         $i_netdb netdb.h
9244                         $i_unistd unistd.h"
9245                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
9246                         case "$netdb_net_type" in
9247                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
9248                                 if ./protochk "$try" $hdrs; then
9249                                         echo "Your system accepts $xxx."
9250                                         netdb_net_type="$xxx"
9251                                 fi
9252                                 ;;
9253                         esac
9254                 done
9255                 : In case none of those worked, prompt the user.
9256                 case "$netdb_net_type" in
9257                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
9258                         dflt='long'
9259                         . ./myread
9260                         netdb_net_type=$ans
9261                         ;;
9262                 esac
9263                 ;;
9264         *)      : no getnetbyaddr, so pick harmless default
9265                 netdb_net_type='long'
9266                 ;;
9267         esac
9268 fi
9269 : locate the preferred pager for this system
9270 case "$pager" in
9271 '')
9272         dflt=''
9273         case "$pg" in
9274         /*) dflt=$pg;;
9275         esac
9276         case "$more" in
9277         /*) dflt=$more;;
9278         esac
9279         case "$less" in
9280         /*) dflt=$less;;
9281         esac
9282         case "$dflt" in
9283         '') dflt=/usr/ucb/more;;
9284         esac
9285         ;;
9286 *) dflt="$pager";;
9287 esac
9288 echo " "
9289 fn=f/
9290 rp='What pager is used on your system?'
9291 . ./getfile
9292 pager="$ans"
9293
9294 : see what type pids are declared as in the kernel
9295 set pid_t pidtype int stdio.h sys/types.h
9296 eval $typedef
9297 dflt="$pidtype"
9298 echo " "
9299 rp="What type are process ids on this system declared as?"
9300 . ./myread
9301 pidtype="$ans"
9302
9303 : check for length of pointer
9304 echo " "
9305 case "$ptrsize" in
9306 '')
9307         echo "Checking to see how big your pointers are..." >&4
9308         if test "$voidflags" -gt 7; then
9309                 echo '#define VOID_PTR char *' > try.c
9310         else
9311                 echo '#define VOID_PTR void *' > try.c
9312         fi
9313         $cat >>try.c <<'EOCP'
9314 #include <stdio.h>
9315 main()
9316 {
9317         printf("%d\n", sizeof(VOID_PTR));
9318         exit(0);
9319 }
9320 EOCP
9321         set try
9322         if eval $compile; then
9323                 ptrsize=`./try`
9324         else
9325                 dflt='4'
9326                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
9327                 rp="What is the size of a pointer (in bytes)?"
9328                 . ./myread
9329                 ptrsize="$ans"
9330         fi
9331         ;;
9332 esac
9333 $rm -f try.c try
9334
9335 : check for size of random number generator
9336 echo " "
9337 case "$randbits" in
9338 '')
9339         echo "Checking to see how many bits your rand function produces..." >&4
9340         $cat >try.c <<EOCP
9341 #$i_unistd I_UNISTD
9342 #$i_stdlib I_STDLIB
9343 #include <stdio.h>
9344 #ifdef I_UNISTD
9345 #  include <unistd.h>
9346 #endif
9347 #ifdef I_STDLIB
9348 #  include <stdlib.h>
9349 #endif
9350 EOCP
9351         $cat >>try.c <<'EOCP'
9352 main()
9353 {
9354         register int i;
9355         register unsigned long tmp;
9356         register unsigned long max = 0L;
9357
9358         for (i = 1000; i; i--) {
9359                 tmp = (unsigned long)rand();
9360                 if (tmp > max) max = tmp;
9361         }
9362         for (i = 0; max; i++)
9363                 max /= 2;
9364         printf("%d\n",i);
9365 }
9366 EOCP
9367         set try
9368         if eval $compile; then
9369                 dflt=`./try$_exe`
9370         else
9371                 dflt='?'
9372                 echo "(I can't seem to compile the test program...)"
9373         fi
9374         ;;
9375 *)
9376         dflt="$randbits"
9377         ;;
9378 esac
9379 rp='How many bits does your rand() function produce?'
9380 . ./myread
9381 randbits="$ans"
9382 $rm -f try.* try
9383
9384 : see if ar generates random libraries by itself
9385 echo " "
9386 echo "Checking how to generate random libraries on your machine..." >&4
9387 echo 'int bar1() { return bar2(); }' > bar1.c
9388 echo 'int bar2() { return 2; }' > bar2.c
9389 $cat > foo.c <<'EOP'
9390 main() { printf("%d\n", bar1()); exit(0); }
9391 EOP
9392 $cc $ccflags -c bar1.c >/dev/null 2>&1
9393 $cc $ccflags -c bar2.c >/dev/null 2>&1
9394 $cc $ccflags -c foo.c >/dev/null 2>&1
9395 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
9396 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
9397         ./foobar >/dev/null 2>&1; then
9398         echo "$ar appears to generate random libraries itself."
9399         orderlib=false
9400         ranlib=":"
9401 elif $ar ts bar$_a >/dev/null 2>&1 &&
9402         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
9403         ./foobar >/dev/null 2>&1; then
9404                 echo "a table of contents needs to be added with '$ar ts'."
9405                 orderlib=false
9406                 ranlib="$ar ts"
9407 else
9408         case "$ranlib" in
9409         :) ranlib='';;
9410         '')
9411                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
9412                 $test -f $ranlib || ranlib=''
9413                 ;;
9414         esac
9415         if $test -n "$ranlib"; then
9416                 echo "your system has '$ranlib'; we'll use that."
9417                 orderlib=false
9418         else
9419                 echo "your system doesn't seem to support random libraries"
9420                 echo "so we'll use lorder and tsort to order the libraries."
9421                 orderlib=true
9422                 ranlib=":"
9423         fi
9424 fi
9425 $rm -f foo* bar* 
9426
9427 : see if sys/select.h has to be included
9428 set sys/select.h i_sysselct
9429 eval $inhdr
9430
9431 : see if we should include time.h, sys/time.h, or both
9432 echo " "
9433 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9434 $echo $n "I'm now running the test program...$c"
9435 $cat >try.c <<'EOCP'
9436 #include <sys/types.h>
9437 #ifdef I_TIME
9438 #include <time.h>
9439 #endif
9440 #ifdef I_SYSTIME
9441 #ifdef SYSTIMEKERNEL
9442 #define KERNEL
9443 #endif
9444 #include <sys/time.h>
9445 #endif
9446 #ifdef I_SYSSELECT
9447 #include <sys/select.h>
9448 #endif
9449 main()
9450 {
9451         struct tm foo;
9452 #ifdef S_TIMEVAL
9453         struct timeval bar;
9454 #endif
9455 #ifdef S_TIMEZONE
9456         struct timezone tzp;
9457 #endif
9458         if (foo.tm_sec == foo.tm_sec)
9459                 exit(0);
9460 #ifdef S_TIMEVAL
9461         if (bar.tv_sec == bar.tv_sec)
9462                 exit(0);
9463 #endif
9464         exit(1);
9465 }
9466 EOCP
9467 flags=''
9468 for s_timezone in '-DS_TIMEZONE' ''; do
9469 sysselect=''
9470 for s_timeval in '-DS_TIMEVAL' ''; do
9471 for i_systimek in '' '-DSYSTIMEKERNEL'; do
9472 for i_time in '' '-DI_TIME'; do
9473 for i_systime in '-DI_SYSTIME' ''; do
9474         case "$flags" in
9475         '') $echo $n ".$c"
9476                 set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9477                 if eval $compile; then
9478                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9479                         shift
9480                         flags="$*"
9481                         echo " "
9482                         $echo $n "Succeeded with $flags$c"
9483                 fi
9484                 ;;
9485         esac
9486 done
9487 done
9488 done
9489 done
9490 done
9491 timeincl=''
9492 echo " "
9493 case "$flags" in
9494 *SYSTIMEKERNEL*) i_systimek="$define"
9495         timeincl=`./findhdr sys/time.h`
9496         echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9497 *) i_systimek="$undef";;
9498 esac
9499 case "$flags" in
9500 *I_TIME*) i_time="$define"
9501         timeincl=`./findhdr time.h`" $timeincl"
9502         echo "We'll include <time.h>." >&4;;
9503 *) i_time="$undef";;
9504 esac
9505 case "$flags" in
9506 *I_SYSTIME*) i_systime="$define"
9507         timeincl=`./findhdr sys/time.h`" $timeincl"
9508         echo "We'll include <sys/time.h>." >&4;;
9509 *) i_systime="$undef";;
9510 esac
9511 $rm -f try.c try
9512
9513 : check for fd_set items
9514 $cat <<EOM
9515
9516 Checking to see how well your C compiler handles fd_set and friends ...
9517 EOM
9518 $cat >fd_set.c <<EOCP
9519 #$i_systime I_SYS_TIME
9520 #$i_sysselct I_SYS_SELECT
9521 #$d_socket HAS_SOCKET
9522 #include <sys/types.h>
9523 #ifdef HAS_SOCKET
9524 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9525 #endif
9526 #ifdef I_SYS_TIME
9527 #include <sys/time.h>
9528 #endif
9529 #ifdef I_SYS_SELECT
9530 #include <sys/select.h>
9531 #endif
9532 main() {
9533         fd_set fds;
9534
9535 #ifdef TRYBITS
9536         if(fds.fds_bits);
9537 #endif
9538
9539 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9540         exit(0);
9541 #else
9542         exit(1);
9543 #endif
9544 }
9545 EOCP
9546 set fd_set -DTRYBITS
9547 if eval $compile; then
9548         d_fds_bits="$define"
9549         d_fd_set="$define"
9550         echo "Well, your system knows about the normal fd_set typedef..." >&4
9551         if ./fd_set; then
9552                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9553                 d_fd_macros="$define"
9554         else
9555                 $cat >&4 <<'EOM'
9556 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9557 EOM
9558                 d_fd_macros="$undef"
9559         fi
9560 else
9561         $cat <<'EOM'
9562 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9563 EOM
9564         set fd_set
9565         if eval $compile; then
9566                 d_fds_bits="$undef"
9567                 d_fd_set="$define"
9568                 echo "Well, your system has some sort of fd_set available..." >&4
9569                 if ./fd_set; then
9570                         echo "and you have the normal fd_set macros." >&4
9571                         d_fd_macros="$define"
9572                 else
9573                         $cat <<'EOM'
9574 but not the normal fd_set macros!  Gross!  More work for me...
9575 EOM
9576                         d_fd_macros="$undef"
9577                 fi
9578         else
9579         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9580                 d_fd_set="$undef"
9581                 d_fds_bits="$undef"
9582                 d_fd_macros="$undef"
9583         fi
9584 fi
9585 $rm -f fd_set*
9586
9587 : check for type of arguments to select. 
9588 case "$selecttype" in
9589 '') case "$d_select" in
9590         $define)
9591                 $cat <<EOM
9592 Checking to see what type of arguments are accepted by select().
9593 EOM
9594                 hdrs="$define sys/types.h
9595                         $i_systime sys/time.h 
9596                         $i_sysselct sys/select.h
9597                         $d_socket sys/socket.h"
9598                 : The first arg can be int, unsigned, or size_t
9599                 : The last arg may or may not be 'const'
9600                 val=''
9601                 for xxx in 'fd_set *' 'int *'; do
9602                         for nfd in 'int' 'size_t' 'unsigned' ; do
9603                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
9604                                         case "$val" in
9605                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
9606                                                 if ./protochk "$try" $hdrs; then
9607                                                         echo "Your system accepts $xxx."
9608                                                         val="$xxx"
9609                                                 fi
9610                                                 ;;
9611                                         esac
9612                                 done
9613                         done
9614                 done
9615                 case "$val" in
9616                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
9617                         case "$d_fd_set" in
9618                                 $define) dflt="fd_set *" ;;
9619                                 *)              dflt="int *" ;;
9620                         esac
9621                         . ./myread
9622                         val=$ans
9623                         ;;
9624                 esac
9625                 selecttype="$val"
9626                 ;;
9627         *)      : no select, so pick a harmless default
9628                 selecttype='int *'
9629                 ;;
9630         esac
9631         ;;
9632 esac
9633
9634 : Trace out the files included by signal.h, then look for SIGxxx names.
9635 : Remove SIGARRAYSIZE used by HPUX.
9636 : Remove SIGTYP void lines used by OS2.
9637 xxx=`echo '#include <signal.h>' |
9638         $cppstdin $cppminus $cppflags 2>/dev/null |
9639         $grep '^[       ]*#.*include' | 
9640         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
9641 : Check this list of files to be sure we have parsed the cpp output ok.
9642 : This will also avoid potentially non-existent files, such 
9643 : as ../foo/bar.h
9644 xxxfiles=''
9645 for xx in $xxx /dev/null ; do
9646         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
9647 done
9648 : If we have found no files, at least try signal.h
9649 case "$xxxfiles" in
9650 '')     xxxfiles=`./findhdr signal.h` ;;
9651 esac
9652 xxx=`awk '
9653 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
9654         print substr($2, 4, 20)
9655 }
9656 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
9657         print substr($3, 4, 20)
9658 }' $xxxfiles`
9659 : Append some common names just in case the awk scan failed.
9660 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
9661 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
9662 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
9663 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
9664 : generate a few handy files for later
9665 $cat > signal.c <<'EOP'
9666 #include <sys/types.h>
9667 #include <signal.h>
9668 int main() {
9669
9670 /* Strange style to avoid deeply-nested #if/#else/#endif */
9671 #ifndef NSIG
9672 #  ifdef _NSIG
9673 #    define NSIG (_NSIG)
9674 #  endif
9675 #endif
9676
9677 #ifndef NSIG
9678 #  ifdef SIGMAX
9679 #    define NSIG (SIGMAX+1)
9680 #  endif
9681 #endif
9682
9683 #ifndef NSIG
9684 #  ifdef SIG_MAX
9685 #    define NSIG (SIG_MAX+1)
9686 #  endif
9687 #endif
9688
9689 #ifndef NSIG
9690 #  ifdef MAXSIG
9691 #    define NSIG (MAXSIG+1)
9692 #  endif
9693 #endif
9694
9695 #ifndef NSIG
9696 #  ifdef MAX_SIG
9697 #    define NSIG (MAX_SIG+1)
9698 #  endif
9699 #endif
9700
9701 #ifndef NSIG
9702 #  ifdef SIGARRAYSIZE
9703 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
9704 #  endif
9705 #endif
9706
9707 #ifndef NSIG
9708 #  ifdef _sys_nsig
9709 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
9710 #  endif
9711 #endif
9712
9713 /* Default to some arbitrary number that's big enough to get most
9714    of the common signals.
9715 */
9716 #ifndef NSIG
9717 #    define NSIG 50
9718 #endif
9719
9720 printf("NSIG %d\n", NSIG);
9721
9722 EOP
9723 echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
9724 {
9725         printf "#ifdef SIG"; printf $1; printf "\n"
9726         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
9727         printf $1; printf ");\n"
9728         printf "#endif\n"
9729 }
9730 END {
9731         printf "}\n";
9732 }
9733 ' >>signal.c
9734 $cat >signal.awk <<'EOP'
9735 BEGIN { ndups = 0 }
9736 $1 ~ /^NSIG$/ { nsig = $2 }
9737 ($1 !~ /^NSIG$/) && (NF == 2) {
9738     if ($2 > maxsig) { maxsig = $2 }
9739     if (sig_name[$2]) {
9740         dup_name[ndups] = $1
9741         dup_num[ndups] = $2
9742         ndups++ 
9743     }
9744     else {
9745         sig_name[$2] = $1
9746         sig_num[$2] = $2
9747     }
9748
9749 }
9750 END { 
9751     if (nsig == 0) { nsig = maxsig + 1 }
9752         for (n = 1; n < nsig; n++) {
9753                 if (sig_name[n]) {
9754                         printf("%s %d\n", sig_name[n], sig_num[n])
9755                 }
9756                 else {
9757                         printf("NUM%d %d\n", n, n) 
9758                 }
9759         }
9760     for (n = 0; n < ndups; n++) {
9761                 printf("%s %d\n", dup_name[n], dup_num[n])
9762     }
9763 }
9764 EOP
9765 $cat >signal_cmd <<EOS
9766 $startsh
9767 $test -s signal.lst && exit 0
9768 if $cc $optimize $ccflags $ldflags -o signal signal.c $libs >/dev/null 2>&1; then
9769         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
9770 else
9771         echo "(I can't seem be able to compile the test program -- Guessing)"
9772         echo 'kill -l' >signal
9773         set X \`csh -f <signal\`
9774         $rm -f signal
9775         shift
9776         case \$# in
9777         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
9778         esac
9779         echo \$@ | $tr ' ' '\012' | \
9780                 $awk '{ printf \$1; printf " %d\n", ++s; }' >signal.lst
9781 fi
9782 $rm -f signal.c signal signal$_o
9783 EOS
9784 chmod a+x signal_cmd
9785 $eunicefix signal_cmd
9786
9787 : generate list of signal names
9788 echo " "
9789 case "$sig_name_init" in
9790 '')
9791         echo "Generating a list of signal names and numbers..." >&4
9792         ./signal_cmd
9793         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
9794         sig_name="ZERO $sig_name"
9795         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
9796                                                 { printf "\"%s\", ", $1 }
9797                                                 END { printf "0\n" }' signal.lst`
9798         sig_num=`$awk 'BEGIN { printf "0, " }
9799                                         { printf "%d, ", $2}
9800                                         END { printf "0\n"}' signal.lst`
9801         ;;
9802 esac
9803 echo "The following signals are available:"
9804 echo " "
9805 echo $sig_name | $awk \
9806 'BEGIN { linelen = 0 }
9807 {
9808         for (i = 1; i <= NF; i++) {
9809                 name = "SIG" $i " "
9810                 linelen = linelen + length(name)
9811                 if (linelen > 70) {
9812                         printf "\n"
9813                         linelen = length(name)
9814                 }
9815                 printf "%s", name
9816         }
9817         printf "\n"
9818 }'
9819 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
9820
9821 : see what type is used for signed size_t
9822 set ssize_t ssizetype int stdio.h sys/types.h
9823 eval $typedef
9824 dflt="$ssizetype"
9825 $cat > ssize.c <<EOM
9826 #include <stdio.h>
9827 #include <sys/types.h>
9828 #define Size_t $sizetype
9829 #define SSize_t $dflt
9830 main()
9831 {
9832         if (sizeof(Size_t) == sizeof(SSize_t))
9833                 printf("$dflt\n");
9834         else if (sizeof(Size_t) == sizeof(int))
9835                 printf("int\n");
9836         else 
9837                 printf("long\n");
9838         exit(0);
9839 }
9840 EOM
9841 echo " "
9842 set ssize
9843 if eval $compile && ./ssize > /dev/null; then
9844         ssizetype=`./ssize`
9845         echo "I'll be using $ssizetype for functions returning a byte count." >&4
9846 else
9847         $cat >&4 <<EOM
9848 Help! I can't compile and run the ssize_t test program: please enlighten me!
9849 (This is probably a misconfiguration in your system or libraries, and
9850 you really ought to fix it.  Still, I'll try anyway.)
9851
9852 I need a type that is the same size as $sizetype, but is guaranteed to
9853 be signed.  Common values are ssize_t, int and long.
9854
9855 EOM
9856         rp="What signed type is the same size as $sizetype?"
9857         . ./myread
9858         ssizetype="$ans"
9859 fi
9860 $rm -f ssize ssize.*
9861
9862 : see what type of char stdio uses.
9863 echo " "
9864 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9865         echo "Your stdio uses unsigned chars." >&4
9866         stdchar="unsigned char"
9867 else
9868         echo "Your stdio uses signed chars." >&4
9869         stdchar="char"
9870 fi
9871
9872 : see if time exists
9873 echo " "
9874 if set time val -f d_time; eval $csym; $val; then
9875         echo 'time() found.' >&4
9876         val="$define"
9877         set time_t timetype long stdio.h sys/types.h
9878         eval $typedef
9879         dflt="$timetype"
9880         echo " "
9881         rp="What type is returned by time() on this system?"
9882         . ./myread
9883         timetype="$ans"
9884 else
9885         echo 'time() not found, hope that will do.' >&4
9886         val="$undef"
9887         timetype='int';
9888 fi
9889 set d_time
9890 eval $setvar
9891
9892 : see what type uids are declared as in the kernel
9893 set uid_t uidtype xxx stdio.h sys/types.h
9894 eval $typedef
9895 case "$uidtype" in
9896 xxx)
9897         xxx=`./findhdr sys/user.h`
9898         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
9899         case $1 in
9900         unsigned) dflt="$1 $2" ;;
9901         *) dflt="$1" ;;
9902         esac
9903         ;;
9904 *) dflt="$uidtype";;
9905 esac
9906 echo " "
9907 rp="What is the type for user ids returned by getuid()?"
9908 . ./myread
9909 uidtype="$ans"
9910
9911 : see if dbm.h is available
9912 : see if dbmclose exists
9913 set dbmclose d_dbmclose
9914 eval $inlibc
9915
9916 case "$d_dbmclose" in
9917 $define)
9918         set dbm.h i_dbm
9919         eval $inhdr
9920         case "$i_dbm" in
9921         $define)
9922                 val="$undef"
9923                 set i_rpcsvcdbm
9924                 eval $setvar
9925                 ;;
9926         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9927                 eval $inhdr
9928                 ;;
9929         esac
9930         ;;
9931 *)      echo "We won't be including <dbm.h>"
9932         val="$undef"
9933         set i_dbm
9934         eval $setvar
9935         val="$undef"
9936         set i_rpcsvcdbm
9937         eval $setvar
9938         ;;
9939 esac
9940
9941 : see if this is a sys/file.h system
9942 val=''
9943 set sys/file.h val
9944 eval $inhdr
9945
9946 : do we need to include sys/file.h ?
9947 case "$val" in
9948 "$define")
9949         echo " "
9950         if $h_sysfile; then
9951                 val="$define"
9952                 echo "We'll be including <sys/file.h>." >&4
9953         else
9954                 val="$undef"
9955                 echo "We won't be including <sys/file.h>." >&4
9956         fi
9957         ;;
9958 *)
9959         h_sysfile=false
9960         ;;
9961 esac
9962 set i_sysfile
9963 eval $setvar
9964
9965 : see if fcntl.h is there
9966 val=''
9967 set fcntl.h val
9968 eval $inhdr
9969
9970 : see if we can include fcntl.h
9971 case "$val" in
9972 "$define")
9973         echo " "
9974         if $h_fcntl; then
9975                 val="$define"
9976                 echo "We'll be including <fcntl.h>." >&4
9977         else
9978                 val="$undef"
9979                 if $h_sysfile; then
9980         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9981                 else
9982                         echo "We won't be including <fcntl.h>." >&4
9983                 fi
9984         fi
9985         ;;
9986 *)
9987         h_fcntl=false
9988         val="$undef"
9989         ;;
9990 esac
9991 set i_fcntl
9992 eval $setvar
9993
9994 : see if this is an grp system
9995 set grp.h i_grp
9996 eval $inhdr
9997
9998 : see if locale.h is available
9999 set locale.h i_locale
10000 eval $inhdr
10001
10002 : see if this is a math.h system
10003 set math.h i_math
10004 eval $inhdr
10005
10006 : see if ndbm.h is available
10007 set ndbm.h t_ndbm
10008 eval $inhdr
10009 case "$t_ndbm" in
10010 $define)
10011         : see if dbm_open exists
10012         set dbm_open d_dbm_open
10013         eval $inlibc
10014         case "$d_dbm_open" in
10015         $undef)
10016                 t_ndbm="$undef"
10017                 echo "We won't be including <ndbm.h>"
10018                 ;;
10019         esac
10020         ;;
10021 esac
10022 val="$t_ndbm"
10023 set i_ndbm
10024 eval $setvar
10025
10026 : see if net/errno.h is available
10027 val=''
10028 set net/errno.h val
10029 eval $inhdr
10030
10031 : Unfortunately, it causes problems on some systems.  Arrgh.
10032 case "$val" in
10033 $define)
10034         cat > try.c <<'EOM'
10035 #include <stdio.h>
10036 #include <errno.h>
10037 #include <net/errno.h>
10038 int func()
10039 {
10040         return ENOTSOCK;
10041 }
10042 EOM
10043         if $cc $ccflags -c try.c >/dev/null 2>&1; then
10044                 echo "We'll be including <net/errno.h>." >&4
10045         else
10046                 echo "We won't be including <net/errno.h>." >&4
10047                 val="$undef"
10048         fi
10049         $rm -f try.* try
10050         ;;
10051 esac
10052 set i_neterrno
10053 eval $setvar
10054
10055 : get C preprocessor symbols handy
10056 echo " "
10057 $echo $n "Hmm... $c"
10058 echo $al | $tr ' ' '\012' >Cppsym.know
10059 $cat <<EOSS >Cppsym
10060 $startsh
10061 case "\$1" in
10062 -l) list=true
10063         shift
10064         ;;
10065 esac
10066 unknown=''
10067 case "\$list\$#" in
10068 1|2)
10069         for sym do
10070                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
10071                         exit 0
10072                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
10073                         :
10074                 else
10075                         unknown="\$unknown \$sym"
10076                 fi
10077         done
10078         set X \$unknown
10079         shift
10080         ;;
10081 esac
10082 case \$# in
10083 0) exit 1;;
10084 esac
10085 echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
10086 #ifdef \1\\
10087 exit 0; _ _ _ _\1\\      \1\\
10088 #endif\\
10089 /' >Cppsym\$\$
10090 echo "exit 1; _ _ _" >>Cppsym\$\$
10091 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
10092 case "\$list" in
10093 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
10094 *)
10095         sh Cppsym2\$\$
10096         status=\$?
10097         ;;
10098 esac
10099 $rm -f Cppsym\$\$ Cppsym2\$\$
10100 exit \$status
10101 EOSS
10102 chmod +x Cppsym
10103 $eunicefix Cppsym
10104 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
10105
10106 : now check the C compiler for additional symbols
10107 $cat >ccsym <<EOS
10108 $startsh
10109 $cat >tmp.c <<EOF
10110 extern int foo;
10111 EOF
10112 for i in \`$cc -v -c tmp.c 2>&1\`
10113 do
10114         case "\$i" in
10115         -D*) echo "\$i" | $sed 's/^-D//';;
10116         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
10117         esac
10118 done
10119 $rm -f try.c
10120 EOS
10121 chmod +x ccsym
10122 $eunicefix ccsym
10123 ./ccsym | $sort | $uniq >ccsym.raw
10124 $awk '/\=/ { print $0; next }
10125         { print $0"=1" }' ccsym.raw >ccsym.list
10126 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
10127 $comm -13 ccsym.true ccsym.list >ccsym.own
10128 $comm -12 ccsym.true ccsym.list >ccsym.com
10129 $comm -23 ccsym.true ccsym.list >ccsym.cpp
10130 also=''
10131 symbols='symbols'
10132 if $test -z ccsym.raw; then
10133         echo "Your C compiler doesn't seem to define any symbol!" >&4
10134         echo " "
10135         echo "However, your C preprocessor defines the following ones:"
10136         $cat Cppsym.true
10137 else
10138         if $test -s ccsym.com; then
10139                 echo "Your C compiler and pre-processor define these symbols:"
10140                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
10141                 also='also '
10142                 symbols='ones'
10143                 $test "$silent" || sleep 1
10144         fi
10145         if $test -s ccsym.cpp; then
10146                 $test "$also" && echo " "
10147                 echo "Your C pre-processor ${also}defines the following $symbols:"
10148                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
10149                 also='further '
10150                 $test "$silent" || sleep 1
10151         fi
10152         if $test -s ccsym.own; then
10153                 $test "$also" && echo " "
10154                 echo "Your C compiler ${also}defines the following cpp variables:"
10155                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
10156                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
10157                 $test "$silent" || sleep 1
10158         fi
10159 fi
10160 $rm -f ccsym*
10161
10162 : see if this is a termio system
10163 val="$undef"
10164 val2="$undef"
10165 val3="$undef"
10166 if $test `./findhdr termios.h`; then
10167         set tcsetattr i_termios
10168         eval $inlibc
10169         val3="$i_termios"
10170 fi
10171 echo " "
10172 case "$val3" in
10173 "$define") echo "You have POSIX termios.h... good!" >&4;;
10174 *) if ./Cppsym pyr; then
10175                 case "`/bin/universe`" in
10176                 ucb) if $test `./findhdr sgtty.h`; then
10177                                 val2="$define"
10178                                 echo "<sgtty.h> found." >&4
10179                         else
10180                                 echo "System is pyramid with BSD universe."
10181                                 echo "<sgtty.h> not found--you could have problems." >&4
10182                         fi;;
10183                 *) if $test `./findhdr termio.h`; then
10184                                 val="$define"
10185                                 echo "<termio.h> found." >&4
10186                         else
10187                                 echo "System is pyramid with USG universe."
10188                                 echo "<termio.h> not found--you could have problems." >&4
10189                         fi;;
10190                 esac
10191         elif ./usg; then
10192                 if $test `./findhdr termio.h`; then
10193                         echo "<termio.h> found." >&4
10194                         val="$define"
10195                 elif $test `./findhdr sgtty.h`; then
10196                         echo "<sgtty.h> found." >&4
10197                         val2="$define"
10198                 else
10199 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
10200                 fi
10201         else
10202                 if $test `./findhdr sgtty.h`; then
10203                         echo "<sgtty.h> found." >&4
10204                         val2="$define"
10205                 elif $test `./findhdr termio.h`; then
10206                         echo "<termio.h> found." >&4
10207                         val="$define"
10208                 else
10209 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
10210                 fi
10211         fi;;
10212 esac
10213 set i_termio; eval $setvar
10214 val=$val2; set i_sgtty; eval $setvar
10215 val=$val3; set i_termios; eval $setvar
10216
10217 : see if stdarg is available
10218 echo " "
10219 if $test `./findhdr stdarg.h`; then
10220         echo "<stdarg.h> found." >&4
10221         valstd="$define"
10222 else
10223         echo "<stdarg.h> NOT found." >&4
10224         valstd="$undef"
10225 fi
10226
10227 : see if varags is available
10228 echo " "
10229 if $test `./findhdr varargs.h`; then
10230         echo "<varargs.h> found." >&4
10231 else
10232         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
10233 fi
10234
10235 : set up the varargs testing programs
10236 $cat > varargs.c <<EOP
10237 #ifdef I_STDARG
10238 #include <stdarg.h>
10239 #endif
10240 #ifdef I_VARARGS
10241 #include <varargs.h>
10242 #endif
10243
10244 #ifdef I_STDARG
10245 int f(char *p, ...)
10246 #else
10247 int f(va_alist)
10248 va_dcl
10249 #endif
10250 {
10251         va_list ap;
10252 #ifndef I_STDARG
10253         char *p;
10254 #endif
10255 #ifdef I_STDARG
10256         va_start(ap,p);
10257 #else
10258         va_start(ap);
10259         p = va_arg(ap, char *);
10260 #endif
10261         va_end(ap);
10262 }
10263 EOP
10264 $cat > varargs <<EOP
10265 $startsh
10266 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
10267         echo "true"
10268 else
10269         echo "false"
10270 fi
10271 $rm -f varargs$_o
10272 EOP
10273 chmod +x varargs
10274
10275 : now check which varargs header should be included
10276 echo " "
10277 i_varhdr=''
10278 case "$valstd" in
10279 "$define")
10280         if `./varargs I_STDARG`; then
10281                 val='stdarg.h'
10282         elif `./varargs I_VARARGS`; then
10283                 val='varargs.h'
10284         fi
10285         ;;
10286 *)
10287         if `./varargs I_VARARGS`; then
10288                 val='varargs.h'
10289         fi
10290         ;;
10291 esac
10292 case "$val" in
10293 '')
10294 echo "I could not find the definition for va_dcl... You have problems..." >&4
10295         val="$undef"; set i_stdarg; eval $setvar
10296         val="$undef"; set i_varargs; eval $setvar
10297         ;;
10298 *) 
10299         set i_varhdr
10300         eval $setvar
10301         case "$i_varhdr" in
10302         stdarg.h)
10303                 val="$define"; set i_stdarg; eval $setvar
10304                 val="$undef"; set i_varargs; eval $setvar
10305                 ;;
10306         varargs.h)
10307                 val="$undef"; set i_stdarg; eval $setvar
10308                 val="$define"; set i_varargs; eval $setvar
10309                 ;;
10310         esac
10311         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
10312 esac
10313 $rm -f varargs*
10314
10315 : see if stddef is available
10316 set stddef.h i_stddef
10317 eval $inhdr
10318
10319 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
10320 set sys/filio.h i_sysfilio
10321 eval $inhdr
10322 echo " "
10323 if $test `./findhdr sys/ioctl.h`; then
10324         val="$define"
10325         echo '<sys/ioctl.h> found.' >&4
10326 else
10327         val="$undef"
10328         if $test $i_sysfilio = "$define"; then
10329             echo '<sys/ioctl.h> NOT found.' >&4
10330         else
10331                 $test $i_sgtty = "$define" && xxx="sgtty.h"
10332                 $test $i_termio = "$define" && xxx="termio.h"
10333                 $test $i_termios = "$define" && xxx="termios.h"
10334 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
10335         fi
10336 fi
10337 set i_sysioctl
10338 eval $setvar
10339
10340 : see if this is a sys/param system
10341 set sys/param.h i_sysparam
10342 eval $inhdr
10343
10344 : see if sys/resource.h has to be included
10345 set sys/resource.h i_sysresrc
10346 eval $inhdr
10347
10348 : see if sys/stat.h is available
10349 set sys/stat.h i_sysstat
10350 eval $inhdr
10351
10352 : see if sys/types.h has to be included
10353 set sys/types.h i_systypes
10354 eval $inhdr
10355
10356 : see if this is a sys/un.h system
10357 set sys/un.h i_sysun
10358 eval $inhdr
10359
10360 : see if this is a syswait system
10361 set sys/wait.h i_syswait
10362 eval $inhdr
10363
10364 : see if this is an utime system
10365 set utime.h i_utime
10366 eval $inhdr
10367
10368 : see if this is a values.h system
10369 set values.h i_values
10370 eval $inhdr
10371
10372 : see if this is a vfork system
10373 case "$d_vfork" in
10374 "$define")
10375         set vfork.h i_vfork
10376         eval $inhdr
10377         ;;
10378 *)
10379         i_vfork="$undef"
10380         ;;
10381 esac
10382
10383 : see if gdbm.h is available
10384 set gdbm.h t_gdbm
10385 eval $inhdr
10386 case "$t_gdbm" in
10387 $define)
10388         : see if gdbm_open exists
10389         set gdbm_open d_gdbm_open
10390         eval $inlibc
10391         case "$d_gdbm_open" in
10392         $undef)
10393                 t_gdbm="$undef"
10394                 echo "We won't be including <gdbm.h>"
10395                 ;;
10396         esac
10397         ;;
10398 esac
10399 val="$t_gdbm"
10400 set i_gdbm
10401 eval $setvar
10402
10403 echo " "
10404 echo "Looking for extensions..." >&4
10405 cd ../ext
10406 : If we are using the old config.sh, known_extensions may contain
10407 : old or inaccurate or duplicate values.
10408 known_extensions=''
10409 : We do not use find because it might not be available.
10410 : We do not just use MANIFEST because the user may have dropped
10411 : some additional extensions into the source tree and expect them
10412 : to be built.
10413 for xxx in * ; do
10414         case "$xxx" in
10415         DynaLoader) ;;
10416         *)      if $test -f $xxx/$xxx.xs; then
10417                         known_extensions="$known_extensions $xxx"
10418                 else
10419                         if $test -d $xxx; then
10420                                 cd $xxx
10421                                 for yyy in * ; do
10422                                 if $test -f $yyy/$yyy.xs; then
10423                                         known_extensions="$known_extensions $xxx/$yyy"
10424                                 fi
10425                                 done
10426                         cd ..
10427                         fi
10428                 fi 
10429                 ;;
10430         esac
10431 done
10432 set X $known_extensions
10433 shift
10434 known_extensions="$*"
10435 cd ../UU
10436
10437 : Now see which are supported on this system.
10438 avail_ext=''
10439 for xxx in $known_extensions ; do
10440         case "$xxx" in
10441         DB_File|db_file)
10442                 case "$i_db" in
10443                 $define) avail_ext="$avail_ext $xxx" ;;
10444                 esac
10445                 ;;
10446         GDBM_File|gdbm_fil)
10447                 case "$i_gdbm" in 
10448                 $define) avail_ext="$avail_ext $xxx" ;;
10449                 esac
10450                 ;;
10451         NDBM_File|ndbm_fil)
10452                 case "$i_ndbm" in
10453                 $define) avail_ext="$avail_ext $xxx" ;;
10454                 esac
10455                 ;;
10456         ODBM_File|odbm_fil) 
10457                 case "${i_dbm}${i_rpcsvcdbm}" in
10458                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
10459                 esac
10460                 ;;
10461         POSIX|posix)
10462                 case "$useposix" in
10463                 true|define|y) avail_ext="$avail_ext $xxx" ;;
10464                 esac
10465                 ;;
10466         Opcode|opcode)
10467                 case "$useopcode" in
10468                 true|define|y) avail_ext="$avail_ext $xxx" ;;
10469                 esac
10470                 ;;
10471         Socket|socket)
10472                 case "$d_socket" in 
10473                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
10474                 esac
10475                 ;;
10476         Thread|thread)
10477                 case "$usethreads" in 
10478                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
10479                 esac
10480                 ;;
10481         *)      avail_ext="$avail_ext $xxx"
10482                 ;;
10483         esac
10484 done
10485
10486 set X $avail_ext
10487 shift
10488 avail_ext="$*"
10489
10490 case $usedl in
10491 $define)
10492         $cat <<EOM
10493 A number of extensions are supplied with $package.  You may choose to
10494 compile these extensions for dynamic loading (the default), compile
10495 them into the $package executable (static loading), or not include
10496 them at all.  Answer "none" to include no extensions.
10497 Note that DynaLoader is always built and need not be mentioned here.
10498
10499 EOM
10500         case "$dynamic_ext" in
10501         '') dflt="$avail_ext" ;;
10502         *)      dflt="$dynamic_ext"
10503                 # Perhaps we are reusing an old out-of-date config.sh.
10504                 case "$hint" in
10505                 previous)
10506                         if test X"$dynamic_ext" != X$"avail_ext"; then
10507                                 $cat <<EOM
10508 NOTICE:  Your previous config.sh list may be incorrect. 
10509 The extensions now available to you are 
10510         ${avail_ext}
10511 but the default list from your previous config.sh is
10512         ${dynamic_ext} 
10513
10514 EOM
10515                         fi
10516                         ;;
10517                 esac
10518                 ;;
10519         esac
10520         case "$dflt" in
10521         '')     dflt=none;;
10522         esac
10523         rp="What extensions do you wish to load dynamically?"
10524         . ./myread
10525         case "$ans" in
10526         none) dynamic_ext=' ' ;;
10527         *) dynamic_ext="$ans" ;;
10528         esac
10529
10530         case "$static_ext" in
10531         '')
10532                 : Exclude those already listed in dynamic linking
10533                 dflt=''
10534                 for xxx in $avail_ext; do
10535                         case " $dynamic_ext " in
10536                         *" $xxx "*) ;;
10537                         *) dflt="$dflt $xxx" ;;
10538                         esac
10539                 done
10540                 set X $dflt
10541                 shift
10542                 dflt="$*"
10543                 ;;
10544         *)  dflt="$static_ext" 
10545                 ;;
10546         esac
10547
10548         case "$dflt" in
10549         '')     dflt=none;;
10550         esac
10551         rp="What extensions do you wish to load statically?"
10552         . ./myread
10553         case "$ans" in
10554         none) static_ext=' ' ;;
10555         *) static_ext="$ans" ;;
10556         esac
10557         ;;
10558 *)
10559         $cat <<EOM
10560 A number of extensions are supplied with $package.  Answer "none" 
10561 to include no extensions. 
10562 Note that DynaLoader is always built and need not be mentioned here.
10563
10564 EOM
10565         case "$static_ext" in
10566         '') dflt="$avail_ext" ;;
10567         *)      dflt="$static_ext"
10568                 # Perhaps we are reusing an old out-of-date config.sh.
10569                 case "$hint" in
10570                 previous)
10571                         if test X"$static_ext" != X$"avail_ext"; then
10572                                 $cat <<EOM
10573 NOTICE:  Your previous config.sh list may be incorrect. 
10574 The extensions now available to you are 
10575         ${avail_ext}
10576 but the default list from your previous config.sh is
10577         ${static_ext} 
10578
10579 EOM
10580                         fi
10581                         ;;
10582                 esac
10583                 ;;
10584         esac
10585         case "$dflt" in
10586         '')     dflt=none;;
10587         esac
10588         rp="What extensions do you wish to include?"
10589         . ./myread
10590         case "$ans" in
10591         none) static_ext=' ' ;;
10592         *) static_ext="$ans" ;;
10593         esac
10594         ;;
10595 esac
10596
10597 set X $dynamic_ext $static_ext
10598 shift
10599 extensions="$*"
10600
10601 : Remove build directory name from cppstdin so it can be used from
10602 : either the present location or the final installed location.
10603 echo " "
10604 : Get out of the UU directory to get correct path name.
10605 cd ..
10606 case "$cppstdin" in
10607 `pwd`/cppstdin)
10608         echo "Stripping down cppstdin path name"
10609         cppstdin=cppstdin
10610         ;;
10611 esac
10612 cd UU
10613
10614 : end of configuration questions
10615 echo " "
10616 echo "End of configuration questions."
10617 echo " "
10618
10619 : back to where it started
10620 if test -d ../UU; then
10621         cd ..
10622 fi
10623
10624 : configuration may be patched via a 'config.over' file
10625 if $test -f config.over; then
10626         echo " "
10627         dflt=y
10628         rp='I see a config.over file.  Do you wish to load it?'
10629         . UU/myread
10630         case "$ans" in
10631         n*) echo "OK, I'll ignore it.";;
10632         *)      . ./config.over
10633                 echo "Configuration override changes have been loaded."
10634                 ;;
10635         esac
10636 fi
10637
10638 : in case they want portability, strip down executable paths
10639 case "$d_portable" in
10640 "$define")
10641         echo " "
10642         echo "Stripping down executable paths..." >&4
10643         for file in $loclist $trylist; do
10644                 eval $file="\$file"
10645         done
10646         ;;
10647 esac
10648
10649 : create config.sh file
10650 echo " "
10651 echo "Creating config.sh..." >&4
10652 $spitshell <<EOT >config.sh
10653 $startsh
10654 #
10655 # This file was produced by running the Configure script. It holds all the
10656 # definitions figured out by Configure. Should you modify one of these values,
10657 # do not forget to propagate your changes by running "Configure -der". You may
10658 # instead choose to run each of the .SH files by yourself, or "Configure -S".
10659 #
10660
10661 # Package name      : $package
10662 # Source directory  : $src
10663 # Configuration time: $cf_time
10664 # Configured by     : $cf_by
10665 # Target system     : $myuname
10666
10667 Author='$Author'
10668 Date='$Date'
10669 Header='$Header'
10670 Id='$Id'
10671 Locker='$Locker'
10672 Log='$Log'
10673 Mcc='$Mcc'
10674 RCSfile='$RCSfile'
10675 Revision='$Revision'
10676 Source='$Source'
10677 State='$State'
10678 _a='$_a'
10679 _exe='$_exe'
10680 _o='$_o'
10681 afs='$afs'
10682 alignbytes='$alignbytes'
10683 aphostname='$aphostname'
10684 ar='$ar'
10685 archlib='$archlib'
10686 archlibexp='$archlibexp'
10687 archname='$archname'
10688 archobjs='$archobjs'
10689 awk='$awk'
10690 baserev='$baserev'
10691 bash='$bash'
10692 bin='$bin'
10693 binexp='$binexp'
10694 bison='$bison'
10695 byacc='$byacc'
10696 byteorder='$byteorder'
10697 c='$c'
10698 castflags='$castflags'
10699 cat='$cat'
10700 cc='$cc'
10701 cccdlflags='$cccdlflags'
10702 ccdlflags='$ccdlflags'
10703 ccflags='$ccflags'
10704 cf_by='$cf_by'
10705 cf_email='$cf_email'
10706 cf_time='$cf_time'
10707 chgrp='$chgrp'
10708 chmod='$chmod'
10709 chown='$chown'
10710 clocktype='$clocktype'
10711 comm='$comm'
10712 compress='$compress'
10713 contains='$contains'
10714 cp='$cp'
10715 cpio='$cpio'
10716 cpp='$cpp'
10717 cpp_stuff='$cpp_stuff'
10718 cppflags='$cppflags'
10719 cpplast='$cpplast'
10720 cppminus='$cppminus'
10721 cpprun='$cpprun'
10722 cppstdin='$cppstdin'
10723 cryptlib='$cryptlib'
10724 csh='$csh'
10725 d_Gconvert='$d_Gconvert'
10726 d_access='$d_access'
10727 d_alarm='$d_alarm'
10728 d_archlib='$d_archlib'
10729 d_attribut='$d_attribut'
10730 d_bcmp='$d_bcmp'
10731 d_bcopy='$d_bcopy'
10732 d_bsd='$d_bsd'
10733 d_bsdgetpgrp='$d_bsdgetpgrp'
10734 d_bsdsetpgrp='$d_bsdsetpgrp'
10735 d_bzero='$d_bzero'
10736 d_casti32='$d_casti32'
10737 d_castneg='$d_castneg'
10738 d_charvspr='$d_charvspr'
10739 d_chown='$d_chown'
10740 d_chroot='$d_chroot'
10741 d_chsize='$d_chsize'
10742 d_closedir='$d_closedir'
10743 d_const='$d_const'
10744 d_crypt='$d_crypt'
10745 d_csh='$d_csh'
10746 d_cuserid='$d_cuserid'
10747 d_dbl_dig='$d_dbl_dig'
10748 d_difftime='$d_difftime'
10749 d_dirnamlen='$d_dirnamlen'
10750 d_dlerror='$d_dlerror'
10751 d_dlopen='$d_dlopen'
10752 d_dlsymun='$d_dlsymun'
10753 d_dosuid='$d_dosuid'
10754 d_dup2='$d_dup2'
10755 d_endhent='$d_endhent'
10756 d_endnent='$d_endnent'
10757 d_endpent='$d_endpent'
10758 d_endsent='$d_endsent'
10759 d_eofnblk='$d_eofnblk'
10760 d_eunice='$d_eunice'
10761 d_fchmod='$d_fchmod'
10762 d_fchown='$d_fchown'
10763 d_fcntl='$d_fcntl'
10764 d_fd_macros='$d_fd_macros'
10765 d_fd_set='$d_fd_set'
10766 d_fds_bits='$d_fds_bits'
10767 d_fgetpos='$d_fgetpos'
10768 d_flexfnam='$d_flexfnam'
10769 d_flock='$d_flock'
10770 d_fork='$d_fork'
10771 d_fpathconf='$d_fpathconf'
10772 d_fsetpos='$d_fsetpos'
10773 d_ftime='$d_ftime'
10774 d_getgrps='$d_getgrps'
10775 d_gethbyaddr='$d_gethbyaddr'
10776 d_gethbyname='$d_gethbyname'
10777 d_gethent='$d_gethent'
10778 d_gethname='$d_gethname'
10779 d_getlogin='$d_getlogin'
10780 d_getnbyaddr='$d_getnbyaddr'
10781 d_getnbyname='$d_getnbyname'
10782 d_getnent='$d_getnent'
10783 d_getpbyname='$d_getpbyname'
10784 d_getpbynumber='$d_getpbynumber'
10785 d_getpent='$d_getpent'
10786 d_getpgid='$d_getpgid'
10787 d_getpgrp2='$d_getpgrp2'
10788 d_getpgrp='$d_getpgrp'
10789 d_getppid='$d_getppid'
10790 d_getprior='$d_getprior'
10791 d_getsbyname='$d_getsbyname'
10792 d_getsbyport='$d_getsbyport'
10793 d_getsent='$d_getsent'
10794 d_gettimeod='$d_gettimeod'
10795 d_gnulibc='$d_gnulibc'
10796 d_htonl='$d_htonl'
10797 d_index='$d_index'
10798 d_inetaton='$d_inetaton'
10799 d_isascii='$d_isascii'
10800 d_killpg='$d_killpg'
10801 d_link='$d_link'
10802 d_locconv='$d_locconv'
10803 d_lockf='$d_lockf'
10804 d_longdbl='$d_longdbl'
10805 d_lstat='$d_lstat'
10806 d_mblen='$d_mblen'
10807 d_mbstowcs='$d_mbstowcs'
10808 d_mbtowc='$d_mbtowc'
10809 d_memcmp='$d_memcmp'
10810 d_memcpy='$d_memcpy'
10811 d_memmove='$d_memmove'
10812 d_memset='$d_memset'
10813 d_mkdir='$d_mkdir'
10814 d_mkfifo='$d_mkfifo'
10815 d_mkstemp='$d_mkstemp'
10816 d_mktime='$d_mktime'
10817 d_msg='$d_msg'
10818 d_msgctl='$d_msgctl'
10819 d_msgget='$d_msgget'
10820 d_msgrcv='$d_msgrcv'
10821 d_msgsnd='$d_msgsnd'
10822 d_mymalloc='$d_mymalloc'
10823 d_nice='$d_nice'
10824 d_oldpthreads='$d_oldpthreads'
10825 d_oldsock='$d_oldsock'
10826 d_open3='$d_open3'
10827 d_pathconf='$d_pathconf'
10828 d_pause='$d_pause'
10829 d_phostname='$d_phostname'
10830 d_pipe='$d_pipe'
10831 d_poll='$d_poll'
10832 d_portable='$d_portable'
10833 d_pthread_yield='$d_pthread_yield'
10834 d_pthreads_created_joinable='$d_pthreads_created_joinable'
10835 d_pwage='$d_pwage'
10836 d_pwchange='$d_pwchange'
10837 d_pwclass='$d_pwclass'
10838 d_pwcomment='$d_pwcomment'
10839 d_pwexpire='$d_pwexpire'
10840 d_pwquota='$d_pwquota'
10841 d_readdir='$d_readdir'
10842 d_readlink='$d_readlink'
10843 d_rename='$d_rename'
10844 d_rewinddir='$d_rewinddir'
10845 d_rmdir='$d_rmdir'
10846 d_safebcpy='$d_safebcpy'
10847 d_safemcpy='$d_safemcpy'
10848 d_sanemcmp='$d_sanemcmp'
10849 d_sched_yield='$d_sched_yield'
10850 d_seekdir='$d_seekdir'
10851 d_select='$d_select'
10852 d_sem='$d_sem'
10853 d_semctl='$d_semctl'
10854 d_semget='$d_semget'
10855 d_semop='$d_semop'
10856 d_setegid='$d_setegid'
10857 d_seteuid='$d_seteuid'
10858 d_setgrps='$d_setgrps'
10859 d_sethent='$d_sethent'
10860 d_setlinebuf='$d_setlinebuf'
10861 d_setlocale='$d_setlocale'
10862 d_setnent='$d_setnent'
10863 d_setpent='$d_setpent'
10864 d_setpgid='$d_setpgid'
10865 d_setpgrp2='$d_setpgrp2'
10866 d_setpgrp='$d_setpgrp'
10867 d_setprior='$d_setprior'
10868 d_setregid='$d_setregid'
10869 d_setresgid='$d_setresgid'
10870 d_setresuid='$d_setresuid'
10871 d_setreuid='$d_setreuid'
10872 d_setrgid='$d_setrgid'
10873 d_setruid='$d_setruid'
10874 d_setsent='$d_setsent'
10875 d_setsid='$d_setsid'
10876 d_setvbuf='$d_setvbuf'
10877 d_sfio='$d_sfio'
10878 d_shm='$d_shm'
10879 d_shmat='$d_shmat'
10880 d_shmatprototype='$d_shmatprototype'
10881 d_shmctl='$d_shmctl'
10882 d_shmdt='$d_shmdt'
10883 d_shmget='$d_shmget'
10884 d_sigaction='$d_sigaction'
10885 d_sigsetjmp='$d_sigsetjmp'
10886 d_socket='$d_socket'
10887 d_sockpair='$d_sockpair'
10888 d_statblks='$d_statblks'
10889 d_stdio_cnt_lval='$d_stdio_cnt_lval'
10890 d_stdio_ptr_lval='$d_stdio_ptr_lval'
10891 d_stdiobase='$d_stdiobase'
10892 d_stdstdio='$d_stdstdio'
10893 d_strchr='$d_strchr'
10894 d_strcoll='$d_strcoll'
10895 d_strctcpy='$d_strctcpy'
10896 d_strerrm='$d_strerrm'
10897 d_strerror='$d_strerror'
10898 d_strtod='$d_strtod'
10899 d_strtol='$d_strtol'
10900 d_strtoul='$d_strtoul'
10901 d_strxfrm='$d_strxfrm'
10902 d_suidsafe='$d_suidsafe'
10903 d_symlink='$d_symlink'
10904 d_syscall='$d_syscall'
10905 d_sysconf='$d_sysconf'
10906 d_sysernlst='$d_sysernlst'
10907 d_syserrlst='$d_syserrlst'
10908 d_system='$d_system'
10909 d_tcgetpgrp='$d_tcgetpgrp'
10910 d_tcsetpgrp='$d_tcsetpgrp'
10911 d_telldir='$d_telldir'
10912 d_time='$d_time'
10913 d_times='$d_times'
10914 d_truncate='$d_truncate'
10915 d_tzname='$d_tzname'
10916 d_umask='$d_umask'
10917 d_uname='$d_uname'
10918 d_vfork='$d_vfork'
10919 d_void_closedir='$d_void_closedir'
10920 d_voidsig='$d_voidsig'
10921 d_voidtty='$d_voidtty'
10922 d_volatile='$d_volatile'
10923 d_vprintf='$d_vprintf'
10924 d_wait4='$d_wait4'
10925 d_waitpid='$d_waitpid'
10926 d_wcstombs='$d_wcstombs'
10927 d_wctomb='$d_wctomb'
10928 d_xenix='$d_xenix'
10929 date='$date'
10930 db_hashtype='$db_hashtype'
10931 db_prefixtype='$db_prefixtype'
10932 defvoidused='$defvoidused'
10933 direntrytype='$direntrytype'
10934 dlext='$dlext'
10935 dlsrc='$dlsrc'
10936 doublesize='$doublesize'
10937 dynamic_ext='$dynamic_ext'
10938 eagain='$eagain'
10939 echo='$echo'
10940 egrep='$egrep'
10941 emacs='$emacs'
10942 eunicefix='$eunicefix'
10943 exe_ext='$exe_ext'
10944 expr='$expr'
10945 extensions='$extensions'
10946 find='$find'
10947 firstmakefile='$firstmakefile'
10948 flex='$flex'
10949 fpostype='$fpostype'
10950 freetype='$freetype'
10951 full_csh='$full_csh'
10952 full_sed='$full_sed'
10953 gcc='$gcc'
10954 gccversion='$gccversion'
10955 gidtype='$gidtype'
10956 glibpth='$glibpth'
10957 grep='$grep'
10958 groupcat='$groupcat'
10959 groupstype='$groupstype'
10960 gzip='$gzip'
10961 h_fcntl='$h_fcntl'
10962 h_sysfile='$h_sysfile'
10963 hint='$hint'
10964 hostcat='$hostcat'
10965 huge='$huge'
10966 i_bsdioctl='$i_bsdioctl'
10967 i_db='$i_db'
10968 i_dbm='$i_dbm'
10969 i_dirent='$i_dirent'
10970 i_dld='$i_dld'
10971 i_dlfcn='$i_dlfcn'
10972 i_fcntl='$i_fcntl'
10973 i_float='$i_float'
10974 i_gdbm='$i_gdbm'
10975 i_grp='$i_grp'
10976 i_limits='$i_limits'
10977 i_locale='$i_locale'
10978 i_malloc='$i_malloc'
10979 i_math='$i_math'
10980 i_memory='$i_memory'
10981 i_ndbm='$i_ndbm'
10982 i_netdb='$i_netdb'
10983 i_neterrno='$i_neterrno'
10984 i_niin='$i_niin'
10985 i_pwd='$i_pwd'
10986 i_rpcsvcdbm='$i_rpcsvcdbm'
10987 i_sfio='$i_sfio'
10988 i_sgtty='$i_sgtty'
10989 i_stdarg='$i_stdarg'
10990 i_stddef='$i_stddef'
10991 i_stdlib='$i_stdlib'
10992 i_string='$i_string'
10993 i_sysdir='$i_sysdir'
10994 i_sysfile='$i_sysfile'
10995 i_sysfilio='$i_sysfilio'
10996 i_sysin='$i_sysin'
10997 i_sysioctl='$i_sysioctl'
10998 i_sysndir='$i_sysndir'
10999 i_sysparam='$i_sysparam'
11000 i_sysresrc='$i_sysresrc'
11001 i_sysselct='$i_sysselct'
11002 i_syssockio='$i_syssockio'
11003 i_sysstat='$i_sysstat'
11004 i_systime='$i_systime'
11005 i_systimek='$i_systimek'
11006 i_systimes='$i_systimes'
11007 i_systypes='$i_systypes'
11008 i_sysun='$i_sysun'
11009 i_syswait='$i_syswait'
11010 i_termio='$i_termio'
11011 i_termios='$i_termios'
11012 i_time='$i_time'
11013 i_unistd='$i_unistd'
11014 i_utime='$i_utime'
11015 i_values='$i_values'
11016 i_varargs='$i_varargs'
11017 i_varhdr='$i_varhdr'
11018 i_vfork='$i_vfork'
11019 incpath='$incpath'
11020 inews='$inews'
11021 installarchlib='$installarchlib'
11022 installbin='$installbin'
11023 installman1dir='$installman1dir'
11024 installman3dir='$installman3dir'
11025 installprivlib='$installprivlib'
11026 installscript='$installscript'
11027 installsitearch='$installsitearch'
11028 installsitelib='$installsitelib'
11029 intsize='$intsize'
11030 known_extensions='$known_extensions'
11031 ksh='$ksh'
11032 large='$large'
11033 ld='$ld'
11034 lddlflags='$lddlflags'
11035 ldflags='$ldflags'
11036 less='$less'
11037 lib_ext='$lib_ext'
11038 libc='$libc'
11039 libperl='$libperl'
11040 libpth='$libpth'
11041 libs='$libs'
11042 libswanted='$libswanted'
11043 line='$line'
11044 lint='$lint'
11045 lkflags='$lkflags'
11046 ln='$ln'
11047 lns='$lns'
11048 locincpth='$locincpth'
11049 loclibpth='$loclibpth'
11050 longdblsize='$longdblsize'
11051 longsize='$longsize'
11052 lp='$lp'
11053 lpr='$lpr'
11054 ls='$ls'
11055 lseektype='$lseektype'
11056 mail='$mail'
11057 mailx='$mailx'
11058 make='$make'
11059 make_set_make='$make_set_make'
11060 mallocobj='$mallocobj'
11061 mallocsrc='$mallocsrc'
11062 malloctype='$malloctype'
11063 man1dir='$man1dir'
11064 man1direxp='$man1direxp'
11065 man1ext='$man1ext'
11066 man3dir='$man3dir'
11067 man3direxp='$man3direxp'
11068 man3ext='$man3ext'
11069 medium='$medium'
11070 mips='$mips'
11071 mips_type='$mips_type'
11072 mkdir='$mkdir'
11073 models='$models'
11074 modetype='$modetype'
11075 more='$more'
11076 mv='$mv'
11077 myarchname='$myarchname'
11078 mydomain='$mydomain'
11079 myhostname='$myhostname'
11080 myuname='$myuname'
11081 n='$n'
11082 netdb_hlen_type='$netdb_hlen_type'
11083 netdb_host_type='$netdb_host_type'
11084 netdb_name_type='$netdb_name_type'
11085 netdb_net_type='$netdb_net_type'
11086 nm='$nm'
11087 nm_opt='$nm_opt'
11088 nm_so_opt='$nm_so_opt'
11089 nroff='$nroff'
11090 o_nonblock='$o_nonblock'
11091 obj_ext='$obj_ext'
11092 optimize='$optimize'
11093 orderlib='$orderlib'
11094 osname='$osname'
11095 osvers='$osvers'
11096 package='$package'
11097 pager='$pager'
11098 passcat='$passcat'
11099 patchlevel='$patchlevel'
11100 path_sep='$path_sep'
11101 perl='$perl'
11102 perladmin='$perladmin'
11103 perlpath='$perlpath'
11104 pg='$pg'
11105 phostname='$phostname'
11106 pidtype='$pidtype'
11107 plibpth='$plibpth'
11108 pmake='$pmake'
11109 pr='$pr'
11110 prefix='$prefix'
11111 prefixexp='$prefixexp'
11112 privlib='$privlib'
11113 privlibexp='$privlibexp'
11114 prototype='$prototype'
11115 ptrsize='$ptrsize'
11116 randbits='$randbits'
11117 ranlib='$ranlib'
11118 rd_nodata='$rd_nodata'
11119 rm='$rm'
11120 rmail='$rmail'
11121 runnm='$runnm'
11122 scriptdir='$scriptdir'
11123 scriptdirexp='$scriptdirexp'
11124 sed='$sed'
11125 selecttype='$selecttype'
11126 sendmail='$sendmail'
11127 sh='$sh'
11128 shar='$shar'
11129 sharpbang='$sharpbang'
11130 shmattype='$shmattype'
11131 shortsize='$shortsize'
11132 shrpenv='$shrpenv'
11133 shsharp='$shsharp'
11134 sig_name='$sig_name'
11135 sig_name_init='$sig_name_init'
11136 sig_num='$sig_num'
11137 signal_t='$signal_t'
11138 sitearch='$sitearch'
11139 sitearchexp='$sitearchexp'
11140 sitelib='$sitelib'
11141 sitelibexp='$sitelibexp'
11142 sizetype='$sizetype'
11143 sleep='$sleep'
11144 smail='$smail'
11145 small='$small'
11146 so='$so'
11147 sockethdr='$sockethdr'
11148 socketlib='$socketlib'
11149 sort='$sort'
11150 spackage='$spackage'
11151 spitshell='$spitshell'
11152 split='$split'
11153 src='$src'
11154 ssizetype='$ssizetype'
11155 startperl='$startperl'
11156 startsh='$startsh'
11157 static_ext='$static_ext'
11158 stdchar='$stdchar'
11159 stdio_base='$stdio_base'
11160 stdio_bufsiz='$stdio_bufsiz'
11161 stdio_cnt='$stdio_cnt'
11162 stdio_filbuf='$stdio_filbuf'
11163 stdio_ptr='$stdio_ptr'
11164 strings='$strings'
11165 submit='$submit'
11166 subversion='$subversion'
11167 sysman='$sysman'
11168 tail='$tail'
11169 tar='$tar'
11170 tbl='$tbl'
11171 tee='$tee'
11172 test='$test'
11173 timeincl='$timeincl'
11174 timetype='$timetype'
11175 touch='$touch'
11176 tr='$tr'
11177 troff='$troff'
11178 uidtype='$uidtype'
11179 uname='$uname'
11180 uniq='$uniq'
11181 usedl='$usedl'
11182 usemymalloc='$usemymalloc'
11183 usenm='$usenm'
11184 useopcode='$useopcode'
11185 useperlio='$useperlio'
11186 useposix='$useposix'
11187 usesfio='$usesfio'
11188 useshrplib='$useshrplib'
11189 usethreads='$usethreads'
11190 usevfork='$usevfork'
11191 usrinc='$usrinc'
11192 uuname='$uuname'
11193 vi='$vi'
11194 voidflags='$voidflags'
11195 xlibpth='$xlibpth'
11196 zcat='$zcat'
11197 zip='$zip'
11198 EOT
11199
11200 : add special variables
11201 $test -f $src/patchlevel.h && \
11202 awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
11203 echo "CONFIG=true" >>config.sh
11204
11205 : propagate old symbols
11206 if $test -f UU/config.sh; then
11207         <UU/config.sh sort | uniq >UU/oldconfig.sh
11208         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
11209         sort | uniq -u >UU/oldsyms
11210         set X `cat UU/oldsyms`
11211         shift
11212         case $# in
11213         0) ;;
11214         *)
11215                 cat <<EOM
11216 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
11217 EOM
11218                 echo "# Variables propagated from previous config.sh file." >>config.sh
11219                 for sym in `cat UU/oldsyms`; do
11220                         echo "    Propagating $hint variable "'$'"$sym..."
11221                         eval 'tmp="$'"${sym}"'"'
11222                         echo "$tmp" | \
11223                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
11224                 done
11225                 ;;
11226         esac
11227 fi
11228
11229 : Finish up by extracting the .SH files
11230 case "$alldone" in
11231 exit)
11232         $rm -rf UU
11233         echo "Done."
11234         exit 0
11235         ;;
11236 cont)
11237         ;;
11238 '')
11239         dflt=''
11240         nostick=true
11241         $cat <<EOM
11242
11243 If you'd like to make any changes to the config.sh file before I begin
11244 to configure things, do it as a shell escape now (e.g. !vi config.sh).
11245
11246 EOM
11247         rp="Press return or use a shell escape to edit config.sh:"
11248         . UU/myread
11249         nostick=''
11250         case "$ans" in
11251         '') ;;
11252         *) : in case they cannot read
11253                 sh 1>&4 -c "$ans";;
11254         esac
11255         ;;
11256 esac
11257
11258 : if this fails, just run all the .SH files by hand
11259 . ./config.sh
11260
11261 echo " "
11262 exec 1>&4
11263 . ./UU/extract
11264
11265 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
11266         dflt=y
11267         case "$silent" in
11268         true) ;;
11269         *)
11270                 $cat <<EOM
11271
11272 Now you need to generate make dependencies by running "make depend".
11273 You might prefer to run it in background: "make depend > makedepend.out &"
11274 It can take a while, so you might not want to run it right now.
11275
11276 EOM
11277                 ;;
11278         esac
11279         rp="Run make depend now?"
11280         . UU/myread
11281         case "$ans" in
11282         y*)
11283                 make depend && echo "Now you must run a make."
11284                 ;;
11285         *)
11286                 echo "You must run 'make depend' then 'make'."
11287                 ;;
11288         esac
11289 elif test -f [Mm]akefile; then
11290         echo " "
11291         echo "Now you must run a make."
11292 else
11293         echo "Done."
11294 fi
11295
11296 if $test -f Policy.sh; then
11297     $cat <<EOM
11298
11299 If you compile $package on a different machine or from a different object
11300 directory, copy the Policy.sh file from this object directory to the
11301 new one before you run Configure -- this will help you with most of
11302 the policy defaults.
11303
11304 EOM
11305 fi
11306 if $test -f config.msg; then
11307     echo "Hmm.  I also noted the following information while running:"
11308     echo " "
11309     $cat config.msg >&4
11310     $rm -f config.msg
11311 fi
11312 $rm -f kit*isdone ark*isdone
11313 $rm -rf UU
11314
11315 : End of Configure
11316