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