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