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