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