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