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