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