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