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