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