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