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