This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Eliminate Alpha warnings
[perl5.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@perl.com 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@perl.com).
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@perl.com) 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@perl.com
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                         svr4*|esix*)    dflt='-Kpic' ;;
4417                         irix*)  dflt='-KPIC' ;;
4418                         solaris) case "$ccflags" in
4419                                 *-DDEBUGGING*)  dflt='-KPIC' ;;
4420                                 *)              dflt='-Kpic' ;;
4421                                 esac ;;
4422                         sunos)  dflt='-pic' ;;
4423                         *)      dflt='none' ;;
4424                     esac ;;
4425                 *)  case "$osname/$ccflags" in
4426                         solaris/*-DDEBUGGING*)  dflt='-fPIC' ;;
4427                         *)                      dflt='-fpic' ;;
4428                     esac ;;
4429             esac ;;
4430     *)  dflt="$cccdlflags" ;;
4431     esac
4432     rp="Any special flags to pass to $cc -c to compile shared library modules?"
4433     . ./myread
4434     case "$ans" in
4435     none) cccdlflags=' ' ;;
4436     *) cccdlflags="$ans" ;;
4437     esac
4438
4439     cat << EOM
4440
4441 Some systems use ld to create libraries that can be dynamically loaded,
4442 while other systems (such as those using ELF) use $cc.
4443
4444 EOM
4445         case "$ld" in
4446         '')     $cat >try.c <<'EOM'
4447 /* Test for whether ELF binaries are produced */
4448 #include <fcntl.h>
4449 #include <stdlib.h>
4450 main() {
4451         char b[4];
4452         int i = open("a.out",O_RDONLY);
4453         if(i == -1) 
4454                 exit(1); /* fail */
4455         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
4456                 exit(0); /* succeed (yes, it's ELF) */
4457         else
4458                 exit(1); /* fail */
4459 }
4460 EOM
4461                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
4462                         cat <<EOM
4463 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
4464 EOM
4465                         dflt="$cc"
4466                 else
4467                         echo "I'll use ld to build dynamic libraries."
4468                         dflt='ld'
4469                 fi
4470                 rm -f try.c a.out
4471                 ;;
4472         *)      dflt="$ld"
4473                 ;;
4474         esac
4475
4476     rp="What command should be used to create dynamic libraries?"
4477     . ./myread
4478         ld="$ans"
4479
4480     cat << EOM
4481
4482 Some systems may require passing special flags to $ld to create a
4483 library that can be dynamically loaded.  If your ld flags include
4484 -L/other/path options to locate libraries outside your loader's normal
4485 search path, you may need to specify those -L options here as well.  To
4486 use no flags, say "none".
4487
4488 EOM
4489     case "$lddlflags" in
4490     '') case "$osname" in
4491                         hpux)  dflt='-b' ;;
4492                         linux|irix*)    dflt='-shared' ;;
4493                         next)  dflt='none' ;;
4494                         solaris) dflt='-G' ;;
4495                         sunos) dflt='-assert nodefinitions' ;;
4496                         svr4*|esix*) dflt="-G $ldflags" ;;
4497                 *)     dflt='none' ;;
4498                         esac
4499                         ;;
4500     *) dflt="$lddlflags" ;;
4501     esac
4502
4503 : Try to guess additional flags to pick up local libraries.
4504 for thisflag in $ldflags; do
4505         case "$thisflag" in
4506         -L*)
4507                 case " $dflt " in
4508                 *" $thisflag "*) ;;
4509                 *) dflt="$dflt $thisflag" ;;
4510                 esac
4511                 ;;
4512         esac
4513 done
4514
4515 case "$dflt" in
4516 '') dflt='none' ;;
4517 esac
4518
4519     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
4520     . ./myread
4521     case "$ans" in
4522     none) lddlflags=' ' ;;
4523     *) lddlflags="$ans" ;;
4524     esac
4525
4526         cat <<EOM
4527
4528 Some systems may require passing special flags to $cc to indicate that
4529 the resulting executable will use dynamic linking.  To use no flags,
4530 say "none".
4531
4532 EOM
4533     case "$ccdlflags" in
4534     '') case "$osname" in
4535                 hpux)   dflt='-Wl,-E' ;;
4536                 linux)  dflt='-rdynamic' ;;
4537                 next)   dflt='none' ;;
4538                 sunos)  dflt='none' ;;
4539                 *)      dflt='none' ;;
4540             esac ;;
4541     *)  dflt="$ccdlflags" ;;
4542     esac
4543     rp="Any special flags to pass to $cc to use dynamic loading?"
4544     . ./myread
4545     case "$ans" in
4546     none) ccdlflags=' ' ;;
4547     *) ccdlflags="$ans" ;;
4548     esac
4549     ;;
4550 *)  usedl="$undef"
4551         ld='ld'
4552     dlsrc='dl_none.xs'
4553     lddlflags=''
4554     ccdlflags=''
4555     ;;
4556 esac
4557
4558 also=''
4559 case "$usedl" in
4560 $undef)
4561         # No dynamic loading being used, so don't bother even to prompt.
4562         useshrplib='false'
4563         ;;
4564 *)      case "$useshrplib" in
4565         '')     case "$osname" in
4566                 svr4*|dgux|dynixptx|esix|powerux)
4567                         dflt='yes'
4568                         also='Building a shared libperl is required for dynamic loading to work on your system.'
4569                         ;;
4570                 next*)
4571                         case "$osvers" in
4572                         4*)     dflt='yes'
4573                                 also='Building a shared libperl is needed for MAB support.'
4574                                 ;;
4575                         *)      dflt='no'
4576                                 ;;
4577                         esac
4578                         ;;
4579                 sunos)
4580                         dflt='no'
4581                         also='Building a shared libperl will definitely not work on SunOS 4.'
4582                         ;;
4583                 *)      dflt='no'
4584                         ;;
4585                 esac
4586                 ;;
4587         $define|true|[Yy]*)
4588                 dflt='yes'
4589                 ;;
4590         *)      dflt='no'
4591                 ;;
4592         esac
4593         $cat << EOM
4594
4595 The perl executable is normally obtained by linking perlmain.c with
4596 libperl${lib_ext}, any static extensions (usually just DynaLoader), and
4597 any other libraries needed on this system (such as -lm, etc.).  Since
4598 your system supports dynamic loading, it is probably possible to build
4599 a shared libperl.$so.  If you will have more than one executable linked
4600 to libperl.$so, this will significantly reduce the size of each
4601 executable, but it may have a noticeable affect on performance.  The
4602 default is probably sensible for your system.
4603 $also
4604
4605 EOM
4606         rp="Build a shared libperl.$so (y/n)"
4607         . ./myread
4608         case "$ans" in
4609         true|$define|[Yy]*)
4610                 useshrplib='true'
4611                 # Why does next4 have to be so different?
4612                 case "${osname}${osvers}" in
4613                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
4614                 *)              xxx='LD_LIBRARY_PATH' ;;
4615                 esac
4616                 $cat <<EOM >&4
4617
4618 To build perl, you must add the current working directory to your
4619 $xxx environtment variable before running make.  You can do
4620 this with
4621    $xxx=\`pwd\`; export $xxx
4622 for Bourne-style shells, or
4623    setenv $xxx \`pwd\`
4624 for Csh-style shells.  You *MUST* do this before running make.
4625
4626 EOM
4627                 ;;
4628         *)      useshrplib='false' ;;
4629         esac
4630         ;;
4631 esac
4632
4633 case "$useshrplib" in
4634 true)
4635         case "$libperl" in
4636         '')
4637                 # Figure out a good name for libperl.so.  Since it gets stored in
4638                 # a version-specific architecture-dependent library, the version
4639                 # number isn't really that important, except for making cc/ld happy.
4640                 #
4641                 # A name such as libperl.so.3.1
4642                 majmin="libperl.$so.$patchlevel.$subversion"
4643                 # A name such as libperl.so.301
4644                 majonly=`echo $patchlevel $subversion |
4645                         $awk '{printf "%d%02d", $1, $2}'`
4646                 majonly=libperl.$so.$majonly
4647                 # I'd prefer to keep the os-specific stuff here to a minimum, and
4648                 # rely on figuring it out from the naming of libc.
4649                 case "${osname}${osvers}" in
4650                 next4*)
4651                         dflt=libperl.5.$so
4652                         # XXX How handle the --version stuff for MAB?
4653                         ;;
4654                 linux*)  # ld won't link with a bare -lperl otherwise.
4655                         dflt=libperl.$so
4656                         ;;
4657                 *)      # Try to guess based on whether libc has major.minor.
4658                         case "$libc" in
4659                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
4660                         *libc.$so.[0-9]*) dflt=$majonly ;;
4661                         *)      dflt=libperl.$so ;;
4662                         esac
4663                         ;;
4664                 esac
4665                 ;;
4666         *)      dflt=$libperl
4667                 ;;
4668         esac
4669         cat << EOM
4670
4671 I need to select a good name for the shared libperl.  If your system uses
4672 library names with major and minor numbers, then you might want something
4673 like $majmin.  Alternatively, if your system uses a single version
4674 number for shared libraries, then you might want to use $majonly.
4675 Or, your system might be quite happy with a simple libperl.$so.
4676
4677 Since the shared libperl will get installed into a version-specific
4678 architecture-dependent directory, the version number of the shared perl
4679 library probably isn't important, so the default should be o.k.
4680
4681 EOM
4682         rp='What name do you want to give to the shared libperl?'
4683         . ./myread
4684         libperl=$ans
4685         echo "Ok, I'll use $libperl"
4686         ;;
4687 *)
4688         libperl="libperl${lib_ext}"
4689         ;;
4690 esac
4691
4692 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
4693 case "$shrpdir" in
4694 '') ;;
4695 *)      $cat >&4 <<EOM
4696 WARNING:  Use of the shrpdir variable for the installation location of
4697 the shared $libperl is not supported.  It was never documented and
4698 will not work in this version.  Let me (chip@perl.com) know of any
4699 problems this may cause.
4700
4701 EOM
4702         case "$shrpdir" in
4703         "$archlibexp/CORE")
4704                 $cat >&4 <<EOM
4705 But your current setting of $shrpdir is
4706 the default anyway, so it's harmless.
4707 EOM
4708                 ;;
4709         *)
4710                 $cat >&4 <<EOM
4711 Further, your current attempted setting of $shrpdir
4712 conflicts with the value of $archlibexp/CORE
4713 that installperl will use.
4714 EOM
4715                 ;;
4716         esac
4717         ;;
4718 esac
4719
4720 # How will the perl executable find the installed shared $libperl?
4721 # Add $xxx to ccdlflags.
4722 # If we can't figure out a command-line option, use $shrpenv to
4723 # set env LD_RUN_PATH.  The main perl makefile uses this.
4724 shrpdir=$archlibexp/CORE
4725 xxx=''
4726 tmp_shrpenv=''
4727 if "$useshrplib"; then
4728     case "$osname" in 
4729         solaris|netbsd)
4730                 xxx="-R $shrpdir"
4731                 ;;
4732         freebsd)
4733                 xxx="-Wl,-R$shrpdir"
4734                 ;;
4735         linux|irix*|dec_osf)
4736                 xxx="-Wl,-rpath,$shrpdir"
4737                 ;;
4738         *)
4739                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
4740                 ;;
4741         esac
4742         case "$xxx" in
4743         '') ;;
4744         *)      
4745                 # Only add $xxx if it isn't already in ccdlflags.
4746                 case " $ccdlflags " in
4747                 *" $xxx "*)     ;;
4748                 *)      ccdlflags="$ccdlflags $xxx"
4749                         cat <<EOM >&4
4750
4751 Adding $xxx to the flags
4752 passed to $ld so that the perl executable will find the 
4753 installed shared $libperl.
4754
4755 EOM
4756                         ;;
4757                 esac
4758                 ;;
4759         esac
4760 fi
4761 # Respect a hint or command-line value.
4762 case "$shrpenv" in
4763 '') shrpenv="$tmp_shrpenv" ;;
4764 esac
4765
4766 : determine where manual pages go
4767 set man1dir man1dir none
4768 eval $prefixit
4769 $cat <<EOM
4770
4771 $spackage has manual pages available in source form.
4772 EOM
4773 case "$nroff" in
4774 nroff)
4775         echo "However, you don't have nroff, so they're probably useless to you."
4776         case "$man1dir" in
4777         '') man1dir="none";;
4778         esac;;
4779 esac
4780 echo "If you don't want the manual sources installed, answer 'none'."
4781 case "$man1dir" in
4782 ' ') dflt=none
4783         ;;
4784 '')
4785         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
4786         lookpath="$lookpath $prefixexp/man/p_man/man1"
4787         lookpath="$lookpath $prefixexp/man/u_man/man1"
4788         lookpath="$lookpath $prefixexp/man/man.1"
4789         : If prefix contains 'perl' then we want to keep the man pages
4790         : under the prefix directory.  Otherwise, look in a variety of
4791         : other possible places.  This is debatable, but probably a
4792         : good compromise.  Well, apparently not.
4793         : Experience has shown people expect man1dir to be under prefix,
4794         : so we now always put it there.  Users who want other behavior
4795         : can answer interactively or use a command line option.
4796         : Does user have System V-style man paths.
4797         case "$sysman" in
4798         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
4799         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
4800         esac
4801         set dflt
4802         eval $prefixup
4803         ;;
4804 *)  dflt="$man1dir"
4805         ;;
4806 esac
4807 echo " "
4808 fn=dn+~
4809 rp="Where do the main $spackage manual pages (source) go?"
4810 . ./getfile
4811 if $test "X$man1direxp" != "X$ansexp"; then
4812         installman1dir=''
4813 fi
4814 man1dir="$ans"
4815 man1direxp="$ansexp"
4816 case "$man1dir" in
4817 '') man1dir=' '
4818         installman1dir='';;
4819 esac
4820 if $afs; then
4821         $cat <<EOM
4822
4823 Since you are running AFS, I need to distinguish the directory in which
4824 manual pages reside from the directory in which they are installed (and from
4825 which they are presumably copied to the former directory by occult means).
4826
4827 EOM
4828         case "$installman1dir" in
4829         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
4830         *) dflt="$installman1dir";;
4831         esac
4832         fn=de~
4833         rp='Where will man pages be installed?'
4834         . ./getfile
4835         installman1dir="$ans"
4836 else
4837         installman1dir="$man1direxp"
4838 fi
4839
4840 : What suffix to use on installed man pages
4841
4842 case "$man1dir" in
4843 ' ')
4844         man1ext='0'
4845         ;;
4846 *)
4847         rp="What suffix should be used for the main $spackage man pages?"
4848         case "$man1ext" in
4849         '')     case "$man1dir" in
4850                 *1)  dflt=1 ;;
4851                 *1p) dflt=1p ;;
4852                 *1pm) dflt=1pm ;;
4853                 *l) dflt=l;;
4854                 *n) dflt=n;;
4855                 *o) dflt=o;;
4856                 *p) dflt=p;;
4857                 *C) dflt=C;;
4858                 *L) dflt=L;;
4859                 *L1) dflt=L1;;
4860                 *) dflt=1;;
4861                 esac
4862                 ;;
4863         *)      dflt="$man1ext";;
4864         esac
4865         . ./myread
4866         man1ext="$ans"
4867         ;;
4868 esac
4869
4870 : see if we can have long filenames
4871 echo " "
4872 rmlist="$rmlist /tmp/cf$$"
4873 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
4874 first=123456789abcdef
4875 second=/tmp/cf$$/$first
4876 $rm -f $first $second
4877 if (echo hi >$first) 2>/dev/null; then
4878         if $test -f 123456789abcde; then
4879                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
4880                 val="$undef"
4881         else
4882                 if (echo hi >$second) 2>/dev/null; then
4883                         if $test -f /tmp/cf$$/123456789abcde; then
4884                                 $cat <<'EOM'
4885 That's peculiar... You can have filenames longer than 14 characters, but only
4886 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
4887 I shall consider your system cannot support long filenames at all.
4888 EOM
4889                                 val="$undef"
4890                         else
4891                                 echo 'You can have filenames longer than 14 characters.' >&4
4892                                 val="$define"
4893                         fi
4894                 else
4895                         $cat <<'EOM'
4896 How confusing! Some of your filesystems are sane enough to allow filenames
4897 longer than 14 characters but some others like /tmp can't even think about them.
4898 So, for now on, I shall assume your kernel does not allow them at all.
4899 EOM
4900                         val="$undef"
4901                 fi
4902         fi
4903 else
4904         $cat <<'EOM'
4905 You can't have filenames longer than 14 chars.  You can't even think about them!
4906 EOM
4907         val="$undef"
4908 fi 
4909 set d_flexfnam
4910 eval $setvar
4911 $rm -rf /tmp/cf$$ 123456789abcde*
4912
4913 : determine where library module manual pages go
4914 set man3dir man3dir none
4915 eval $prefixit
4916 $cat <<EOM
4917
4918 $spackage has manual pages for many of the library modules.
4919 EOM
4920
4921 case "$nroff" in
4922 nroff)
4923         $cat <<'EOM'
4924 However, you don't have nroff, so they're probably useless to you.
4925 You can use the supplied perldoc script instead.
4926 EOM
4927         case "$man3dir" in
4928         '') man3dir="none";;
4929         esac;;
4930 esac
4931
4932 case "$d_flexfnam" in
4933 undef)
4934         $cat <<'EOM'
4935 However, your system can't handle the long file names like File::Basename.3. 
4936 You can use the supplied perldoc script instead.
4937 EOM
4938         case "$man3dir" in
4939         '') man3dir="none";;
4940         esac;;
4941 esac
4942
4943 echo "If you don't want the manual sources installed, answer 'none'."
4944 : We dont use /usr/local/man/man3 because some man programs will
4945 : only show the /usr/local/man/man3 contents, and not the system ones,
4946 : thus man less will show the perl module less.pm, but not the system
4947 : less command.  We might also conflict with TCL man pages.
4948 : However, something like /opt/perl/man/man3 is fine.
4949 case "$man3dir" in
4950 '')     case "$prefix" in 
4951         *perl*) dflt=`echo $man1dir | 
4952                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
4953         *)      dflt="$privlib/man/man3" ;;
4954         esac
4955         ;;
4956 ' ') dflt=none;;
4957 *)      dflt="$man3dir" ;;
4958 esac
4959 echo " "
4960
4961 fn=dn+~
4962 rp="Where do the $spackage library man pages (source) go?"
4963 . ./getfile
4964 if test "X$man3direxp" != "X$ansexp"; then
4965         installman3dir=''
4966 fi
4967
4968 man3dir="$ans"
4969 man3direxp="$ansexp"
4970 case "$man3dir" in
4971 '') man3dir=' '
4972         installman3dir='';;
4973 esac
4974 if $afs; then
4975         $cat <<EOM
4976
4977 Since you are running AFS, I need to distinguish the directory in which
4978 manual pages reside from the directory in which they are installed (and from
4979 which they are presumably copied to the former directory by occult means).
4980
4981 EOM
4982         case "$installman3dir" in
4983         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
4984         *) dflt="$installman3dir";;
4985         esac
4986         fn=de~
4987         rp='Where will man pages be installed?'
4988         . ./getfile
4989         installman3dir="$ans"
4990 else
4991         installman3dir="$man3direxp"
4992 fi
4993
4994 : What suffix to use on installed man pages
4995
4996 case "$man3dir" in
4997 ' ')
4998         man3ext='0'
4999         ;;
5000 *)
5001         rp="What suffix should be used for the $spackage library man pages?"
5002         case "$man3ext" in
5003         '')     case "$man3dir" in
5004                 *3)  dflt=3 ;;
5005                 *3p) dflt=3p ;;
5006                 *3pm) dflt=3pm ;;
5007                 *l) dflt=l;;
5008                 *n) dflt=n;;
5009                 *o) dflt=o;;
5010                 *p) dflt=p;;
5011                 *C) dflt=C;;
5012                 *L) dflt=L;;
5013                 *L3) dflt=L3;;
5014                 *) dflt=3;;
5015                 esac
5016                 ;;
5017         *)      dflt="$man3ext";;
5018         esac
5019         . ./myread
5020         man3ext="$ans"
5021         ;;
5022 esac
5023
5024 : see if we have to deal with yellow pages, now NIS.
5025 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5026         if $test -f /usr/etc/nibindd; then
5027                 echo " "
5028                 echo "I'm fairly confident you're on a NeXT."
5029                 echo " "
5030                 rp='Do you get the hosts file via NetInfo?'
5031                 dflt=y
5032                 case "$hostcat" in
5033                 nidump*) ;;
5034                 '') ;;
5035                 *) dflt=n;;
5036                 esac
5037                 . ./myread
5038                 case "$ans" in
5039                 y*) hostcat='nidump hosts .';;
5040                 *)      case "$hostcat" in
5041                         nidump*) hostcat='';;
5042                         esac
5043                         ;;
5044                 esac
5045         fi
5046         case "$hostcat" in
5047         nidump*) ;;
5048         *)
5049                 case "$hostcat" in
5050                 *ypcat*) dflt=y;;
5051                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5052                                 dflt=y
5053                         else
5054                                 dflt=n
5055                         fi;;
5056                 *) dflt=n;;
5057                 esac
5058                 echo " "
5059                 rp='Are you getting the hosts file via yellow pages?'
5060                 . ./myread
5061                 case "$ans" in
5062                 y*) hostcat='ypcat hosts';;
5063                 *) hostcat='cat /etc/hosts';;
5064                 esac
5065                 ;;
5066         esac
5067 fi
5068
5069 : now get the host name
5070 echo " "
5071 echo "Figuring out host name..." >&4
5072 case "$myhostname" in
5073 '') cont=true
5074         echo 'Maybe "hostname" will work...'
5075         if tans=`sh -c hostname 2>&1` ; then
5076                 myhostname=$tans
5077                 phostname=hostname
5078                 cont=''
5079         fi
5080         ;;
5081 *) cont='';;
5082 esac
5083 if $test "$cont"; then
5084         if ./xenix; then
5085                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5086                 if tans=`cat /etc/systemid 2>&1` ; then
5087                         myhostname=$tans
5088                         phostname='cat /etc/systemid'
5089                         echo "Whadyaknow.  Xenix always was a bit strange..."
5090                         cont=''
5091                 fi
5092         elif $test -r /etc/systemid; then
5093                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5094         fi
5095 fi
5096 if $test "$cont"; then
5097         echo 'No, maybe "uuname -l" will work...'
5098         if tans=`sh -c 'uuname -l' 2>&1` ; then
5099                 myhostname=$tans
5100                 phostname='uuname -l'
5101         else
5102                 echo 'Strange.  Maybe "uname -n" will work...'
5103                 if tans=`sh -c 'uname -n' 2>&1` ; then
5104                         myhostname=$tans
5105                         phostname='uname -n'
5106                 else
5107                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5108                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5109                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5110                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5111                         else
5112                                 case "$myhostname" in
5113                                 '') echo "Does this machine have an identity crisis or something?"
5114                                         phostname='';;
5115                                 *)
5116                                         echo "Well, you said $myhostname before..."
5117                                         phostname='echo $myhostname';;
5118                                 esac
5119                         fi
5120                 fi
5121         fi
5122 fi
5123 : you do not want to know about this
5124 set $myhostname
5125 myhostname=$1
5126
5127 : verify guess
5128 if $test "$myhostname" ; then
5129         dflt=y
5130         rp='Your host name appears to be "'$myhostname'".'" Right?"
5131         . ./myread
5132         case "$ans" in
5133         y*) ;;
5134         *) myhostname='';;
5135         esac
5136 fi
5137
5138 : bad guess or no guess
5139 while $test "X$myhostname" = X ; do
5140         dflt=''
5141         rp="Please type the (one word) name of your host:"
5142         . ./myread
5143         myhostname="$ans"
5144 done
5145
5146 : translate upper to lower if necessary
5147 case "$myhostname" in
5148 *[A-Z]*)
5149         echo "(Normalizing case in your host name)"
5150         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5151         ;;
5152 esac
5153
5154 case "$myhostname" in
5155 *.*)
5156         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5157         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5158         echo "(Trimming domain name from host name--host name is now $myhostname)"
5159         ;;
5160 *) case "$mydomain" in
5161         '')
5162                 {
5163                         : If we use NIS, try ypmatch.
5164                         : Is there some reason why this was not done before?
5165                         test "X$hostcat" = "Xypcat hosts" &&
5166                         ypmatch "$myhostname" hosts 2>/dev/null |\
5167                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5168                         $test -s hosts
5169                 } || {
5170                         : Extract only the relevant hosts, reducing file size,
5171                         : remove comments, insert trailing space for later use.
5172                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5173                                         /[       ]$myhostname[  . ]/p" > hosts
5174                 }
5175                 tmp_re="[       . ]"
5176                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5177                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5178                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5179                         hosts | $sort | $uniq | \
5180                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5181                 case `$echo X$dflt` in
5182                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5183                         dflt=.
5184                         ;;
5185                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5186                         ;;
5187                 esac
5188                 case "$dflt" in
5189                 .)
5190                         tans=`./loc resolv.conf X /etc /usr/etc`
5191                         if $test -f "$tans"; then
5192                                 echo "(Attempting domain name extraction from $tans)"
5193                                 : Why was there an Egrep here, when Sed works?
5194                                 : Look for either a search or a domain directive.
5195                                 dflt=.`$sed -n -e 's/   / /g' \
5196                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5197                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5198                                 case "$dflt" in
5199                                 .) dflt=.`$sed -n -e 's/        / /g' \
5200                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5201                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5202                                         ;;
5203                                 esac
5204                         fi
5205                         ;;
5206                 esac
5207                 case "$dflt" in
5208                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5209                         dflt=.`sh -c domainname 2>/dev/null`
5210                         case "$dflt" in
5211                         '') dflt='.';;
5212                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5213                         esac
5214                         ;;
5215                 esac
5216                 case "$dflt" in
5217                 .) echo "(Lost all hope -- silly guess then)"
5218                         dflt='.uucp'
5219                         ;;
5220                 esac
5221                 $rm -f hosts
5222                 ;;
5223         *) dflt="$mydomain";;
5224         esac;;
5225 esac
5226 echo " "
5227 rp="What is your domain name?"
5228 . ./myread
5229 tans="$ans"
5230 case "$ans" in
5231 '') ;;
5232 .*) ;;
5233 *) tans=".$tans";;
5234 esac
5235 mydomain="$tans"
5236
5237 : translate upper to lower if necessary
5238 case "$mydomain" in
5239 *[A-Z]*)
5240         echo "(Normalizing case in your domain name)"
5241         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5242         ;;
5243 esac
5244
5245 : a little sanity check here
5246 case "$phostname" in
5247 '') ;;
5248 *)
5249         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5250         $myhostname$mydomain|$myhostname) ;;
5251         *)
5252                 case "$phostname" in
5253                 sed*)
5254                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5255                         ;;
5256                 *)
5257                         echo "(That doesn't agree with your $phostname command, by the way.)"
5258                         ;;
5259                 esac
5260         ;;
5261         esac
5262         ;;
5263 esac
5264
5265 $cat <<EOM
5266
5267 I need to get your e-mail address in Internet format if possible, i.e.
5268 something like user@host.domain. Please answer accurately since I have
5269 no easy means to double check it. The default value provided below
5270 is most probably close to the reality but may not be valid from outside
5271 your organization...
5272
5273 EOM
5274 cont=x
5275 while test "$cont"; do
5276         case "$cf_email" in
5277         '') dflt="$cf_by@$myhostname$mydomain";;
5278         *) dflt="$cf_email";;
5279         esac
5280         rp='What is your e-mail address?'
5281         . ./myread
5282         cf_email="$ans"
5283         case "$cf_email" in
5284         *@*.*) cont='' ;;
5285         *)
5286                 rp='Address does not look like an Internet one.  Use it anyway?'
5287                 case "$fastread" in
5288                 yes) dflt=y ;;
5289                 *) dflt=n ;;
5290                 esac
5291                 . ./myread
5292                 case "$ans" in
5293                 y*) cont='' ;;
5294                 *) echo " " ;;
5295                 esac
5296                 ;;
5297         esac
5298 done
5299
5300 $cat <<EOM
5301
5302 If you or somebody else will be maintaining perl at your site, please
5303 fill in the correct e-mail address here so that they may be contacted
5304 if necessary. Currently, the "perlbug" program included with perl
5305 will send mail to this address in addition to perlbug@perl.com. You may
5306 enter "none" for no administrator.
5307
5308 EOM
5309 case "$perladmin" in
5310 '') dflt="$cf_email";;
5311 *) dflt="$perladmin";;
5312 esac
5313 rp='Perl administrator e-mail address'
5314 . ./myread
5315 perladmin="$ans"
5316
5317 : figure out how to guarantee perl startup
5318 case "$startperl" in
5319 '')
5320         case "$sharpbang" in
5321         *!)
5322                 $cat <<EOH
5323
5324 I can use the #! construct to start perl on your system. This will
5325 make startup of perl scripts faster, but may cause problems if you
5326 want to share those scripts and perl is not in a standard place
5327 ($binexp/perl) on all your platforms. The alternative is to force
5328 a shell by starting the script with a single ':' character.
5329
5330 EOH
5331                 dflt="$binexp/perl"
5332                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5333                 . ./myread
5334                 case "$ans" in
5335                 none)   startperl=": # use perl";;
5336                 *)      startperl="#!$ans"
5337                         if $test 33 -lt `echo "$ans" | wc -c`; then
5338                                 $cat >&4 <<EOM
5339
5340 WARNING:  Some systems limit the #! command to 32 characters.
5341 If you experience difficulty running Perl scripts with #!, try
5342 installing Perl in a directory with a shorter pathname.
5343
5344 EOM
5345                         fi ;;
5346                 esac
5347                 ;;
5348         *) startperl=": # use perl"
5349                 ;;
5350         esac
5351         ;;
5352 esac
5353 echo "I'll use $startperl to start perl scripts."
5354
5355 : figure best path for perl in scripts
5356 case "$perlpath" in
5357 '')
5358         perlpath="$binexp/perl"
5359         case "$startperl" in
5360         *!*) ;;
5361         *)
5362                 $cat <<EOH
5363
5364 I will use the "eval 'exec'" idiom to start Perl on your system.
5365 I can use the full path of your Perl binary for this purpose, but
5366 doing so may cause problems if you want to share those scripts and
5367 Perl is not always in a standard place ($binexp/perl).
5368
5369 EOH
5370                 dflt="$binexp/perl"
5371                 rp="What path shall I use in \"eval 'exec'\"?"
5372                 . ./myread
5373                 perlpath="$ans"
5374                 ;;
5375         esac
5376         ;;
5377 esac
5378 case "$startperl" in
5379 *!*)    ;;
5380 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
5381 esac
5382
5383 : determine where public executable scripts go
5384 set scriptdir scriptdir
5385 eval $prefixit
5386 case "$scriptdir" in
5387 '')
5388         dflt="$bin"
5389         : guess some guesses
5390         $test -d /usr/share/scripts && dflt=/usr/share/scripts
5391         $test -d /usr/share/bin && dflt=/usr/share/bin
5392         $test -d /usr/local/script && dflt=/usr/local/script
5393         $test -d $prefixexp/script && dflt=$prefixexp/script
5394         set dflt
5395         eval $prefixup
5396         ;;
5397 *)  dflt="$scriptdir"
5398         ;;
5399 esac
5400 $cat <<EOM
5401  
5402 Some installations have a separate directory just for executable scripts so
5403 that they can mount it across multiple architectures but keep the scripts in
5404 one spot.  You might, for example, have a subdirectory of /usr/share for this.
5405 Or you might just lump your scripts in with all your other executables.
5406  
5407 EOM
5408 fn=d~
5409 rp='Where do you keep publicly executable scripts?'
5410 . ./getfile
5411 if $test "X$ansexp" != "X$scriptdirexp"; then
5412         installscript=''
5413 fi
5414 scriptdir="$ans"
5415 scriptdirexp="$ansexp"
5416 if $afs; then
5417         $cat <<EOM
5418
5419 Since you are running AFS, I need to distinguish the directory in which
5420 scripts reside from the directory in which they are installed (and from
5421 which they are presumably copied to the former directory by occult means).
5422
5423 EOM
5424         case "$installscript" in
5425         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
5426         *) dflt="$installscript";;
5427         esac
5428         fn=de~
5429         rp='Where will public scripts be installed?'
5430         . ./getfile
5431         installscript="$ans"
5432 else
5433         installscript="$scriptdirexp"
5434 fi
5435
5436 cat <<EOM
5437
5438 Previous version of $package used the standard IO mechanisms as defined in
5439 <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
5440 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
5441 the default and is the only supported mechanism.  This abstraction
5442 layer can use AT&T's sfio (if you already have sfio installed) or
5443 fall back on standard IO.  This PerlIO abstraction layer is
5444 experimental and may cause problems with some extension modules.
5445
5446 If this doesn't make any sense to you, just accept the default 'n'.
5447 EOM
5448 case "$useperlio" in
5449 $define|true|[yY]*)     dflt='y';;
5450 *) dflt='n';;
5451 esac
5452 rp='Use the experimental PerlIO abstraction layer?'
5453 . ./myread
5454 case "$ans" in
5455 y|Y) 
5456         val="$define"
5457         ;;     
5458 *)      
5459         echo "Ok, doing things the stdio way"
5460         val="$undef"
5461         ;;
5462 esac
5463 set useperlio
5464 eval $setvar 
5465
5466 : Check how to convert floats to strings.
5467 echo " "
5468 echo "Checking for an efficient way to convert floats to strings."
5469 $cat >try.c <<'EOP'
5470 #ifdef TRY_gconvert
5471 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
5472 char *myname = "gconvert";
5473 #endif
5474 #ifdef TRY_gcvt
5475 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
5476 char *myname = "gcvt";
5477 #endif
5478 #ifdef TRY_sprintf
5479 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
5480 char *myname = "sprintf";
5481 #endif
5482
5483 #include <stdio.h>
5484
5485 int
5486 checkit(expect, got)
5487 char *expect;
5488 char *got;
5489 {
5490     if (strcmp(expect, got)) {
5491                 printf("%s oddity:  Expected %s, got %s\n",
5492                         myname, expect, got);
5493                 exit(1);
5494         }
5495 }
5496
5497 int
5498 main()
5499
5500         char buf[64]; 
5501         buf[63] = '\0';
5502
5503         /* This must be 1st test on (which?) platform */
5504         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
5505         Gconvert(0.1, 8, 0, buf);
5506         checkit("0.1", buf);
5507
5508         Gconvert(1.0, 8, 0, buf); 
5509         checkit("1", buf);
5510
5511         Gconvert(0.0, 8, 0, buf); 
5512         checkit("0", buf);
5513
5514         Gconvert(-1.0, 8, 0, buf); 
5515         checkit("-1", buf);
5516
5517         /* Some Linux gcvt's give 1.e+5 here. */
5518         Gconvert(100000.0, 8, 0, buf); 
5519         checkit("100000", buf);
5520         
5521         /* Some Linux gcvt's give -1.e+5 here. */
5522         Gconvert(-100000.0, 8, 0, buf); 
5523         checkit("-100000", buf);
5524
5525         exit(0);
5526 }
5527 EOP
5528 case "$d_Gconvert" in
5529 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
5530 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
5531 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
5532 *) xxx_list='gconvert gcvt sprintf' ;;
5533 esac
5534
5535 for xxx_convert in $xxx_list; do
5536         echo "Trying $xxx_convert"
5537         $rm -f try try.o
5538         if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
5539                 try.c $libs > /dev/null 2>&1 ; then
5540                 echo "$xxx_convert" found. >&4
5541                 if ./try; then
5542                         echo "I'll use $xxx_convert to convert floats into a string." >&4
5543                         break;
5544                 else
5545                         echo "...But $xxx_convert didn't work as I expected."
5546                 fi
5547         else
5548                 echo "$xxx_convert NOT found." >&4
5549         fi
5550 done
5551                 
5552 case "$xxx_convert" in
5553 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
5554 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
5555 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
5556 esac
5557
5558 : Initialize h_fcntl
5559 h_fcntl=false
5560
5561 : Initialize h_sysfile
5562 h_sysfile=false
5563
5564 : access call always available on UNIX
5565 set access d_access
5566 eval $inlibc
5567
5568 : locate the flags for 'access()'
5569 case "$d_access" in
5570 "$define")
5571         echo " "
5572         $cat >access.c <<'EOCP'
5573 #include <sys/types.h>
5574 #ifdef I_FCNTL
5575 #include <fcntl.h>
5576 #endif
5577 #ifdef I_SYS_FILE
5578 #include <sys/file.h>
5579 #endif
5580 #ifdef I_UNISTD
5581 #include <unistd.h>
5582 #endif
5583 main() {
5584         exit(R_OK);
5585 }
5586 EOCP
5587         : check sys/file.h first, no particular reason here
5588         if $test `./findhdr sys/file.h` && \
5589                 $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then
5590                 h_sysfile=true;
5591                 echo "<sys/file.h> defines the *_OK access constants." >&4
5592         elif $test `./findhdr fcntl.h` && \
5593                 $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
5594                 h_fcntl=true;
5595                 echo "<fcntl.h> defines the *_OK access constants." >&4
5596         elif $test `./findhdr unistd.h` && \
5597                 $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
5598                 echo "<unistd.h> defines the *_OK access constants." >&4
5599         else
5600                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
5601         fi
5602         ;;
5603 esac
5604 $rm -f access*
5605
5606 : see if alarm exists
5607 set alarm d_alarm
5608 eval $inlibc
5609
5610 : Look for GNU-cc style attribute checking
5611 echo " "
5612 echo "Checking whether your compiler can handle __attribute__ ..." >&4
5613 $cat >attrib.c <<'EOCP'
5614 #include <stdio.h>
5615 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
5616 EOCP
5617 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
5618         if $contains 'warning' attrib.out >/dev/null 2>&1; then
5619                 echo "Your C compiler doesn't fully support __attribute__."
5620                 val="$undef"
5621         else
5622                 echo "Your C compiler supports __attribute__."
5623                 val="$define"
5624         fi
5625 else
5626         echo "Your C compiler doesn't seem to understand __attribute__ at all."
5627         val="$undef"
5628 fi
5629 set d_attribut
5630 eval $setvar
5631 $rm -f attrib*
5632
5633 : see if bcmp exists
5634 set bcmp d_bcmp
5635 eval $inlibc
5636
5637 : see if bcopy exists
5638 set bcopy d_bcopy
5639 eval $inlibc
5640
5641 : see if this is a unistd.h system
5642 set unistd.h i_unistd
5643 eval $inhdr
5644
5645 : see if getpgrp exists
5646 set getpgrp d_getpgrp
5647 eval $inlibc
5648
5649 echo "Checking to see which flavor of getpgrp is in use . . . "
5650 case "$d_getpgrp" in
5651 "$define")
5652         echo " "
5653         $cat >set.c <<EOP
5654 #$i_unistd I_UNISTD
5655 #include <sys/types.h>
5656 #ifdef I_UNISTD
5657 #  include <unistd.h>
5658 #endif
5659 main()
5660 {
5661         if (getuid() == 0) {
5662                 printf("(I see you are running Configure as super-user...)\n");
5663                 setuid(1);
5664         }
5665 #ifdef TRY_BSD_PGRP
5666         if (getpgrp(1) == 0)
5667                 exit(0);
5668 #else
5669         if (getpgrp() > 0)
5670                 exit(0);
5671 #endif
5672         exit(1);
5673 }
5674 EOP
5675         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5676                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
5677                 val="$define"
5678         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5679                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
5680                 val="$undef"
5681         else
5682                 echo "I can't seem to compile and run the test program."
5683                 if ./usg; then
5684                         xxx="a USG one, i.e. you use getpgrp()."
5685                 else
5686                         # SVR4 systems can appear rather BSD-ish.
5687                         case "$i_unistd" in
5688                         $undef)
5689                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
5690                                 val="$define"
5691                                 ;;
5692                         $define)
5693                                 xxx="probably a USG one, i.e. you use getpgrp()."
5694                                 val="$undef"
5695                                 ;;
5696                         esac
5697                 fi
5698                 echo "Assuming your getpgrp is $xxx" >&4
5699         fi
5700         ;;
5701 *) val="$undef";;
5702 esac
5703 set d_bsdgetpgrp
5704 eval $setvar
5705 $rm -f set set.c
5706
5707 : see if setpgrp exists
5708 set setpgrp d_setpgrp
5709 eval $inlibc
5710
5711 echo "Checking to see which flavor of setpgrp is in use . . . "
5712 case "$d_setpgrp" in
5713 "$define")
5714         echo " "
5715         $cat >set.c <<EOP
5716 #$i_unistd I_UNISTD
5717 #include <sys/types.h>
5718 #ifdef I_UNISTD
5719 #  include <unistd.h>
5720 #endif
5721 main()
5722 {
5723         if (getuid() == 0) {
5724                 printf("(I see you are running Configure as super-user...)\n");
5725                 setuid(1);
5726         }
5727 #ifdef TRY_BSD_PGRP
5728         if (-1 == setpgrp(1, 1))
5729                 exit(0);
5730 #else
5731         if (setpgrp() != -1)
5732                 exit(0);
5733 #endif
5734         exit(1);
5735 }
5736 EOP
5737         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5738                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
5739                 val="$define"
5740         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5741                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
5742                 val="$undef"
5743         else
5744                 echo "I can't seem to compile and run the test program."
5745                 if ./usg; then
5746                         xxx="a USG one, i.e. you use setpgrp()."
5747                 else
5748                         # SVR4 systems can appear rather BSD-ish.
5749                         case "$i_unistd" in
5750                         $undef)
5751                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
5752                                 val="$define"
5753                                 ;;
5754                         $define)
5755                                 xxx="probably a USG one, i.e. you use setpgrp()."
5756                                 val="$undef"
5757                                 ;;
5758                         esac
5759                 fi
5760                 echo "Assuming your setpgrp is $xxx" >&4
5761         fi
5762         ;;
5763 *) val="$undef";;
5764 esac
5765 set d_bsdsetpgrp
5766 eval $setvar
5767 d_bsdpgrp=$d_bsdsetpgrp
5768 $rm -f set set.c
5769 : see if bzero exists
5770 set bzero d_bzero
5771 eval $inlibc
5772
5773 : check for lengths of integral types
5774 echo " "
5775 case "$intsize" in
5776 '')
5777         echo "Checking to see how big your integers are..." >&4
5778         $cat >intsize.c <<'EOCP'
5779 #include <stdio.h>
5780 main()
5781 {
5782         printf("intsize=%d;\n", sizeof(int));
5783         printf("longsize=%d;\n", sizeof(long));
5784         printf("shortsize=%d;\n", sizeof(short));
5785         fflush(stdout);
5786         exit(0);
5787 }
5788 EOCP
5789 #       If $libs contains -lsfio, and sfio is mis-configured, then it
5790 #       sometimes (apparently) runs and exits with a 0 status, but with no
5791 #       output!.  Thus we check with test -s whether we actually got any 
5792 #       output.  I think it has to do with sfio's use of _exit vs. exit,
5793 #       but I don't know for sure.  --Andy Dougherty  1/27/97.
5794         if $cc $optimize $ccflags $ldflags -o intsize intsize.c $libs >/dev/null 2>&1 && 
5795         ./intsize > intsize.out 2>/dev/null && test -s intsize.out ; then
5796                 eval `$cat intsize.out`
5797                 echo "Your integers are $intsize bytes long."
5798                 echo "Your long integers are $longsize bytes long."
5799                 echo "Your short integers are $shortsize bytes long."
5800         else
5801                 $cat >&4 <<EOM
5802
5803 Help! I can't compile and run the intsize test program: please enlighten me!
5804 (This is probably a misconfiguration in your system or libraries, and
5805 you really ought to fix it.  Still, I'll try anyway.)
5806
5807 EOM
5808                 dflt=4
5809                 rp="What is the size of an integer (in bytes)?"
5810                 . ./myread
5811                 intsize="$ans"
5812                 dflt=$intsize
5813                 rp="What is the size of a long integer (in bytes)?"
5814                 . ./myread
5815                 longsize="$ans"
5816                 dflt=2
5817                 rp="What is the size of a short integer (in bytes)?"
5818                 . ./myread
5819                 shortsize="$ans"
5820         fi
5821         ;;
5822 esac
5823 $rm -f intsize intsize.[co] intsize.out
5824
5825 : see if signal is declared as pointer to function returning int or void
5826 echo " "
5827 xxx=`./findhdr signal.h`
5828 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
5829 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
5830         echo "You have int (*signal())() instead of void." >&4
5831         val="$undef"
5832 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
5833         echo "You have void (*signal())() instead of int." >&4
5834         val="$define"
5835 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
5836         echo "You have int (*signal())() instead of void." >&4
5837         val="$undef"
5838 else
5839         case "$d_voidsig" in
5840         '')
5841         echo "I can't determine whether signal handler returns void or int..." >&4
5842                 dflt=void
5843                 rp="What type does your signal handler return?"
5844                 . ./myread
5845                 case "$ans" in
5846                 v*) val="$define";;
5847                 *) val="$undef";;
5848                 esac;;
5849         "$define")
5850                 echo "As you already told me, signal handler returns void." >&4;;
5851         *)
5852                 echo "As you already told me, signal handler returns int." >&4;;
5853         esac
5854 fi
5855 set d_voidsig
5856 eval $setvar
5857 case "$d_voidsig" in
5858 "$define") signal_t="void";;
5859 *) signal_t="int";;
5860 esac
5861 $rm -f $$.tmp
5862
5863 : check for ability to cast large floats to 32-bit ints.
5864 echo " "
5865 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
5866 if $test "$intsize" -eq 4; then
5867         xxx=int
5868 else
5869         xxx=long
5870 fi
5871 $cat >try.c <<EOCP
5872 #include <sys/types.h>
5873 #include <signal.h>
5874 $signal_t blech() { exit(3); }
5875 main()
5876 {
5877         $xxx i32;
5878         double f;
5879         int result = 0;
5880         signal(SIGFPE, blech);
5881
5882         f = (double) 0x7fffffff;
5883         f = 10 * f;
5884         i32  = ($xxx) f;
5885
5886         if (i32 != ($xxx) f)
5887                 result |= 1;
5888         exit(result);
5889 }
5890 EOCP
5891 if $cc -o try $ccflags try.c >/dev/null 2>&1; then
5892         ./try
5893         yyy=$?
5894 else
5895         echo "(I can't seem to compile the test program--assuming it can't)"
5896         yyy=1
5897 fi
5898 case "$yyy" in
5899 0)      val="$define"
5900         echo "Yup, it can."
5901         ;;
5902 *)      val="$undef"
5903         echo "Nope, it can't."
5904         ;;
5905 esac
5906 set d_casti32
5907 eval $setvar
5908 $rm -f try try.*
5909
5910 : check for ability to cast negative floats to unsigned
5911 echo " "
5912 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
5913 $cat >try.c <<EOCP
5914 #include <sys/types.h>
5915 #include <signal.h>
5916 $signal_t blech() { exit(7); }
5917 $signal_t blech_in_list() { exit(4); }
5918 unsigned long dummy_long(p) unsigned long p; { return p; }
5919 unsigned int dummy_int(p) unsigned int p; { return p; }
5920 unsigned short dummy_short(p) unsigned short p; { return p; }
5921 main()
5922 {
5923         double f = -123.;
5924         unsigned long along;
5925         unsigned int aint;
5926         unsigned short ashort;
5927         int result = 0;
5928
5929         signal(SIGFPE, blech);
5930         along = (unsigned long)f;
5931         aint = (unsigned int)f;
5932         ashort = (unsigned short)f;
5933         if (along != (unsigned long)-123)
5934                 result |= 1;
5935         if (aint != (unsigned int)-123)
5936                 result |= 1;
5937         if (ashort != (unsigned short)-123)
5938                 result |= 1;
5939         f = (double)0x40000000;
5940         f = f + f;
5941         along = 0;
5942         along = (unsigned long)f;
5943         if (along != 0x80000000)
5944                 result |= 2;
5945         f -= 1.;
5946         along = 0;
5947         along = (unsigned long)f;
5948         if (along != 0x7fffffff)
5949                 result |= 1;
5950         f += 2.;
5951         along = 0;
5952         along = (unsigned long)f;
5953         if (along != 0x80000001)
5954                 result |= 2;
5955         if (result)
5956                 exit(result);
5957         signal(SIGFPE, blech_in_list);
5958         f = 123.;
5959         along = dummy_long((unsigned long)f);
5960         aint = dummy_int((unsigned int)f);
5961         ashort = dummy_short((unsigned short)f);
5962         if (along != (unsigned long)123)
5963                 result |= 4;
5964         if (aint != (unsigned int)123)
5965                 result |= 4;
5966         if (ashort != (unsigned short)123)
5967                 result |= 4;
5968         exit(result);
5969
5970 }
5971 EOCP
5972 if $cc -o try $ccflags try.c >/dev/null 2>&1; then
5973         ./try
5974         castflags=$?
5975 else
5976         echo "(I can't seem to compile the test program--assuming it can't)"
5977         castflags=7
5978 fi
5979 case "$castflags" in
5980 0)      val="$define"
5981         echo "Yup, it can."
5982         ;;
5983 *)      val="$undef"
5984         echo "Nope, it can't."
5985         ;;
5986 esac
5987 set d_castneg
5988 eval $setvar
5989 $rm -f try.*
5990
5991 : see if vprintf exists
5992 echo " "
5993 if set vprintf val -f d_vprintf; eval $csym; $val; then
5994         echo 'vprintf() found.' >&4
5995         val="$define"
5996         $cat >vprintf.c <<'EOF'
5997 #include <varargs.h>
5998
5999 main() { xxx("foo"); }
6000
6001 xxx(va_alist)
6002 va_dcl
6003 {
6004         va_list args;
6005         char buf[10];
6006
6007         va_start(args);
6008         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6009 }
6010 EOF
6011         if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
6012                 echo "Your vsprintf() returns (int)." >&4
6013                 val2="$undef"
6014         else
6015                 echo "Your vsprintf() returns (char*)." >&4
6016                 val2="$define"
6017         fi
6018 else
6019         echo 'vprintf() NOT found.' >&4
6020                 val="$undef"
6021                 val2="$undef"
6022 fi
6023 set d_vprintf
6024 eval $setvar
6025 val=$val2
6026 set d_charvspr
6027 eval $setvar
6028
6029 : see if chown exists
6030 set chown d_chown
6031 eval $inlibc
6032
6033 : see if chroot exists
6034 set chroot d_chroot
6035 eval $inlibc
6036
6037 : see if chsize exists
6038 set chsize d_chsize
6039 eval $inlibc
6040
6041 : check for const keyword
6042 echo " "
6043 echo 'Checking to see if your C compiler knows about "const"...' >&4
6044 $cat >const.c <<'EOCP'
6045 typedef struct spug { int drokk; } spug;
6046 main()
6047 {
6048         const char *foo;
6049         const spug y;
6050 }
6051 EOCP
6052 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
6053         val="$define"
6054         echo "Yup, it does."
6055 else
6056         val="$undef"
6057         echo "Nope, it doesn't."
6058 fi
6059 set d_const
6060 eval $setvar
6061
6062 : see if crypt exists
6063 echo " "
6064 if set crypt val -f d_crypt; eval $csym; $val; then
6065         echo 'crypt() found.' >&4
6066         val="$define"
6067         cryptlib=''
6068 else
6069         cryptlib=`./loc Slibcrypt$lib_ext "" $xlibpth`
6070         if $test -z "$cryptlib"; then
6071                 cryptlib=`./loc Mlibcrypt$lib_ext "" $xlibpth`
6072         else
6073                 cryptlib=-lcrypt
6074         fi
6075         if $test -z "$cryptlib"; then
6076                 cryptlib=`./loc Llibcrypt$lib_ext "" $xlibpth`
6077         else
6078                 cryptlib=-lcrypt
6079         fi
6080         if $test -z "$cryptlib"; then
6081                 cryptlib=`./loc libcrypt$lib_ext "" $libpth`
6082         else
6083                 cryptlib=-lcrypt
6084         fi
6085         if $test -z "$cryptlib"; then
6086                 echo 'crypt() NOT found.' >&4
6087                 val="$undef"
6088         else
6089                 val="$define"
6090         fi
6091 fi
6092 set d_crypt
6093 eval $setvar
6094
6095 : get csh whereabouts
6096 case "$csh" in
6097 'csh')  val="$undef" ;;
6098 *)      val="$define" ;;
6099 esac
6100 set d_csh
6101 eval $setvar
6102 : Respect a hint or command line value for full_csh.
6103 case "$full_csh" in
6104 '') full_csh=$csh ;;
6105 esac
6106
6107 : see if cuserid exists
6108 set cuserid d_cuserid
6109 eval $inlibc
6110
6111 : see if this is a limits.h system
6112 set limits.h i_limits
6113 eval $inhdr
6114
6115 : see if this is a float.h system
6116 set float.h i_float
6117 eval $inhdr
6118
6119 : See if number of significant digits in a double precision number is known
6120 echo " "
6121 $cat >dbl_dig.c <<EOM
6122 #$i_limits I_LIMITS
6123 #$i_float I_FLOAT
6124 #ifdef I_LIMITS
6125 #include <limits.h>
6126 #endif
6127 #ifdef I_FLOAT
6128 #include <float.h>
6129 #endif
6130 #ifdef DBL_DIG
6131 printf("Contains DBL_DIG");
6132 #endif
6133 EOM
6134 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
6135 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
6136         echo "DBL_DIG found." >&4
6137         val="$define"
6138 else
6139         echo "DBL_DIG NOT found." >&4
6140         val="$undef"
6141 fi
6142 $rm -f dbl_dig.?
6143 set d_dbl_dig
6144 eval $setvar
6145
6146 : see if difftime exists
6147 set difftime d_difftime
6148 eval $inlibc
6149
6150 : see if this is a dirent system
6151 echo " "
6152 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
6153         val="$define"
6154         echo "<dirent.h> found." >&4
6155 else
6156         val="$undef"
6157         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
6158                 echo "<sys/dir.h> found." >&4
6159                 echo " "
6160         else
6161                 xinc=`./findhdr sys/ndir.h`
6162         fi
6163         echo "<dirent.h> NOT found." >&4
6164 fi
6165 set i_dirent
6166 eval $setvar
6167
6168 : Look for type of directory structure.
6169 echo " "
6170 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6171
6172 case "$direntrytype" in
6173 ''|' ')
6174         case "$i_dirent" in
6175         $define) guess1='struct dirent' ;;
6176         *) guess1='struct direct'  ;;
6177         esac
6178         ;;
6179 *)      guess1="$direntrytype"
6180         ;;
6181 esac
6182
6183 case "$guess1" in
6184 'struct dirent') guess2='struct direct' ;;
6185 *) guess2='struct dirent' ;;
6186 esac
6187                 
6188 if $contains "$guess1" try.c >/dev/null 2>&1; then
6189         direntrytype="$guess1"
6190         echo "Your directory entries are $direntrytype." >&4
6191 elif $contains "$guess2" try.c >/dev/null 2>&1; then
6192         direntrytype="$guess2"
6193         echo "Your directory entries seem to be $direntrytype." >&4
6194 else
6195         echo "I don't recognize your system's directory entries." >&4
6196         rp="What type is used for directory entries on this system?"
6197         dflt="$guess1"
6198         . ./myread
6199         direntrytype="$ans"
6200 fi
6201 $rm -f try.c
6202
6203
6204 : see if the directory entry stores field length
6205 echo " "
6206 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6207 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
6208         echo "Good, your directory entry keeps length information in d_namlen." >&4
6209         val="$define"
6210 else
6211         echo "Your directory entry does not know about the d_namlen field." >&4
6212         val="$undef"
6213 fi
6214 set d_dirnamlen
6215 eval $setvar
6216 $rm -f try.c
6217
6218 : see if dlerror exists
6219 xxx_runnm="$runnm"
6220 runnm=false
6221 set dlerror d_dlerror
6222 eval $inlibc
6223 runnm="$xxx_runnm"
6224
6225 : see if dlfcn is available
6226 set dlfcn.h i_dlfcn
6227 eval $inhdr
6228
6229 case "$usedl" in
6230 $define|y|true)
6231         $cat << EOM
6232
6233 On a few systems, the dynamically loaded modules that perl generates and uses
6234 will need a different extension then shared libs. The default will probably
6235 be appropriate.
6236
6237 EOM
6238         case "$dlext" in
6239         '')     dflt="$so" ;;
6240         *)      dflt="$dlext" ;;
6241         esac
6242         rp='What is the extension of dynamically loaded modules'
6243         . ./myread
6244         dlext="$ans"
6245         ;;
6246 *)
6247         dlext="none"
6248         ;;
6249 esac
6250
6251 : Check if dlsym need a leading underscore
6252 echo " "
6253 val="$undef"
6254
6255 case "$dlsrc" in
6256 dl_dlopen.xs)
6257         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
6258         $cat >dyna.c <<'EOM'
6259 fred () { }
6260 EOM
6261
6262 $cat >fred.c<<EOM
6263
6264 #include <stdio.h>
6265 #$i_dlfcn I_DLFCN
6266 #ifdef I_DLFCN
6267 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
6268 #else
6269 #include <sys/types.h>
6270 #include <nlist.h>
6271 #include <link.h>
6272 #endif
6273
6274 extern int fred() ;
6275
6276 main()
6277 {
6278     void * handle ;
6279     void * symbol ;
6280 #ifndef RTLD_LAZY
6281     int mode = 1 ;
6282 #else
6283     int mode = RTLD_LAZY ;
6284 #endif
6285     handle = dlopen("./dyna.$dlext", mode) ;
6286     if (handle == NULL) {
6287         printf ("1\n") ;
6288         fflush (stdout) ;
6289         exit(0);
6290     }
6291     symbol = dlsym(handle, "fred") ;
6292     if (symbol == NULL) {
6293         /* try putting a leading underscore */
6294         symbol = dlsym(handle, "_fred") ;
6295         if (symbol == NULL) {
6296             printf ("2\n") ;
6297             fflush (stdout) ;
6298             exit(0);
6299         }
6300         printf ("3\n") ;
6301     }
6302     else
6303         printf ("4\n") ;
6304     fflush (stdout) ;
6305     exit(0);
6306 }
6307 EOM
6308         : Call the object file tmp-dyna.o in case dlext=o.
6309         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
6310                 mv dyna${obj_ext} tmp-dyna${obj_ext} > /dev/null 2>&1 && 
6311                 $ld $lddlflags -o dyna.$dlext tmp-dyna${obj_ext} > /dev/null 2>&1 && 
6312                 $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
6313                 xxx=`./fred`
6314                 case $xxx in
6315                 1)      echo "Test program failed using dlopen." >&4
6316                         echo "Perhaps you should not use dynamic loading." >&4;;
6317                 2)      echo "Test program failed using dlsym." >&4
6318                         echo "Perhaps you should not use dynamic loading." >&4;;
6319                 3)      echo "dlsym needs a leading underscore" >&4
6320                         val="$define" ;;
6321                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
6322                 esac
6323         else
6324                 echo "I can't compile and run the test program." >&4
6325         fi
6326         ;;
6327 esac
6328                 
6329 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
6330
6331 set d_dlsymun
6332 eval $setvar
6333
6334 : see if dup2 exists
6335 set dup2 d_dup2
6336 eval $inlibc
6337
6338 : Locate the flags for 'open()'
6339 echo " "
6340 $cat >open3.c <<'EOCP'
6341 #include <sys/types.h>
6342 #ifdef I_FCNTL
6343 #include <fcntl.h>
6344 #endif
6345 #ifdef I_SYS_FILE
6346 #include <sys/file.h>
6347 #endif
6348 main() {
6349         if(O_RDONLY);
6350 #ifdef O_TRUNC
6351         exit(0);
6352 #else
6353         exit(1);
6354 #endif
6355 }
6356 EOCP
6357 : check sys/file.h first to get FREAD on Sun
6358 if $test `./findhdr sys/file.h` && \
6359                 $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then
6360         h_sysfile=true;
6361         echo "<sys/file.h> defines the O_* constants..." >&4
6362         if ./open3; then
6363                 echo "and you have the 3 argument form of open()." >&4
6364                 val="$define"
6365         else
6366                 echo "but not the 3 argument form of open().  Oh, well." >&4
6367                 val="$undef"
6368         fi
6369 elif $test `./findhdr fcntl.h` && \
6370                 $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then
6371         h_fcntl=true;
6372         echo "<fcntl.h> defines the O_* constants..." >&4
6373         if ./open3; then
6374                 echo "and you have the 3 argument form of open()." >&4
6375                 val="$define"
6376         else
6377                 echo "but not the 3 argument form of open().  Oh, well." >&4
6378                 val="$undef"
6379         fi
6380 else
6381         val="$undef"
6382         echo "I can't find the O_* constant definitions!  You got problems." >&4
6383 fi
6384 set d_open3
6385 eval $setvar
6386 $rm -f open3*
6387
6388 : check for non-blocking I/O stuff
6389 case "$h_sysfile" in
6390 true) echo "#include <sys/file.h>" > head.c;;
6391 *)
6392         case "$h_fcntl" in
6393         true) echo "#include <fcntl.h>" > head.c;;
6394         *) echo "#include <sys/fcntl.h>" > head.c;;
6395         esac
6396         ;;
6397 esac
6398 echo " "
6399 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
6400 case "$o_nonblock" in
6401 '')
6402         $cat head.c > try.c
6403         $cat >>try.c <<'EOCP'
6404 main() {
6405 #ifdef O_NONBLOCK
6406         printf("O_NONBLOCK\n");
6407         exit(0);
6408 #endif
6409 #ifdef O_NDELAY
6410         printf("O_NDELAY\n");
6411         exit(0);
6412 #endif
6413 #ifdef FNDELAY
6414         printf("FNDELAY\n");
6415         exit(0);
6416 #endif
6417         exit(0);
6418 }
6419 EOCP
6420         if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
6421                 o_nonblock=`./try`
6422                 case "$o_nonblock" in
6423                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
6424                 *) echo "Seems like we can use $o_nonblock.";;
6425                 esac
6426         else
6427                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
6428         fi
6429         ;;
6430 *) echo "Using $hint value $o_nonblock.";;
6431 esac
6432 $rm -f try try.* .out core
6433
6434 echo " "
6435 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
6436 case "$eagain" in
6437 '')
6438         $cat head.c > try.c
6439         $cat >>try.c <<EOCP
6440 #include <errno.h>
6441 #include <sys/types.h>
6442 #include <signal.h>
6443 #define MY_O_NONBLOCK $o_nonblock
6444 extern int errno;
6445 $signal_t blech(x) int x; { exit(3); }
6446 EOCP
6447         $cat >> try.c <<'EOCP'
6448 main()
6449 {
6450         int pd[2];
6451         int pu[2];
6452         char buf[1];
6453         char string[100];
6454
6455         pipe(pd);       /* Down: child -> parent */
6456         pipe(pu);       /* Up: parent -> child */
6457         if (0 != fork()) {
6458                 int ret;
6459                 close(pd[1]);   /* Parent reads from pd[0] */
6460                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
6461                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
6462                         exit(1);
6463                 signal(SIGALRM, blech);
6464                 alarm(5);
6465                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
6466                         exit(2);
6467                 sprintf(string, "%d\n", ret);
6468                 write(2, string, strlen(string));
6469                 alarm(0);
6470 #ifdef EAGAIN
6471                 if (errno == EAGAIN) {
6472                         printf("EAGAIN\n");
6473                         goto ok;
6474                 }
6475 #endif
6476 #ifdef EWOULDBLOCK
6477                 if (errno == EWOULDBLOCK)
6478                         printf("EWOULDBLOCK\n");
6479 #endif
6480         ok:
6481                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
6482                 sleep(2);                               /* Give it time to close our pipe */
6483                 alarm(5);
6484                 ret = read(pd[0], buf, 1);      /* Should read EOF */
6485                 alarm(0);
6486                 sprintf(string, "%d\n", ret);
6487                 write(3, string, strlen(string));
6488                 exit(0);
6489         }
6490
6491         close(pd[0]);                   /* We write to pd[1] */
6492         close(pu[1]);                   /* We read from pu[0] */
6493         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
6494         close(pd[1]);                   /* Pipe pd is now fully closed! */
6495         exit(0);                                /* Bye bye, thank you for playing! */
6496 }
6497 EOCP
6498         if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
6499                 echo "$startsh" >mtry
6500                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
6501                 chmod +x mtry
6502                 ./mtry >/dev/null 2>&1
6503                 case $? in
6504                 0) eagain=`$cat try.out`;;
6505                 1) echo "Could not perform non-blocking setting!";;
6506                 2) echo "I did a successful read() for something that was not there!";;
6507                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
6508                 *) echo "Something terribly wrong happened during testing.";;
6509                 esac
6510                 rd_nodata=`$cat try.ret`
6511                 echo "A read() system call with no data present returns $rd_nodata."
6512                 case "$rd_nodata" in
6513                 0|-1) ;;
6514                 *)
6515                         echo "(That's peculiar, fixing that to be -1.)"
6516                         rd_nodata=-1
6517                         ;;
6518                 esac
6519                 case "$eagain" in
6520                 '')
6521                         echo "Forcing errno EAGAIN on read() with no data available."
6522                         eagain=EAGAIN
6523                         ;;
6524                 *)
6525                         echo "Your read() sets errno to $eagain when no data is available."
6526                         ;;
6527                 esac
6528                 status=`$cat try.err`
6529                 case "$status" in
6530                 0) echo "And it correctly returns 0 to signal EOF.";;
6531                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
6532                 *) echo "However, your read() returns '$status' on EOF??";;
6533                 esac
6534                 val="$define"
6535                 if test "$status" = "$rd_nodata"; then
6536                         echo "WARNING: you can't distinguish between EOF and no data!"
6537                         val="$undef"
6538                 fi
6539         else
6540                 echo "I can't compile the test program--assuming errno EAGAIN will do."
6541                 eagain=EAGAIN
6542         fi
6543         set d_eofnblk
6544         eval $setvar
6545         ;;
6546 *)
6547         echo "Using $hint value $eagain."
6548         echo "Your read() returns $rd_nodata when no data is present."
6549         case "$d_eofnblk" in
6550         "$define") echo "And you can see EOF because read() returns 0.";;
6551         "$undef") echo "But you can't see EOF status from read() returned value.";;
6552         *)
6553                 echo "(Assuming you can't see EOF status from read anyway.)"
6554                 d_eofnblk=$undef
6555                 ;;
6556         esac
6557         ;;
6558 esac
6559 $rm -f try try.* .out core head.c mtry
6560
6561 : see if fchmod exists
6562 set fchmod d_fchmod
6563 eval $inlibc
6564
6565 : see if fchown exists
6566 set fchown d_fchown
6567 eval $inlibc
6568
6569 : see if this is an fcntl system
6570 set fcntl d_fcntl
6571 eval $inlibc
6572
6573 : see if fgetpos exists
6574 set fgetpos d_fgetpos
6575 eval $inlibc
6576
6577 : see if flock exists
6578 set flock d_flock
6579 eval $inlibc
6580
6581 : see if fork exists
6582 set fork d_fork
6583 eval $inlibc
6584
6585 : see if pathconf exists
6586 set pathconf d_pathconf
6587 eval $inlibc
6588
6589 : see if fpathconf exists
6590 set fpathconf d_fpathconf
6591 eval $inlibc
6592
6593 : see if fsetpos exists
6594 set fsetpos d_fsetpos
6595 eval $inlibc
6596
6597 : see if gethostent exists
6598 set gethostent d_gethent
6599 eval $inlibc
6600
6601 : see if getlogin exists
6602 set getlogin d_getlogin
6603 eval $inlibc
6604
6605 : see if getpgid exists
6606 set getpgid d_getpgid
6607 eval $inlibc
6608
6609 : see if getpgrp2 exists
6610 set getpgrp2 d_getpgrp2
6611 eval $inlibc
6612
6613 : see if getppid exists
6614 set getppid d_getppid
6615 eval $inlibc
6616
6617 : see if getpriority exists
6618 set getpriority d_getprior
6619 eval $inlibc
6620
6621 : see if gettimeofday or ftime exists
6622 set gettimeofday d_gettimeod
6623 eval $inlibc
6624 case "$d_gettimeod" in
6625 "$undef")
6626         set ftime d_ftime 
6627         eval $inlibc
6628         ;;
6629 *)
6630         val="$undef"; set d_ftime; eval $setvar
6631         ;;
6632 esac
6633 case "$d_gettimeod$d_ftime" in
6634 "$undef$undef")
6635         echo " "
6636         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
6637         ;;
6638 esac
6639
6640 : see if this is a netinet/in.h or sys/in.h system
6641 set netinet/in.h i_niin sys/in.h i_sysin
6642 eval $inhdr
6643
6644 : see if htonl --and friends-- exists
6645 val=''
6646 set htonl val
6647 eval $inlibc
6648
6649 : Maybe they are macros.
6650 case "$val" in
6651 $undef)
6652         $cat >htonl.c <<EOM
6653 #include <stdio.h>
6654 #include <sys/types.h>
6655 #$i_niin I_NETINET_IN
6656 #$i_sysin I_SYS_IN
6657 #ifdef I_NETINET_IN
6658 #include <netinet/in.h>
6659 #endif
6660 #ifdef I_SYS_IN
6661 #include <sys/in.h>
6662 #endif
6663 #ifdef htonl
6664 printf("Defined as a macro.");
6665 #endif
6666 EOM
6667         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
6668         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
6669                 val="$define"
6670                 echo "But it seems to be defined as a macro." >&4
6671         fi
6672         $rm -f htonl.?
6673         ;;
6674 esac
6675 set d_htonl
6676 eval $setvar
6677
6678 : see which of string.h or strings.h is needed
6679 echo " "
6680 strings=`./findhdr string.h`
6681 if $test "$strings" && $test -r "$strings"; then
6682         echo "Using <string.h> instead of <strings.h>." >&4
6683         val="$define"
6684 else
6685         val="$undef"
6686         strings=`./findhdr strings.h`
6687         if $test "$strings" && $test -r "$strings"; then
6688                 echo "Using <strings.h> instead of <string.h>." >&4
6689         else
6690                 echo "No string header found -- You'll surely have problems." >&4
6691         fi
6692 fi
6693 set i_string
6694 eval $setvar
6695 case "$i_string" in
6696 "$undef") strings=`./findhdr strings.h`;;
6697 *)        strings=`./findhdr string.h`;;
6698 esac
6699
6700 : index or strchr
6701 echo " "
6702 if set index val -f; eval $csym; $val; then
6703         if set strchr val -f d_strchr; eval $csym; $val; then
6704                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
6705                         val="$define"
6706                         vali="$undef"
6707                         echo "strchr() found." >&4
6708                 else
6709                         val="$undef"
6710                         vali="$define"
6711                         echo "index() found." >&4
6712                 fi
6713         else
6714                 val="$undef"
6715                 vali="$define"
6716                 echo "index() found." >&4
6717         fi
6718 else
6719         if set strchr val -f d_strchr; eval $csym; $val; then
6720                 val="$define"
6721                 vali="$undef"
6722                 echo "strchr() found." >&4
6723         else
6724                 echo "No index() or strchr() found!" >&4
6725                 val="$undef"
6726                 vali="$undef"
6727         fi
6728 fi
6729 set d_strchr; eval $setvar
6730 val="$vali"
6731 set d_index; eval $setvar
6732
6733 : check whether inet_aton exists
6734 set inet_aton d_inetaton
6735 eval $inlibc
6736
6737 : Look for isascii
6738 echo " "
6739 $cat >isascii.c <<'EOCP'
6740 #include <stdio.h>
6741 #include <ctype.h>
6742 main() {
6743         int c = 'A';
6744         if (isascii(c))
6745                 exit(0);
6746         else
6747                 exit(1);
6748 }
6749 EOCP
6750 if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
6751         echo "isascii() found." >&4
6752         val="$define"
6753 else
6754         echo "isascii() NOT found." >&4
6755         val="$undef"
6756 fi
6757 set d_isascii
6758 eval $setvar
6759 $rm -f isascii*
6760
6761 : see if killpg exists
6762 set killpg d_killpg
6763 eval $inlibc
6764
6765 : see if link exists
6766 set link d_link
6767 eval $inlibc
6768
6769 : see if localeconv exists
6770 set localeconv d_locconv
6771 eval $inlibc
6772
6773 : see if lockf exists
6774 set lockf d_lockf
6775 eval $inlibc
6776
6777 : see if lstat exists
6778 set lstat d_lstat
6779 eval $inlibc
6780
6781 : see if mblen exists
6782 set mblen d_mblen
6783 eval $inlibc
6784
6785 : see if mbstowcs exists
6786 set mbstowcs d_mbstowcs
6787 eval $inlibc
6788
6789 : see if mbtowc exists
6790 set mbtowc d_mbtowc
6791 eval $inlibc
6792
6793 : see if memcmp exists
6794 set memcmp d_memcmp
6795 eval $inlibc
6796
6797 : see if memcpy exists
6798 set memcpy d_memcpy
6799 eval $inlibc
6800
6801 : see if memmove exists
6802 set memmove d_memmove
6803 eval $inlibc
6804
6805 : see if memset exists
6806 set memset d_memset
6807 eval $inlibc
6808
6809 : see if mkdir exists
6810 set mkdir d_mkdir
6811 eval $inlibc
6812
6813 : see if mkfifo exists
6814 set mkfifo d_mkfifo
6815 eval $inlibc
6816
6817 : see if mktime exists
6818 set mktime d_mktime
6819 eval $inlibc
6820
6821 : see if msgctl exists
6822 set msgctl d_msgctl
6823 eval $inlibc
6824
6825 : see if msgget exists
6826 set msgget d_msgget
6827 eval $inlibc
6828
6829 : see if msgsnd exists
6830 set msgsnd d_msgsnd
6831 eval $inlibc
6832
6833 : see if msgrcv exists
6834 set msgrcv d_msgrcv
6835 eval $inlibc
6836
6837 : see how much of the 'msg*(2)' library is present.
6838 h_msg=true
6839 echo " "
6840 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
6841 *"$undef"*) h_msg=false;;
6842 esac
6843 : we could also check for sys/ipc.h ...
6844 if $h_msg && $test `./findhdr sys/msg.h`; then
6845         echo "You have the full msg*(2) library." >&4
6846         val="$define"
6847 else
6848         echo "You don't have the full msg*(2) library." >&4
6849         val="$undef"
6850 fi
6851 set d_msg
6852 eval $setvar
6853
6854 : see if this is a malloc.h system
6855 set malloc.h i_malloc
6856 eval $inhdr
6857
6858 : see if stdlib is available
6859 set stdlib.h i_stdlib
6860 eval $inhdr
6861
6862 : determine which malloc to compile in
6863 echo " "
6864 case "$usemymalloc" in
6865 ''|y*|true)     dflt='y' ;;
6866 n*|false)       dflt='n' ;;
6867 *)      dflt="$usemymalloc" ;;
6868 esac
6869 rp="Do you wish to attempt to use the malloc that comes with $package?"
6870 . ./myread
6871 usemymalloc="$ans"
6872 case "$ans" in
6873 y*|true)
6874         usemymalloc='y'
6875         mallocsrc='malloc.c'
6876         mallocobj='malloc.o'
6877         d_mymalloc="$define"
6878         case "$libs" in
6879         *-lmalloc*)
6880                 : Remove malloc from list of libraries to use
6881                 echo "Removing unneeded -lmalloc from library list" >&4
6882                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6883                 shift
6884                 libs="$*"
6885                 echo "libs = $libs" >&4
6886                 ;;
6887         esac
6888         ;;
6889 *)
6890         usemymalloc='n'
6891         mallocsrc=''
6892         mallocobj=''
6893         d_mymalloc="$undef"
6894         ;;
6895 esac
6896
6897 : compute the return types of malloc and free
6898 echo " "
6899 $cat >malloc.c <<END
6900 #$i_malloc I_MALLOC
6901 #$i_stdlib I_STDLIB
6902 #include <stdio.h>
6903 #include <sys/types.h>
6904 #ifdef I_MALLOC
6905 #include <malloc.h>
6906 #endif
6907 #ifdef I_STDLIB
6908 #include <stdlib.h>
6909 #endif
6910 #ifdef TRY_MALLOC
6911 void *malloc();
6912 #endif
6913 #ifdef TRY_FREE
6914 void free();
6915 #endif
6916 END
6917 case "$malloctype" in
6918 '')
6919         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6920                 malloctype='void *'
6921         else
6922                 malloctype='char *'
6923         fi
6924         ;;
6925 esac
6926 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6927
6928 case "$freetype" in
6929 '')
6930         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6931                 freetype='void'
6932         else
6933                 freetype='int'
6934         fi
6935         ;;
6936 esac
6937 echo "Your system uses $freetype free(), it would seem." >&4
6938 $rm -f malloc.[co]
6939 : see if nice exists
6940 set nice d_nice
6941 eval $inlibc
6942
6943 : see if pause exists
6944 set pause d_pause
6945 eval $inlibc
6946
6947 : see if pipe exists
6948 set pipe d_pipe
6949 eval $inlibc
6950
6951 : see if poll exists
6952 set poll d_poll
6953 eval $inlibc
6954
6955 : see if this is a pwd.h system
6956 set pwd.h i_pwd
6957 eval $inhdr
6958
6959 case "$i_pwd" in
6960 $define)
6961         xxx=`./findhdr pwd.h`
6962         $cppstdin $cppflags $cppminus < $xxx >$$.h
6963
6964         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
6965                 val="$define"
6966         else
6967                 val="$undef"
6968         fi
6969         set d_pwquota
6970         eval $setvar
6971
6972         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
6973                 val="$define"
6974         else
6975                 val="$undef"
6976         fi
6977         set d_pwage
6978         eval $setvar
6979
6980         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
6981                 val="$define"
6982         else
6983                 val="$undef"
6984         fi
6985         set d_pwchange
6986         eval $setvar
6987
6988         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
6989                 val="$define"
6990         else
6991                 val="$undef"
6992         fi
6993         set d_pwclass
6994         eval $setvar
6995
6996         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
6997                 val="$define"
6998         else
6999                 val="$undef"
7000         fi
7001         set d_pwexpire
7002         eval $setvar
7003
7004         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
7005                 val="$define"
7006         else
7007                 val="$undef"
7008         fi
7009         set d_pwcomment
7010         eval $setvar
7011
7012         $rm -f $$.h
7013         ;;
7014 *)
7015         val="$undef"; 
7016         set d_pwquota; eval $setvar
7017         set d_pwage; eval $setvar
7018         set d_pwchange; eval $setvar
7019         set d_pwclass; eval $setvar
7020         set d_pwexpire; eval $setvar
7021         set d_pwcomment; eval $setvar
7022         ;;
7023 esac
7024
7025 : see if readdir and friends exist
7026 set readdir d_readdir
7027 eval $inlibc
7028 set seekdir d_seekdir
7029 eval $inlibc
7030 set telldir d_telldir
7031 eval $inlibc
7032 set rewinddir d_rewinddir
7033 eval $inlibc
7034
7035 : see if readlink exists
7036 set readlink d_readlink
7037 eval $inlibc
7038
7039 : see if rename exists
7040 set rename d_rename
7041 eval $inlibc
7042
7043 : see if rmdir exists
7044 set rmdir d_rmdir
7045 eval $inlibc
7046
7047 : see if memory.h is available.
7048 val=''
7049 set memory.h val
7050 eval $inhdr
7051
7052 : See if it conflicts with string.h
7053 case "$val" in
7054 $define)
7055         case "$strings" in
7056         '') ;;
7057         *)
7058                 $cppstdin $cppflags $cppminus < $strings > mem.h
7059                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
7060                         echo " "
7061                         echo "We won't be including <memory.h>."
7062                         val="$undef"
7063                 fi
7064                 $rm -f mem.h
7065                 ;;
7066         esac
7067 esac
7068 set i_memory
7069 eval $setvar
7070
7071 : can bcopy handle overlapping blocks?
7072 val="$undef"
7073 case "$d_bcopy" in
7074 "$define")
7075         echo " "
7076         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
7077         $cat >foo.c <<EOCP
7078 #$i_memory I_MEMORY
7079 #$i_stdlib I_STDLIB
7080 #$i_string I_STRING
7081 #$i_unistd I_UNISTD
7082 EOCP
7083         $cat >>foo.c <<'EOCP'
7084 #include <stdio.h>
7085
7086 #ifdef I_MEMORY
7087 #  include <memory.h>
7088 #endif
7089 #ifdef I_STDLIB
7090 #  include <stdlib.h>
7091 #endif
7092 #ifdef I_STRING
7093 #  include <string.h>
7094 #else
7095 #  include <strings.h>
7096 #endif
7097 #ifdef I_UNISTD
7098 #  include <unistd.h>  /* Needed for NetBSD */
7099 #endif
7100 main()
7101 {
7102 char buf[128], abc[128];
7103 char *b;
7104 int len;
7105 int off;
7106 int align;
7107
7108 /* Copy "abcde..." string to char abc[] so that gcc doesn't
7109    try to store the string in read-only memory.  */
7110 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
7111
7112 for (align = 7; align >= 0; align--) {
7113         for (len = 36; len; len--) {
7114                 b = buf+align;
7115                 bcopy(abc, b, len);
7116                 for (off = 1; off <= len; off++) {
7117                         bcopy(b, b+off, len);
7118                         bcopy(b+off, b, len);
7119                         if (bcmp(b, abc, len))
7120                                 exit(1);
7121                 }
7122         }
7123 }
7124 exit(0);
7125 }
7126 EOCP
7127         if $cc $optimize $ccflags $ldflags foo.c \
7128                     -o safebcpy $libs >/dev/null 2>&1; then
7129                 if ./safebcpy 2>/dev/null; then
7130                         echo "Yes, it can."
7131                         val="$define"
7132                 else
7133                         echo "It can't, sorry."
7134                         case "$d_memmove" in
7135                         "$define") echo "But that's Ok since you have memmove()." ;;
7136                         esac
7137                 fi
7138         else
7139                 echo "(I can't compile the test program, so we'll assume not...)"
7140                 case "$d_memmove" in
7141                 "$define") echo "But that's Ok since you have memmove()." ;;
7142                 esac
7143         fi
7144         ;;
7145 esac
7146 $rm -f foo.* safebcpy core
7147 set d_safebcpy
7148 eval $setvar
7149
7150 : can memcpy handle overlapping blocks?
7151 val="$undef"
7152 case "$d_memcpy" in
7153 "$define")
7154         echo " "
7155         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
7156         $cat >foo.c <<EOCP
7157 #$i_memory I_MEMORY
7158 #$i_stdlib I_STDLIB
7159 #$i_string I_STRING
7160 #$i_unistd I_UNISTD
7161 EOCP
7162         $cat >>foo.c <<'EOCP'
7163 #include <stdio.h>
7164
7165 #ifdef I_MEMORY
7166 #  include <memory.h>
7167 #endif
7168 #ifdef I_STDLIB
7169 #  include <stdlib.h>
7170 #endif
7171 #ifdef I_STRING
7172 #  include <string.h>
7173 #else
7174 #  include <strings.h>
7175 #endif
7176 #ifdef I_UNISTD
7177 #  include <unistd.h>  /* Needed for NetBSD */
7178 #endif
7179 main()
7180 {
7181 char buf[128], abc[128];
7182 char *b;
7183 int len;
7184 int off;
7185 int align;
7186
7187 /* Copy "abcde..." string to char abc[] so that gcc doesn't
7188    try to store the string in read-only memory. */
7189 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
7190
7191 for (align = 7; align >= 0; align--) {
7192         for (len = 36; len; len--) {
7193                 b = buf+align;
7194                 memcpy(b, abc, len);
7195                 for (off = 1; off <= len; off++) {
7196                         memcpy(b+off, b, len);
7197                         memcpy(b, b+off, len);
7198                         if (memcmp(b, abc, len))
7199                                 exit(1);
7200                 }
7201         }
7202 }
7203 exit(0);
7204 }
7205 EOCP
7206         if $cc $optimize $ccflags $ldflags foo.c \
7207                     -o safemcpy $libs >/dev/null 2>&1; then
7208                 if ./safemcpy 2>/dev/null; then
7209                         echo "Yes, it can."
7210                         val="$define"
7211                 else
7212                         echo "It can't, sorry."
7213                         case "$d_memmove" in
7214                         "$define") echo "But that's Ok since you have memmove()." ;;
7215                         esac
7216                 fi
7217         else
7218                 echo "(I can't compile the test program, so we'll assume not...)"
7219                 case "$d_memmove" in
7220                 "$define") echo "But that's Ok since you have memmove()." ;;
7221                 esac
7222         fi
7223         ;;
7224 esac
7225 $rm -f foo.* safemcpy core
7226 set d_safemcpy
7227 eval $setvar
7228
7229 : can memcmp be trusted to compare relative magnitude?
7230 val="$undef"
7231 case "$d_memcmp" in
7232 "$define")
7233         echo " "
7234         echo "Checking to see if your memcmp() can compare relative magnitude..." >&4
7235         $cat >foo.c <<EOCP
7236 #$i_memory I_MEMORY
7237 #$i_stdlib I_STDLIB
7238 #$i_string I_STRING
7239 #$i_unistd I_UNISTD
7240 EOCP
7241         $cat >>foo.c <<'EOCP'
7242 #include <stdio.h>
7243
7244 #ifdef I_MEMORY
7245 #  include <memory.h>
7246 #endif
7247 #ifdef I_STDLIB
7248 #  include <stdlib.h>
7249 #endif
7250 #ifdef I_STRING
7251 #  include <string.h>
7252 #else
7253 #  include <strings.h>
7254 #endif
7255 #ifdef I_UNISTD
7256 #  include <unistd.h>  /* Needed for NetBSD */
7257 #endif
7258 main()
7259 {
7260 char a = -1;
7261 char b = 0;
7262 if ((a < b) && memcmp(&a, &b, 1) < 0)
7263         exit(1);
7264 exit(0);
7265 }
7266 EOCP
7267         if $cc $optimize $ccflags $ldflags foo.c \
7268                     -o sanemcmp $libs >/dev/null 2>&1; then
7269                 if ./sanemcmp 2>/dev/null; then
7270                         echo "Yes, it can."
7271                         val="$define"
7272                 else
7273                         echo "No, it can't (it uses signed chars)."
7274                 fi
7275         else
7276                 echo "(I can't compile the test program, so we'll assume not...)"
7277         fi
7278         ;;
7279 esac
7280 $rm -f foo.* sanemcmp core
7281 set d_sanemcmp
7282 eval $setvar
7283
7284 : see if select exists
7285 set select d_select
7286 eval $inlibc
7287
7288 : see if semctl exists
7289 set semctl d_semctl
7290 eval $inlibc
7291
7292 : see if semget exists
7293 set semget d_semget
7294 eval $inlibc
7295
7296 : see if semop exists
7297 set semop d_semop
7298 eval $inlibc
7299
7300 : see how much of the 'sem*(2)' library is present.
7301 h_sem=true
7302 echo " "
7303 case "$d_semctl$d_semget$d_semop" in
7304 *"$undef"*) h_sem=false;;
7305 esac
7306 : we could also check for sys/ipc.h ...
7307 if $h_sem && $test `./findhdr sys/sem.h`; then
7308         echo "You have the full sem*(2) library." >&4
7309         val="$define"
7310 else
7311         echo "You don't have the full sem*(2) library." >&4
7312         val="$undef"
7313 fi
7314 set d_sem
7315 eval $setvar
7316
7317 : see if setegid exists
7318 set setegid d_setegid
7319 eval $inlibc
7320
7321 : see if seteuid exists
7322 set seteuid d_seteuid
7323 eval $inlibc
7324
7325 : see if setlinebuf exists
7326 set setlinebuf d_setlinebuf
7327 eval $inlibc
7328
7329 : see if setlocale exists
7330 set setlocale d_setlocale
7331 eval $inlibc
7332
7333 : see if setpgid exists
7334 set setpgid d_setpgid
7335 eval $inlibc
7336
7337 : see if setpgrp2 exists
7338 set setpgrp2 d_setpgrp2
7339 eval $inlibc
7340
7341 : see if setpriority exists
7342 set setpriority d_setprior
7343 eval $inlibc
7344
7345 : see if setregid exists
7346 set setregid d_setregid
7347 eval $inlibc
7348 set setresgid d_setresgid
7349 eval $inlibc
7350
7351 : see if setreuid exists
7352 set setreuid d_setreuid
7353 eval $inlibc
7354 set setresuid d_setresuid
7355 eval $inlibc
7356
7357 : see if setrgid exists
7358 set setrgid d_setrgid
7359 eval $inlibc
7360
7361 : see if setruid exists
7362 set setruid d_setruid
7363 eval $inlibc
7364
7365 : see if setsid exists
7366 set setsid d_setsid
7367 eval $inlibc
7368
7369 : see if sfio.h is available
7370 set sfio.h i_sfio
7371 eval $inhdr
7372
7373
7374 : see if sfio library is available
7375 case "$i_sfio" in
7376 $define)
7377         val=''
7378         set sfreserve val
7379         eval $inlibc
7380         ;;
7381 *)
7382         val="$undef"
7383         ;;
7384 esac
7385 : Ok, but do we want to use it.
7386 case "$val" in
7387 $define)
7388         case "$usesfio" in
7389         true|$define|[yY]*) dflt='y';;
7390         *) dflt='n';;
7391         esac
7392         echo "$package can use the sfio library, but it is experimental."
7393         rp="You seem to have sfio available, do you want to try using it?"
7394         . ./myread
7395         case "$ans" in
7396         y|Y) ;;
7397         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
7398                 val="$undef"
7399                 : Remove sfio from list of libraries to use
7400                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
7401                 shift
7402                 libs="$*"
7403                 echo "libs = $libs" >&4
7404                 ;;
7405         esac
7406         ;;
7407 *)      case "$usesfio" in
7408         true|$define|[yY]*)
7409                 echo "Sorry, cannot find sfio on this machine" >&4
7410                 echo "Ignoring your setting of usesfio=$usesfio" >&4
7411                 ;;
7412         esac
7413         ;;
7414 esac
7415 set d_sfio
7416 eval $setvar
7417 case "$d_sfio" in
7418 $define) usesfio='true';;
7419 *) usesfio='false';;
7420 esac
7421
7422 : see if shmctl exists
7423 set shmctl d_shmctl
7424 eval $inlibc
7425
7426 : see if shmget exists
7427 set shmget d_shmget
7428 eval $inlibc
7429
7430 : see if shmat exists
7431 set shmat d_shmat
7432 eval $inlibc
7433 : see what shmat returns
7434 case "$d_shmat" in
7435 "$define")
7436         $cat >shmat.c <<'END'
7437 #include <sys/shm.h>
7438 void *shmat();
7439 END
7440         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
7441                 shmattype='void *'
7442         else
7443                 shmattype='char *'
7444         fi
7445         echo "and it returns ($shmattype)." >&4
7446         : see if a prototype for shmat is available
7447         xxx=`./findhdr sys/shm.h`
7448         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
7449         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
7450                 val="$define"
7451         else
7452                 val="$undef"
7453         fi
7454         $rm -f shmat.[co]
7455         ;;
7456 *)
7457         val="$undef"
7458         ;;
7459 esac
7460 set d_shmatprototype
7461 eval $setvar
7462
7463 : see if shmdt exists
7464 set shmdt d_shmdt
7465 eval $inlibc
7466
7467 : see how much of the 'shm*(2)' library is present.
7468 h_shm=true
7469 echo " "
7470 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
7471 *"$undef"*) h_shm=false;;
7472 esac
7473 : we could also check for sys/ipc.h ...
7474 if $h_shm && $test `./findhdr sys/shm.h`; then
7475         echo "You have the full shm*(2) library." >&4
7476         val="$define"
7477 else
7478         echo "You don't have the full shm*(2) library." >&4
7479         val="$undef"
7480 fi
7481 set d_shm
7482 eval $setvar
7483
7484 echo " "
7485 : see if we have sigaction
7486 if set sigaction val -f d_sigaction; eval $csym; $val; then
7487         echo 'sigaction() found.' >&4
7488         val="$define"
7489 else
7490         echo 'sigaction NOT found.' >&4
7491         val="$undef"
7492 fi
7493
7494 $cat > set.c <<'EOP'
7495 /* Solaris 2.5_x86 with SunWorks Pro C 3.0.1 doesn't have a complete
7496    sigaction structure if compiled with cc -Xc.  This compile test
7497    will fail then.  <doughera@lafcol.lafayette.edu>
7498 */
7499 #include <stdio.h>
7500 #include <sys/types.h>
7501 #include <signal.h>
7502 main()
7503 {
7504     struct sigaction act, oact;
7505 }
7506 EOP
7507
7508 if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
7509         :
7510 else
7511         echo "But you don't seem to have a useable struct sigaction." >&4
7512         val="$undef"
7513 fi
7514 set d_sigaction; eval $setvar
7515 $rm -f set set.o set.c
7516
7517 : see if sigsetjmp exists
7518 echo " "
7519 case "$d_sigsetjmp" in
7520 '')
7521         $cat >set.c <<'EOP'
7522 #include <setjmp.h>
7523 sigjmp_buf env;
7524 int set = 1;
7525 main()
7526 {
7527         if (sigsetjmp(env,1))
7528                 exit(set);
7529         set = 0;
7530         siglongjmp(env, 1);
7531         exit(1);
7532 }
7533 EOP
7534         if $cc $ccflags $ldflags -o set set.c $libs > /dev/null 2>&1 ; then
7535                 if ./set >/dev/null 2>&1; then
7536                         echo "POSIX sigsetjmp found." >&4
7537                         val="$define"
7538                 else
7539                         $cat >&4 <<EOM
7540 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
7541 I'll ignore them.
7542 EOM
7543                         val="$undef"
7544                 fi
7545         else
7546                 echo "sigsetjmp not found." >&4
7547                 val="$undef"
7548         fi
7549         ;;
7550 *) val="$d_sigsetjmp"
7551         case "$d_sigsetjmp" in
7552         $define) echo "POSIX sigsetjmp found." >&4;;
7553         $undef) echo "sigsetjmp not found." >&4;;
7554         esac
7555         ;;
7556 esac
7557 set d_sigsetjmp
7558 eval $setvar
7559 $rm -f set.c set
7560
7561 socketlib=''
7562 sockethdr=''
7563 : see whether socket exists
7564 echo " "
7565 $echo $n "Hmm... $c" >&4
7566 if set socket val -f d_socket; eval $csym; $val; then
7567         echo "Looks like you have Berkeley networking support." >&4
7568         d_socket="$define"
7569         if set setsockopt val -f; eval $csym; $val; then
7570                 d_oldsock="$undef"
7571         else
7572                 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
7573                 d_oldsock="$define"
7574         fi
7575 else
7576         if $contains socklib libc.list >/dev/null 2>&1; then
7577                 echo "Looks like you have Berkeley networking support." >&4
7578                 d_socket="$define"
7579                 : we will have to assume that it supports the 4.2 BSD interface
7580                 d_oldsock="$undef"
7581         else
7582                 echo "You don't have Berkeley networking in libc$lib_ext..." >&4
7583                 if test -f /usr/lib/libnet$lib_ext; then
7584                         ( (nm $nm_opt /usr/lib/libnet$lib_ext | eval $nm_extract) ||  \
7585                         ar t /usr/lib/libnet$lib_ext) 2>/dev/null >> libc.list
7586                         if $contains socket libc.list >/dev/null 2>&1; then
7587                         echo "...but the Wollongong group seems to have hacked it in." >&4
7588                                 socketlib="-lnet"
7589                                 sockethdr="-I/usr/netinclude"
7590                                 d_socket="$define"
7591                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7592                                         d_oldsock="$undef"
7593                                 else
7594                                         echo "...using the old 4.1c interface, rather than 4.2" >&4
7595                                         d_oldsock="$define"
7596                                 fi
7597                         else
7598                                 echo "or even in libnet$lib_ext, which is peculiar." >&4
7599                                 d_socket="$undef"
7600                                 d_oldsock="$undef"
7601                         fi
7602                 else
7603                         echo "or anywhere else I see." >&4
7604                         d_socket="$undef"
7605                         d_oldsock="$undef"
7606                 fi
7607         fi
7608 fi
7609
7610 : see if socketpair exists
7611 set socketpair d_sockpair
7612 eval $inlibc
7613
7614 : see if stat knows about block sizes
7615 echo " "
7616 xxx=`./findhdr sys/stat.h`
7617 if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
7618         if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
7619                 echo "Your stat() knows about block sizes." >&4
7620                 val="$define"
7621         else
7622                 echo "Your stat() doesn't know about block sizes." >&4
7623                 val="$undef"
7624         fi
7625 else
7626         echo "Your stat() doesn't know about block sizes." >&4
7627         val="$undef"
7628 fi
7629 set d_statblks
7630 eval $setvar
7631
7632 : see if _ptr and _cnt from stdio act std
7633 echo " "
7634 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
7635         echo "(Looks like you have stdio.h from Linux.)"
7636         case "$stdio_ptr" in
7637         '') stdio_ptr='((fp)->_IO_read_ptr)'
7638                 ptr_lval=$define
7639                 ;;
7640         *)      ptr_lval=$d_stdio_ptr_lval;;
7641         esac
7642         case "$stdio_cnt" in
7643         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
7644                 cnt_lval=$undef
7645                 ;;
7646         *)      cnt_lval=$d_stdio_cnt_lval;;
7647         esac
7648         case "$stdio_base" in
7649         '') stdio_base='((fp)->_IO_read_base)';;
7650         esac
7651         case "$stdio_bufsiz" in
7652         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
7653         esac
7654 else
7655         case "$stdio_ptr" in
7656         '') stdio_ptr='((fp)->_ptr)'
7657                 ptr_lval=$define
7658                 ;;
7659         *)      ptr_lval=$d_stdio_ptr_lval;;
7660         esac
7661         case "$stdio_cnt" in
7662         '') stdio_cnt='((fp)->_cnt)'
7663                 cnt_lval=$define
7664                 ;;
7665         *)      cnt_lval=$d_stdio_cnt_lval;;
7666         esac
7667         case "$stdio_base" in
7668         '') stdio_base='((fp)->_base)';;
7669         esac
7670         case "$stdio_bufsiz" in
7671         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
7672         esac
7673 fi
7674 : test whether _ptr and _cnt really work
7675 echo "Checking how std your stdio is..." >&4
7676 $cat >try.c <<EOP
7677 #include <stdio.h>
7678 #define FILE_ptr(fp)    $stdio_ptr
7679 #define FILE_cnt(fp)    $stdio_cnt
7680 main() {
7681         FILE *fp = fopen("try.c", "r");
7682         char c = getc(fp);
7683         if (
7684                 18 <= FILE_cnt(fp) &&
7685                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
7686         )
7687                 exit(0);
7688         exit(1);
7689 }
7690 EOP
7691 val="$undef"
7692 if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
7693         if ./try; then
7694                 echo "Your stdio acts pretty std."
7695                 val="$define"
7696         else
7697                 echo "Your stdio isn't very std."
7698         fi
7699 else
7700         echo "Your stdio doesn't appear very std."
7701 fi
7702 $rm -f try.c try
7703 set d_stdstdio
7704 eval $setvar
7705
7706 : Can _ptr be used as an lvalue?
7707 case "$d_stdstdio$ptr_lval" in
7708 $define$define) val=$define ;;
7709 *) val=$undef ;;
7710 esac
7711 set d_stdio_ptr_lval
7712 eval $setvar
7713
7714 : Can _cnt be used as an lvalue?
7715 case "$d_stdstdio$cnt_lval" in
7716 $define$define) val=$define ;;
7717 *) val=$undef ;;
7718 esac
7719 set d_stdio_cnt_lval
7720 eval $setvar
7721
7722
7723 : see if _base is also standard
7724 val="$undef"
7725 case "$d_stdstdio" in
7726 $define)
7727         $cat >try.c <<EOP
7728 #include <stdio.h>
7729 #define FILE_base(fp)   $stdio_base
7730 #define FILE_bufsiz(fp) $stdio_bufsiz
7731 main() {
7732         FILE *fp = fopen("try.c", "r");
7733         char c = getc(fp);
7734         if (
7735                 19 <= FILE_bufsiz(fp) &&
7736                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
7737         )
7738                 exit(0);
7739         exit(1);
7740 }
7741 EOP
7742         if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
7743                 if ./try; then
7744                         echo "And its _base field acts std."
7745                         val="$define"
7746                 else
7747                         echo "But its _base field isn't std."
7748                 fi
7749         else
7750                 echo "However, it seems to be lacking the _base field."
7751         fi
7752         $rm -f try.c try
7753         ;;
7754 esac
7755 set d_stdiobase
7756 eval $setvar
7757
7758 : see if strcoll exists
7759 set strcoll d_strcoll
7760 eval $inlibc
7761
7762 : check for structure copying
7763 echo " "
7764 echo "Checking to see if your C compiler can copy structs..." >&4
7765 $cat >try.c <<'EOCP'
7766 main()
7767 {
7768         struct blurfl {
7769                 int dyick;
7770         } foo, bar;
7771
7772         foo = bar;
7773 }
7774 EOCP
7775 if $cc -c try.c >/dev/null 2>&1 ; then
7776         val="$define"
7777         echo "Yup, it can."
7778 else
7779         val="$undef"
7780         echo "Nope, it can't."
7781 fi
7782 set d_strctcpy
7783 eval $setvar
7784 $rm -f try.*
7785
7786 : see if strerror and/or sys_errlist[] exist
7787 echo " "
7788 if set strerror val -f d_strerror; eval $csym; $val; then
7789         echo 'strerror() found.' >&4
7790         d_strerror="$define"
7791         d_strerrm='strerror(e)'
7792         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
7793                 echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
7794                 d_syserrlst="$define"
7795         else
7796         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
7797                 d_syserrlst="$undef"
7798         fi
7799 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
7800         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
7801         echo 'strerror() found in string header.' >&4
7802         d_strerror="$define"
7803         d_strerrm='strerror(e)'
7804         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
7805                 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
7806                 d_syserrlst="$define"
7807         else
7808                 echo "(You don't appear to have any sys_errlist[], how can this be?)"
7809                 d_syserrlst="$undef"
7810         fi
7811 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
7812 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
7813         d_strerror="$undef"
7814         d_syserrlst="$define"
7815         d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
7816 else
7817         echo 'strerror() and sys_errlist[] NOT found.' >&4
7818         d_strerror="$undef"
7819         d_syserrlst="$undef"
7820         d_strerrm='"unknown"'
7821 fi
7822
7823 : see if strtod exists
7824 set strtod d_strtod
7825 eval $inlibc
7826
7827 : see if strtol exists
7828 set strtol d_strtol
7829 eval $inlibc
7830
7831 : see if strtoul exists
7832 set strtoul d_strtoul
7833 eval $inlibc
7834
7835 : see if strxfrm exists
7836 set strxfrm d_strxfrm
7837 eval $inlibc
7838
7839 : see if symlink exists
7840 set symlink d_symlink
7841 eval $inlibc
7842
7843 : see if syscall exists
7844 set syscall d_syscall
7845 eval $inlibc
7846
7847 : see if sysconf exists
7848 set sysconf d_sysconf
7849 eval $inlibc
7850
7851 : see if system exists
7852 set system d_system
7853 eval $inlibc
7854
7855 : see if tcgetpgrp exists
7856 set tcgetpgrp d_tcgetpgrp
7857 eval $inlibc
7858
7859 : see if tcsetpgrp exists
7860 set tcsetpgrp d_tcsetpgrp
7861 eval $inlibc
7862
7863 : define an is-a-typedef? function
7864 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
7865 case "$inclist" in
7866 "") inclist="sys/types.h";;
7867 esac;
7868 eval "varval=\$$var";
7869 case "$varval" in
7870 "")
7871         $rm -f temp.c;
7872         for inc in $inclist; do
7873                 echo "#include <$inc>" >>temp.c;
7874         done;
7875         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
7876         if $contains $type temp.E >/dev/null 2>&1; then
7877                 eval "$var=\$type";
7878         else
7879                 eval "$var=\$def";
7880         fi;
7881         $rm -f temp.?;;
7882 *) eval "$var=\$varval";;
7883 esac'
7884
7885 : see if this is a sys/times.h system
7886 set sys/times.h i_systimes
7887 eval $inhdr
7888
7889 : see if times exists
7890 echo " "
7891 if set times val -f d_times; eval $csym; $val; then
7892         echo 'times() found.' >&4
7893         d_times="$define"
7894         inc=''
7895         case "$i_systimes" in
7896         "$define") inc='sys/times.h';;
7897         esac
7898         set clock_t clocktype long stdio.h sys/types.h $inc
7899         eval $typedef
7900         dflt="$clocktype"
7901         echo " "
7902         rp="What type is returned by times() on this system?"
7903         . ./myread
7904         clocktype="$ans"
7905 else
7906         echo 'times() NOT found, hope that will do.' >&4
7907         d_times="$undef"
7908         clocktype='int'
7909 fi
7910
7911 : see if truncate exists
7912 set truncate d_truncate
7913 eval $inlibc
7914
7915 : see if tzname[] exists
7916 echo " "
7917 if set tzname val -a d_tzname; eval $csym; $val; then
7918         val="$define"
7919         echo 'tzname[] found.' >&4
7920 else
7921         val="$undef"
7922         echo 'tzname[] NOT found.' >&4
7923 fi
7924 set d_tzname
7925 eval $setvar
7926
7927 : see if umask exists
7928 set umask d_umask
7929 eval $inlibc
7930
7931 : see how we will look up host name
7932 echo " "
7933 if false; then
7934         : dummy stub to allow use of elif
7935 elif set uname val -f d_uname; eval $csym; $val; then
7936         if ./xenix; then
7937                 $cat <<'EOM'
7938 uname() was found, but you're running xenix, and older versions of xenix
7939 have a broken uname(). If you don't really know whether your xenix is old
7940 enough to have a broken system call, use the default answer.
7941
7942 EOM
7943                 dflt=y
7944                 case "$d_uname" in
7945                 "$define") dflt=n;;
7946                 esac
7947                 rp='Is your uname() broken?'
7948                 . ./myread
7949                 case "$ans" in
7950                 n*) d_uname="$define"; call=uname;;
7951                 esac
7952         else
7953                 echo 'uname() found.' >&4
7954                 d_uname="$define"
7955                 call=uname
7956         fi
7957 fi
7958 case "$d_gethname" in
7959 '') d_gethname="$undef";;
7960 esac
7961 case "$d_uname" in
7962 '') d_uname="$undef";;
7963 esac
7964 case "$d_phostname" in
7965 '') d_phostname="$undef";;
7966 esac
7967
7968 : backward compatibility for d_hvfork
7969 if test X$d_hvfork != X; then
7970         d_vfork="$d_hvfork"
7971         d_hvfork=''
7972 fi
7973 : see if there is a vfork
7974 val=''
7975 set vfork val
7976 eval $inlibc
7977
7978 : Ok, but do we want to use it. vfork is reportedly unreliable in 
7979 : perl on Solaris 2.x, and probably elsewhere.
7980 case "$val" in
7981 $define)
7982         echo " "
7983         case "$usevfork" in
7984         false) dflt='n';;
7985         *) dflt='y';;
7986         esac
7987         rp="Some systems have problems with vfork().  Do you want to use it?"
7988         . ./myread
7989         case "$ans" in
7990         y|Y) ;;
7991         *)
7992                 echo "Ok, we won't use vfork()."
7993                 val="$undef"
7994                 ;;
7995         esac
7996         ;;
7997 esac
7998 set d_vfork
7999 eval $setvar
8000 case "$d_vfork" in
8001 $define) usevfork='true';;
8002 *) usevfork='false';;
8003 esac
8004
8005 : see if this is an sysdir system
8006 set sys/dir.h i_sysdir
8007 eval $inhdr
8008
8009 : see if this is an sysndir system
8010 set sys/ndir.h i_sysndir
8011 eval $inhdr
8012
8013 : see if closedir exists
8014 set closedir d_closedir
8015 eval $inlibc
8016
8017 case "$d_closedir" in
8018 "$define")
8019         echo " "
8020         echo "Checking whether closedir() returns a status..." >&4
8021         cat > closedir.c <<EOM
8022 #$i_dirent I_DIRENT             /**/
8023 #$i_sysdir I_SYS_DIR            /**/
8024 #$i_sysndir I_SYS_NDIR          /**/
8025
8026 #if defined(I_DIRENT)
8027 #include <dirent.h>
8028 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
8029 #include <sys/dir.h>
8030 #endif
8031 #else
8032 #ifdef I_SYS_NDIR
8033 #include <sys/ndir.h>
8034 #else
8035 #ifdef I_SYS_DIR
8036 #ifdef hp9000s500
8037 #include <ndir.h>       /* may be wrong in the future */
8038 #else
8039 #include <sys/dir.h>
8040 #endif
8041 #endif
8042 #endif
8043 #endif 
8044 int main() { return closedir(opendir(".")); }
8045 EOM
8046         if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
8047                 if ./closedir > /dev/null 2>&1 ; then
8048                         echo "Yes, it does."
8049                         val="$undef"
8050                 else
8051                         echo "No, it doesn't."
8052                         val="$define"
8053                 fi
8054         else
8055                 echo "(I can't seem to compile the test program--assuming it doesn't)"
8056                 val="$define"
8057         fi
8058         ;;
8059 *)
8060         val="$undef";
8061         ;;
8062 esac
8063 set d_void_closedir
8064 eval $setvar
8065 $rm -f closedir*
8066 : check for volatile keyword
8067 echo " "
8068 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
8069 $cat >try.c <<'EOCP'
8070 main()
8071 {
8072         typedef struct _goo_struct goo_struct;
8073         goo_struct * volatile goo = ((goo_struct *)0);
8074         struct _goo_struct {
8075                 long long_int;
8076                 int reg_int;
8077                 char char_var;
8078         };
8079         typedef unsigned short foo_t;
8080         char *volatile foo;
8081         volatile int bar;
8082         volatile foo_t blech;
8083         foo = foo;
8084 }
8085 EOCP
8086 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
8087         val="$define"
8088         echo "Yup, it does."
8089 else
8090         val="$undef"
8091         echo "Nope, it doesn't."
8092 fi
8093 set d_volatile
8094 eval $setvar
8095 $rm -f try.*
8096
8097 : see if there is a wait4
8098 set wait4 d_wait4
8099 eval $inlibc
8100
8101 : see if waitpid exists
8102 set waitpid d_waitpid
8103 eval $inlibc
8104
8105 : see if wcstombs exists
8106 set wcstombs d_wcstombs
8107 eval $inlibc
8108
8109 : see if wctomb exists
8110 set wctomb d_wctomb
8111 eval $inlibc
8112
8113 : preserve RCS keywords in files with variable substitution, grrr
8114 Date='$Date'
8115 Id='$Id'
8116 Log='$Log'
8117 RCSfile='$RCSfile'
8118 Revision='$Revision'
8119
8120 : check for alignment requirements
8121 echo " "
8122 case "$alignbytes" in
8123 '') echo "Checking alignment constraints..." >&4
8124         $cat >try.c <<'EOCP'
8125 struct foobar {
8126         char foo;
8127         double bar;
8128 } try;
8129 main()
8130 {
8131         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
8132 }
8133 EOCP
8134         if $cc $ccflags try.c -o try >/dev/null 2>&1; then
8135                 dflt=`./try`
8136         else
8137                 dflt='8'
8138                 echo "(I can't seem to compile the test program...)"
8139         fi
8140         ;;
8141 *) dflt="$alignbytes"
8142         ;;
8143 esac
8144 rp="Doubles must be aligned on a how-many-byte boundary?"
8145 . ./myread
8146 alignbytes="$ans"
8147 $rm -f try.c try
8148
8149 : check for ordering of bytes in a long
8150 case "$byteorder" in
8151 '')
8152         $cat <<'EOM'
8153   
8154 In the following, larger digits indicate more significance.  A big-endian
8155 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
8156 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
8157 machines may have weird orders like 3412.  A Cray will report 87654321. If
8158 the test program works the default is probably right.
8159 I'm now running the test program...
8160 EOM
8161         $cat >try.c <<'EOCP'
8162 #include <stdio.h>
8163 main()
8164 {
8165         int i;
8166         union {
8167                 unsigned long l;
8168                 char c[sizeof(long)];
8169         } u;
8170
8171         if (sizeof(long) > 4)
8172                 u.l = (0x08070605L << 32) | 0x04030201L;
8173         else
8174                 u.l = 0x04030201L;
8175         for (i = 0; i < sizeof(long); i++)
8176                 printf("%c", u.c[i]+'0');
8177         printf("\n");
8178         exit(0);
8179 }
8180 EOCP
8181         xxx_prompt=y
8182         if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
8183                 dflt=`./try`
8184                 case "$dflt" in
8185                 [1-4][1-4][1-4][1-4]|12345678|87654321)
8186                         echo "(The test program ran ok.)"
8187                         echo "byteorder=$dflt"
8188                         xxx_prompt=n
8189                         ;;
8190                 ????|????????) echo "(The test program ran ok.)" ;;
8191                 *) echo "(The test program didn't run right for some reason.)" ;;
8192                 esac
8193         else
8194                 dflt='4321'
8195                 cat <<'EOM'
8196 (I can't seem to compile the test program.  Guessing big-endian...)
8197 EOM
8198         fi
8199         case "$xxx_prompt" in
8200         y)
8201                 rp="What is the order of bytes in a long?"
8202                 . ./myread
8203                 byteorder="$ans"
8204                 ;;
8205         *)      byteorder=$dflt
8206                 ;;
8207         esac
8208         ;;
8209 esac
8210 $rm -f try.c try
8211
8212 : how do we catenate cpp tokens here?
8213 echo " "
8214 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
8215 $cat >cpp_stuff.c <<'EOCP'
8216 #define RCAT(a,b)a/**/b
8217 #define ACAT(a,b)a ## b
8218 RCAT(Rei,ser)
8219 ACAT(Cir,cus)
8220 EOCP
8221 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
8222 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
8223         echo "Oh!  Smells like ANSI's been here."
8224         echo "We can catify or stringify, separately or together!"
8225         cpp_stuff=42
8226 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
8227         echo "Ah, yes!  The good old days!"
8228         echo "However, in the good old days we don't know how to stringify and"
8229         echo "catify at the same time."
8230         cpp_stuff=1
8231 else
8232         $cat >&4 <<EOM
8233 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
8234 to have to edit the values of CAT[2-5] in config.h...
8235 EOM
8236         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
8237 fi
8238 $rm -f cpp_stuff.*
8239
8240 : see if this is a db.h system
8241 set db.h i_db
8242 eval $inhdr
8243
8244 case "$i_db" in
8245 $define)
8246         : Check db version.  We can not use version 2.
8247         echo " "
8248         echo "Checking Berkeley DB version ..." >&4
8249         $cat >try.c <<EOCP
8250 #$d_const HASCONST
8251 #ifndef HASCONST
8252 #define const
8253 #endif
8254 #include <sys/types.h>
8255 #include <stdio.h>
8256 #include <db.h>
8257 main()
8258 {
8259 #ifdef DB_VERSION_MAJOR /* DB version >= 2: not yet. */
8260     printf("You have Berkeley DB Version %d.%d\n",
8261                 DB_VERSION_MAJOR, DB_VERSION_MINOR);
8262     printf("Perl currently only supports up to version 1.86.\n");
8263     exit(2);
8264 #else
8265 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
8266     exit(0);    /* DB version < 2: the coast is clear. */
8267 #else
8268     exit(1);    /* <db.h> not Berkeley DB? */
8269 #endif
8270 #endif
8271 }
8272 EOCP
8273         if $cc $optimize $ccflags $ldflags -o try try.c $libs && ./try; then
8274                 echo 'Looks OK.  (Perl supports up to version 1.86).' >&4
8275         else
8276                 echo "I can't use your Berkeley DB.  I'll disable it." >&4
8277                 i_db=$undef
8278                 case " $libs " in
8279                 *"-ldb "*)
8280                         : Remove db from list of libraries to use
8281                         echo "Removing unusable -ldb from library list" >&4
8282                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
8283                         shift
8284                         libs="$*"
8285                         echo "libs = $libs" >&4
8286                         ;;
8287                 esac
8288         fi
8289         $rm -f try.*
8290         ;;
8291 esac
8292
8293 case "$i_db" in
8294 define)
8295         : Check the return type needed for hash 
8296         echo " "
8297         echo "Checking return type needed for hash for Berkeley DB ..." >&4
8298         $cat >try.c <<EOCP
8299 #$d_const HASCONST
8300 #ifndef HASCONST
8301 #define const
8302 #endif
8303 #include <sys/types.h>
8304 #include <db.h>
8305 u_int32_t hash_cb (ptr, size)
8306 const void *ptr;
8307 size_t size;
8308 {
8309 }
8310 HASHINFO info;
8311 main()
8312 {
8313         info.hash = hash_cb;
8314 }
8315 EOCP
8316         if $cc $ccflags -c try.c >try.out 2>&1 ; then
8317                 if $contains warning try.out >>/dev/null 2>&1 ; then
8318                         db_hashtype='int'
8319                 else
8320                         db_hashtype='u_int32_t'
8321                 fi
8322         else
8323                 : XXX Maybe we should just give up here.
8324                 db_hashtype=u_int32_t
8325                 echo "Help:  I can't seem to compile the db test program." >&4
8326                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
8327         fi
8328         $rm -f try.*
8329         echo "Your version of Berkeley DB uses $db_hashtype for hash."
8330         ;;
8331 *)      db_hashtype=u_int32_t
8332         ;;
8333 esac
8334
8335 case "$i_db" in
8336 define)
8337         : Check the return type needed for prefix 
8338         echo " "
8339         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
8340         cat >try.c <<EOCP
8341 #$d_const HASCONST
8342 #ifndef HASCONST
8343 #define const
8344 #endif
8345 #include <sys/types.h>
8346 #include <db.h>
8347 size_t prefix_cb (key1, key2)
8348 const DBT *key1;
8349 const DBT *key2;
8350 {
8351 }
8352 BTREEINFO info;
8353 main()
8354 {
8355         info.prefix = prefix_cb;
8356 }
8357 EOCP
8358         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
8359                 if $contains warning try.out >>/dev/null 2>&1 ; then
8360                         db_prefixtype='int'
8361                 else
8362                         db_prefixtype='size_t'
8363                 fi
8364         else
8365                 db_prefixtype='size_t'
8366                 : XXX Maybe we should just give up here.
8367                 echo "Help:  I can't seem to compile the db test program." >&4
8368                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
8369         fi
8370         $rm -f try.*
8371         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
8372         ;;
8373 *)      db_prefixtype='size_t'
8374         ;;
8375 esac
8376
8377 : check for void type
8378 echo " "
8379 echo "Checking to see how well your C compiler groks the void type..." >&4
8380 echo " "
8381 $cat >&4 <<EOM
8382   Support flag bits are:
8383     1: basic void declarations.
8384     2: arrays of pointers to functions returning void.
8385     4: operations between pointers to and addresses of void functions.
8386     8: generic void pointers.
8387 EOM
8388 echo " "
8389 case "$voidflags" in
8390 '')
8391         $cat >try.c <<'EOCP'
8392 #if TRY & 1
8393 void sub() {
8394 #else
8395 sub() {
8396 #endif
8397         extern void moo();      /* function returning void */
8398         void (*goo)();          /* ptr to func returning void */
8399 #if TRY & 8
8400         void *hue;              /* generic ptr */
8401 #endif
8402 #if TRY & 2
8403         void (*foo[10])();
8404 #endif
8405
8406 #if TRY & 4
8407         if(goo == moo) {
8408                 exit(0);
8409         }
8410 #endif
8411         exit(0);
8412 }
8413 main() { sub(); }
8414 EOCP
8415         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
8416                 voidflags=$defvoidused
8417         echo "It appears to support void to the level $package wants ($defvoidused)."
8418                 if $contains warning .out >/dev/null 2>&1; then
8419                         echo "However, you might get some warnings that look like this:"
8420                         $cat .out
8421                 fi
8422         else
8423 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
8424                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
8425                         echo "It supports 1..."
8426                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
8427                                 echo "It also supports 2..."
8428                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
8429                                         voidflags=7
8430                                         echo "And it supports 4 but not 8 definitely."
8431                                 else
8432                                         echo "It doesn't support 4..."
8433                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
8434                                                 voidflags=11
8435                                                 echo "But it supports 8."
8436                                         else
8437                                                 voidflags=3
8438                                                 echo "Neither does it support 8."
8439                                         fi
8440                                 fi
8441                         else
8442                                 echo "It does not support 2..."
8443                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
8444                                         voidflags=13
8445                                         echo "But it supports 4 and 8."
8446                                 else
8447                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
8448                                                 voidflags=5
8449                                                 echo "And it supports 4 but has not heard about 8."
8450                                         else
8451                                                 echo "However it supports 8 but not 4."
8452                                         fi
8453                                 fi
8454                         fi
8455                 else
8456                         echo "There is no support at all for void."
8457                         voidflags=0
8458                 fi
8459         fi
8460 esac
8461 : Only prompt user if support does not match the level we want
8462 case "$voidflags" in
8463 "$defvoidused") ;;
8464 *)
8465         dflt="$voidflags";
8466         rp="Your void support flags add up to what?"
8467         . ./myread
8468         voidflags="$ans"
8469         ;;
8470 esac
8471 $rm -f try.* .out
8472
8473 : see what type file positions are declared as in the library
8474 set fpos_t fpostype long stdio.h sys/types.h
8475 eval $typedef
8476 echo " "
8477 dflt="$fpostype"
8478 rp="What is the type for file position used by fsetpos()?"
8479 . ./myread
8480 fpostype="$ans"
8481
8482 : Store the full pathname to the sed program for use in the C program
8483 full_sed=$sed
8484
8485 : see what type gids are declared as in the kernel
8486 set gid_t gidtype xxx stdio.h sys/types.h
8487 eval $typedef
8488 case "$gidtype" in
8489 xxx)
8490         xxx=`./findhdr sys/user.h`
8491         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
8492         case $1 in
8493         unsigned) dflt="$1 $2" ;;
8494         *) dflt="$1" ;;
8495         esac
8496         ;;
8497 *) dflt="$gidtype";;
8498 esac
8499 echo " "
8500 rp="What is the type for group ids returned by getgid()?"
8501 . ./myread
8502 gidtype="$ans"
8503
8504 : see if getgroups exists
8505 set getgroups d_getgrps
8506 eval $inlibc
8507
8508 : see if setgroups exists
8509 set setgroups d_setgrps
8510 eval $inlibc
8511
8512 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
8513 echo " "
8514 case "$d_getgrps$d_setgrps" in
8515 *define*)
8516         case "$groupstype" in
8517         '') dflt="$gidtype" ;;
8518         *)  dflt="$groupstype" ;;
8519         esac
8520         $cat <<EOM
8521 What is the type of the second argument to getgroups() and setgroups()?
8522 Usually this is the same as group ids, $gidtype, but not always.
8523
8524 EOM
8525         rp='What type is the second argument to getgroups() and setgroups()?'
8526         . ./myread
8527         groupstype="$ans"
8528         ;;
8529 *)  groupstype="$gidtype";;
8530 esac
8531
8532 : see what type lseek is declared as in the kernel
8533 set off_t lseektype long stdio.h sys/types.h
8534 eval $typedef
8535 echo " "
8536 dflt="$lseektype"
8537 rp="What type is lseek's offset on this system declared as?"
8538 . ./myread
8539 lseektype="$ans"
8540
8541 echo " "
8542 case "$make" in
8543 '')
8544         make=`./loc make make $pth`
8545         case "$make" in
8546         /*)     echo make is in $make.  ;;
8547         ?:[\\/]*)       echo make is in $make.  ;;
8548         *)      echo "I don't know where 'make' is, and my life depends on it." >&4
8549                 echo "Go find a make program or fix your PATH setting!" >&4
8550                 exit 1
8551                 ;;
8552         esac
8553         ;;
8554 *)      echo make is in $make. ;;
8555 esac
8556
8557 $echo $n "Checking if your $make program sets \$(MAKE)... $c" >&4
8558 case "$make_set_make" in
8559 '')
8560         $sed 's/^X //' > testmake.mak << 'EOF'
8561 Xall:
8562 X       @echo 'ac_maketemp="$(MAKE)"'
8563 EOF
8564         : GNU make sometimes prints "make[1]: Entering...", which would confuse us.
8565         case "`$make -f testmake.mak 2>/dev/null`" in
8566         *ac_maketemp=*) make_set_make='#' ;;
8567         *)      make_set_make="MAKE=$make" ;;
8568         esac
8569         $rm -f testmake.mak
8570         ;;
8571 esac
8572 case "$make_set_make" in
8573 '#')    echo "Yup, it does." >&4 ;;
8574 *)      echo "Nope, it doesn't." >&4 ;;
8575 esac
8576
8577 : see what type is used for mode_t
8578 set mode_t modetype int stdio.h sys/types.h
8579 eval $typedef
8580 dflt="$modetype"
8581 echo " "
8582 rp="What type is used for file modes?"
8583 . ./myread
8584 modetype="$ans"
8585
8586 : locate the preferred pager for this system
8587 case "$pager" in
8588 '')
8589         dflt=''
8590         case "$pg" in
8591         /*) dflt=$pg;;
8592         esac
8593         case "$more" in
8594         /*) dflt=$more;;
8595         esac
8596         case "$less" in
8597         /*) dflt=$less;;
8598         esac
8599         case "$dflt" in
8600         '') dflt=/usr/ucb/more;;
8601         esac
8602         ;;
8603 *) dflt="$pager";;
8604 esac
8605 echo " "
8606 fn=f/
8607 rp='What pager is used on your system?'
8608 . ./getfile
8609 pager="$ans"
8610
8611 : Cruising for prototypes
8612 echo " "
8613 echo "Checking out function prototypes..." >&4
8614 $cat >prototype.c <<'EOCP'
8615 main(int argc, char *argv[]) {
8616         exit(0);}
8617 EOCP
8618 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
8619         echo "Your C compiler appears to support function prototypes."
8620         val="$define"
8621 else
8622         echo "Your C compiler doesn't seem to understand function prototypes."
8623         val="$undef"
8624 fi
8625 set prototype
8626 eval $setvar
8627 $rm -f prototype*
8628
8629 : check for size of random number generator
8630 echo " "
8631 case "$randbits" in
8632 '')
8633         echo "Checking to see how many bits your rand function produces..." >&4
8634         $cat >try.c <<EOCP
8635 #$i_unistd I_UNISTD
8636 #$i_stdlib I_STDLIB
8637 #include <stdio.h>
8638 #ifdef I_UNISTD
8639 #  include <unistd.h>
8640 #endif
8641 #ifdef I_STDLIB
8642 #  include <stdlib.h>
8643 #endif
8644 EOCP
8645         $cat >>try.c <<'EOCP'
8646 main()
8647 {
8648         register int i;
8649         register unsigned long tmp;
8650         register unsigned long max = 0L;
8651
8652         for (i = 1000; i; i--) {
8653                 tmp = (unsigned long)rand();
8654                 if (tmp > max) max = tmp;
8655         }
8656         for (i = 0; max; i++)
8657                 max /= 2;
8658         printf("%d\n",i);
8659         fflush(stdout);
8660 }
8661 EOCP
8662         if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 ; then
8663                 dflt=`try`
8664         else
8665                 dflt='?'
8666                 echo "(I can't seem to compile the test program...)"
8667         fi
8668         ;;
8669 *)
8670         dflt="$randbits"
8671         ;;
8672 esac
8673 rp='How many bits does your rand() function produce?'
8674 . ./myread
8675 randbits="$ans"
8676 $rm -f try.c try.o try
8677
8678 : see if ar generates random libraries by itself
8679 echo " "
8680 echo "Checking how to generate random libraries on your machine..." >&4
8681 echo 'int bar1() { return bar2(); }' > bar1.c
8682 echo 'int bar2() { return 2; }' > bar2.c
8683 $cat > foo.c <<'EOP'
8684 main() { printf("%d\n", bar1()); exit(0); }
8685 EOP
8686 $cc $ccflags -c bar1.c >/dev/null 2>&1
8687 $cc $ccflags -c bar2.c >/dev/null 2>&1
8688 $cc $ccflags -c foo.c >/dev/null 2>&1
8689 ar rc bar$lib_ext bar2.o bar1.o >/dev/null 2>&1
8690 if $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
8691         ./foobar >/dev/null 2>&1; then
8692         echo "ar appears to generate random libraries itself."
8693         orderlib=false
8694         ranlib=":"
8695 elif ar ts bar$lib_ext >/dev/null 2>&1 &&
8696         $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
8697         ./foobar >/dev/null 2>&1; then
8698                 echo "a table of contents needs to be added with 'ar ts'."
8699                 orderlib=false
8700                 ranlib="ar ts"
8701 else
8702         case "$ranlib" in
8703         :) ranlib='';;
8704         '')
8705                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
8706                 $test -f $ranlib || ranlib=''
8707                 ;;
8708         esac
8709         if $test -n "$ranlib"; then
8710                 echo "your system has '$ranlib'; we'll use that."
8711                 orderlib=false
8712         else
8713                 echo "your system doesn't seem to support random libraries"
8714                 echo "so we'll use lorder and tsort to order the libraries."
8715                 orderlib=true
8716                 ranlib=":"
8717         fi
8718 fi
8719 $rm -f foo* bar* 
8720
8721 : see if sys/select.h has to be included
8722 set sys/select.h i_sysselct
8723 eval $inhdr
8724
8725 : see if we should include time.h, sys/time.h, or both
8726 echo " "
8727 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8728 $echo $n "I'm now running the test program...$c"
8729 $cat >try.c <<'EOCP'
8730 #include <sys/types.h>
8731 #ifdef I_TIME
8732 #include <time.h>
8733 #endif
8734 #ifdef I_SYSTIME
8735 #ifdef SYSTIMEKERNEL
8736 #define KERNEL
8737 #endif
8738 #include <sys/time.h>
8739 #endif
8740 #ifdef I_SYSSELECT
8741 #include <sys/select.h>
8742 #endif
8743 main()
8744 {
8745         struct tm foo;
8746 #ifdef S_TIMEVAL
8747         struct timeval bar;
8748 #endif
8749 #ifdef S_TIMEZONE
8750         struct timezone tzp;
8751 #endif
8752         if (foo.tm_sec == foo.tm_sec)
8753                 exit(0);
8754 #ifdef S_TIMEVAL
8755         if (bar.tv_sec == bar.tv_sec)
8756                 exit(0);
8757 #endif
8758         exit(1);
8759 }
8760 EOCP
8761 flags=''
8762 for s_timezone in '-DS_TIMEZONE' ''; do
8763 sysselect=''
8764 for s_timeval in '-DS_TIMEVAL' ''; do
8765 for i_systimek in '' '-DSYSTIMEKERNEL'; do
8766 for i_time in '' '-DI_TIME'; do
8767 for i_systime in '-DI_SYSTIME' ''; do
8768         case "$flags" in
8769         '') $echo $n ".$c"
8770                 if $cc $ccflags \
8771                 $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
8772                 try.c -o try >/dev/null 2>&1 ; then
8773                         set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8774                         shift
8775                         flags="$*"
8776                         echo " "
8777                         $echo $n "Succeeded with $flags$c"
8778                 fi
8779                 ;;
8780         esac
8781 done
8782 done
8783 done
8784 done
8785 done
8786 timeincl=''
8787 echo " "
8788 case "$flags" in
8789 *SYSTIMEKERNEL*) i_systimek="$define"
8790         timeincl=`./findhdr sys/time.h`
8791         echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8792 *) i_systimek="$undef";;
8793 esac
8794 case "$flags" in
8795 *I_TIME*) i_time="$define"
8796         timeincl=`./findhdr time.h`" $timeincl"
8797         echo "We'll include <time.h>." >&4;;
8798 *) i_time="$undef";;
8799 esac
8800 case "$flags" in
8801 *I_SYSTIME*) i_systime="$define"
8802         timeincl=`./findhdr sys/time.h`" $timeincl"
8803         echo "We'll include <sys/time.h>." >&4;;
8804 *) i_systime="$undef";;
8805 esac
8806 $rm -f try.c try
8807
8808 : check for fd_set items
8809 $cat <<EOM
8810
8811 Checking to see how well your C compiler handles fd_set and friends ...
8812 EOM
8813 $cat >fd_set.c <<EOCP
8814 #$i_systime I_SYS_TIME
8815 #$i_sysselct I_SYS_SELECT
8816 #$d_socket HAS_SOCKET
8817 #include <sys/types.h>
8818 #ifdef HAS_SOCKET
8819 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8820 #endif
8821 #ifdef I_SYS_TIME
8822 #include <sys/time.h>
8823 #endif
8824 #ifdef I_SYS_SELECT
8825 #include <sys/select.h>
8826 #endif
8827 main() {
8828         fd_set fds;
8829
8830 #ifdef TRYBITS
8831         if(fds.fds_bits);
8832 #endif
8833
8834 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8835         exit(0);
8836 #else
8837         exit(1);
8838 #endif
8839 }
8840 EOCP
8841 if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8842         d_fds_bits="$define"
8843         d_fd_set="$define"
8844         echo "Well, your system knows about the normal fd_set typedef..." >&4
8845         if ./fd_set; then
8846                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8847                 d_fd_macros="$define"
8848         else
8849                 $cat >&4 <<'EOM'
8850 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8851 EOM
8852                 d_fd_macros="$undef"
8853         fi
8854 else
8855         $cat <<'EOM'
8856 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8857 EOM
8858         if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8859                 d_fds_bits="$undef"
8860                 d_fd_set="$define"
8861                 echo "Well, your system has some sort of fd_set available..." >&4
8862                 if ./fd_set; then
8863                         echo "and you have the normal fd_set macros." >&4
8864                         d_fd_macros="$define"
8865                 else
8866                         $cat <<'EOM'
8867 but not the normal fd_set macros!  Gross!  More work for me...
8868 EOM
8869                         d_fd_macros="$undef"
8870                 fi
8871         else
8872         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8873                 d_fd_set="$undef"
8874                 d_fds_bits="$undef"
8875                 d_fd_macros="$undef"
8876         fi
8877 fi
8878 $rm -f fd_set*
8879
8880
8881 : check for type of arguments to select.  This will only really
8882 : work if the system supports prototypes and provides one for
8883 : select.
8884 case "$d_select" in
8885 $define)
8886         : Make initial guess
8887         case "$selecttype" in
8888         ''|' ')
8889                 case "$d_fd_set" in
8890                 $define) xxx='fd_set *' ;;
8891                 *) xxx='int *' ;;
8892                 esac
8893                 ;;
8894         *)      xxx="$selecttype" 
8895                 ;;
8896         esac
8897         : backup guess
8898         case "$xxx" in
8899         'fd_set *') yyy='int *' ;;
8900         'int *') yyy='fd_set *' ;;
8901         esac
8902
8903         $cat <<EOM
8904
8905 Checking to see what type of arguments are expected by select().
8906 EOM
8907         $cat >try.c <<EOCP
8908 #$i_systime I_SYS_TIME
8909 #$i_sysselct I_SYS_SELECT
8910 #$d_socket HAS_SOCKET
8911 #include <sys/types.h>
8912 #ifdef HAS_SOCKET
8913 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8914 #endif
8915 #ifdef I_SYS_TIME
8916 #include <sys/time.h>
8917 #endif
8918 #ifdef I_SYS_SELECT
8919 #include <sys/select.h>
8920 #endif
8921 main()
8922 {
8923         int width;
8924         Select_fd_set_t readfds;
8925         Select_fd_set_t writefds;
8926         Select_fd_set_t exceptfds;
8927         struct timeval timeout;
8928         select(width, readfds, writefds, exceptfds, &timeout);
8929         exit(0);
8930 }
8931 EOCP
8932         if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
8933                 selecttype="$xxx"
8934                 echo "Your system uses $xxx for the arguments to select." >&4
8935         elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
8936                 selecttype="$yyy"
8937                 echo "Your system uses $yyy for the arguments to select." >&4
8938         else
8939                 rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
8940                 dflt="$xxx"
8941                 . ./myread
8942                 selecttype="$ans"
8943         fi
8944         $rm -f try.[co]
8945         ;;
8946 *)      selecttype='int *'
8947         ;;
8948 esac
8949
8950 : Trace out the files included by signal.h, then look for SIGxxx names.
8951 : Remove SIGARRAYSIZE used by HPUX.
8952 : Remove SIGTYP void lines used by OS2.
8953 xxx=`echo '#include <signal.h>' |
8954         $cppstdin $cppminus $cppflags 2>/dev/null |
8955         $grep '^[       ]*#.*include' | 
8956         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
8957 : Check this list of files to be sure we have parsed the cpp output ok.
8958 : This will also avoid potentially non-existent files, such 
8959 : as ../foo/bar.h
8960 xxxfiles=''
8961 for xx in $xxx /dev/null ; do
8962         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
8963 done
8964 : If we have found no files, at least try signal.h
8965 case "$xxxfiles" in
8966 '')     xxxfiles=`./findhdr signal.h` ;;
8967 esac
8968 xxx=`awk '
8969 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
8970         print substr($2, 4, 20)
8971 }
8972 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8973         print substr($3, 4, 20)
8974 }' $xxxfiles`
8975 : Append some common names just in case the awk scan failed.
8976 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
8977 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
8978 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
8979 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
8980 : generate a few handy files for later
8981 $cat > signal.c <<'EOP'
8982 #include <sys/types.h>
8983 #include <signal.h>
8984 int main() {
8985
8986 /* Strange style to avoid deeply-nested #if/#else/#endif */
8987 #ifndef NSIG
8988 #  ifdef _NSIG
8989 #    define NSIG (_NSIG)
8990 #  endif
8991 #endif
8992
8993 #ifndef NSIG
8994 #  ifdef SIGMAX
8995 #    define NSIG (SIGMAX+1)
8996 #  endif
8997 #endif
8998
8999 #ifndef NSIG
9000 #  ifdef SIG_MAX
9001 #    define NSIG (SIG_MAX+1)
9002 #  endif
9003 #endif
9004
9005 #ifndef NSIG
9006 #  ifdef MAXSIG
9007 #    define NSIG (MAXSIG+1)
9008 #  endif
9009 #endif
9010
9011 #ifndef NSIG
9012 #  ifdef MAX_SIG
9013 #    define NSIG (MAX_SIG+1)
9014 #  endif
9015 #endif
9016
9017 #ifndef NSIG
9018 #  ifdef SIGARRAYSIZE
9019 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
9020 #  endif
9021 #endif
9022
9023 #ifndef NSIG
9024 #  ifdef _sys_nsig
9025 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
9026 #  endif
9027 #endif
9028
9029 /* Default to some arbitrary number that's big enough to get most
9030    of the common signals.
9031 */
9032 #ifndef NSIG
9033 #    define NSIG 50
9034 #endif
9035
9036 printf("NSIG %d\n", NSIG);
9037
9038 EOP
9039 echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
9040 {
9041         printf "#ifdef SIG"; printf $1; printf "\n"
9042         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
9043         printf $1; printf ");\n"
9044         printf "#endif\n"
9045 }
9046 END {
9047         printf "}\n";
9048 }
9049 ' >>signal.c
9050 $cat >signal.awk <<'EOP'
9051 BEGIN { ndups = 0 }
9052 $1 ~ /^NSIG$/ { nsig = $2 }
9053 ($1 !~ /^NSIG$/) && (NF == 2) {
9054     if ($2 > maxsig) { maxsig = $2 }
9055     if (sig_name[$2]) {
9056         dup_name[ndups] = $1
9057         dup_num[ndups] = $2
9058         ndups++ 
9059     }
9060     else {
9061         sig_name[$2] = $1
9062         sig_num[$2] = $2
9063     }
9064
9065 }
9066 END { 
9067     if (nsig == 0) { nsig = maxsig + 1 }
9068         for (n = 1; n < nsig; n++) {
9069                 if (sig_name[n]) {
9070                         printf("%s %d\n", sig_name[n], sig_num[n])
9071                 }
9072                 else {
9073                         printf("NUM%d %d\n", n, n) 
9074                 }
9075         }
9076     for (n = 0; n < ndups; n++) {
9077                 printf("%s %d\n", dup_name[n], dup_num[n])
9078     }
9079 }
9080 EOP
9081 $cat >signal_cmd <<EOS
9082 $startsh
9083 $test -s signal.lst && exit 0
9084 if $cc $ccflags signal.c -o signal $ldflags >/dev/null 2>&1; then
9085         ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
9086 else
9087         echo "(I can't seem be able to compile the test program -- Guessing)"
9088         echo 'kill -l' >signal
9089         set X \`csh -f <signal\`
9090         $rm -f signal
9091         shift
9092         case \$# in
9093         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
9094         esac
9095         echo \$@ | $tr ' ' '\012' | \
9096                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
9097 fi
9098 $rm -f signal.c signal signal.o
9099 EOS
9100 chmod a+x signal_cmd
9101 $eunicefix signal_cmd
9102
9103 : generate list of signal names
9104 echo " "
9105 case "$sig_name" in
9106 '')     sig_num='' ;;
9107 esac
9108 case "$sig_num" in
9109 '')     sig_name='' ;;
9110 esac
9111 case "$sig_name" in
9112 '')
9113         echo "Generating a list of signal names and numbers..." >&4
9114         ./signal_cmd
9115         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
9116         sig_name="ZERO $sig_name"
9117         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
9118         sig_num="0 $sig_num"
9119         ;;
9120 esac
9121 echo "The following signals are available:"
9122 echo " "
9123 echo $sig_name | $awk \
9124 'BEGIN { linelen = 0 }
9125 {
9126         for (i = 1; i <= NF; i++) {
9127                 name = "SIG" $i " "
9128                 linelen = linelen + length(name)
9129                 if (linelen > 70) {
9130                         printf "\n"
9131                         linelen = length(name)
9132                 }
9133                 printf "%s", name
9134         }
9135         printf "\n"
9136 }'
9137 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
9138
9139 : see what type is used for size_t
9140 set size_t sizetype 'unsigned int' stdio.h sys/types.h
9141 eval $typedef
9142 dflt="$sizetype"
9143 echo " "
9144 rp="What type is used for the length parameter for string functions?"
9145 . ./myread
9146 sizetype="$ans"
9147
9148 : see what type is used for signed size_t
9149 set ssize_t ssizetype int stdio.h sys/types.h
9150 eval $typedef
9151 dflt="$ssizetype"
9152 $cat > ssize.c <<EOM
9153 #include <stdio.h>
9154 #include <sys/types.h>
9155 #define Size_t $sizetype
9156 #define SSize_t $dflt
9157 main()
9158 {
9159         if (sizeof(Size_t) == sizeof(SSize_t))
9160                 printf("$dflt\n");
9161         else if (sizeof(Size_t) == sizeof(int))
9162                 printf("int\n");
9163         else 
9164                 printf("long\n");
9165         fflush(stdout);
9166         exit(0);
9167 }
9168 EOM
9169 echo " "
9170 #       If $libs contains -lsfio, and sfio is mis-configured, then it
9171 #       sometimes (apparently) runs and exits with a 0 status, but with no
9172 #       output!.  Thus we check with test -s whether we actually got any 
9173 #       output.  I think it has to do with sfio's use of _exit vs. exit,
9174 #       but I don't know for sure.  --Andy Dougherty  1/27/97.
9175 if $cc $optimize $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1  &&
9176                 ./ssize > ssize.out 2>/dev/null && test -s ssize.out ; then
9177         ssizetype=`$cat ssize.out`
9178         echo "I'll be using $ssizetype for functions returning a byte count." >&4
9179 else
9180         $cat >&4 <<EOM
9181
9182 Help! I can't compile and run the ssize_t test program: please enlighten me!
9183 (This is probably a misconfiguration in your system or libraries, and
9184 you really ought to fix it.  Still, I'll try anyway.)
9185
9186 I need a type that is the same size as $sizetype, but is guaranteed to
9187 be signed.  Common values are ssize_t, int and long.
9188
9189 EOM
9190         rp="What signed type is the same size as $sizetype?"
9191         . ./myread
9192         ssizetype="$ans"
9193 fi
9194 $rm -f ssize ssize.[co] ssize.out
9195
9196 : see what type of char stdio uses.
9197 echo " "
9198 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9199         echo "Your stdio uses unsigned chars." >&4
9200         stdchar="unsigned char"
9201 else
9202         echo "Your stdio uses signed chars." >&4
9203         stdchar="char"
9204 fi
9205
9206 : see if time exists
9207 echo " "
9208 if set time val -f d_time; eval $csym; $val; then
9209         echo 'time() found.' >&4
9210         val="$define"
9211         set time_t timetype long stdio.h sys/types.h
9212         eval $typedef
9213         dflt="$timetype"
9214         echo " "
9215         rp="What type is returned by time() on this system?"
9216         . ./myread
9217         timetype="$ans"
9218 else
9219         echo 'time() not found, hope that will do.' >&4
9220         val="$undef"
9221         timetype='int';
9222 fi
9223 set d_time
9224 eval $setvar
9225
9226 : see what type uids are declared as in the kernel
9227 set uid_t uidtype xxx stdio.h sys/types.h
9228 eval $typedef
9229 case "$uidtype" in
9230 xxx)
9231         xxx=`./findhdr sys/user.h`
9232         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
9233         case $1 in
9234         unsigned) dflt="$1 $2" ;;
9235         *) dflt="$1" ;;
9236         esac
9237         ;;
9238 *) dflt="$uidtype";;
9239 esac
9240 echo " "
9241 rp="What is the type for user ids returned by getuid()?"
9242 . ./myread
9243 uidtype="$ans"
9244
9245 : see if dbm.h is available
9246 : see if dbmclose exists
9247 set dbmclose d_dbmclose
9248 eval $inlibc
9249
9250 case "$d_dbmclose" in
9251 $define)
9252         set dbm.h i_dbm
9253         eval $inhdr
9254         case "$i_dbm" in
9255         $define)
9256                 val="$undef"
9257                 set i_rpcsvcdbm
9258                 eval $setvar
9259                 ;;
9260         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9261                 eval $inhdr
9262                 ;;
9263         esac
9264         ;;
9265 *)      echo "We won't be including <dbm.h>"
9266         val="$undef"
9267         set i_dbm
9268         eval $setvar
9269         val="$undef"
9270         set i_rpcsvcdbm
9271         eval $setvar
9272         ;;
9273 esac
9274
9275 : see if this is a sys/file.h system
9276 val=''
9277 set sys/file.h val
9278 eval $inhdr
9279
9280 : do we need to include sys/file.h ?
9281 case "$val" in
9282 "$define")
9283         echo " "
9284         if $h_sysfile; then
9285                 val="$define"
9286                 echo "We'll be including <sys/file.h>." >&4
9287         else
9288                 val="$undef"
9289                 echo "We won't be including <sys/file.h>." >&4
9290         fi
9291         ;;
9292 *)
9293         h_sysfile=false
9294         ;;
9295 esac
9296 set i_sysfile
9297 eval $setvar
9298
9299 : see if fcntl.h is there
9300 val=''
9301 set fcntl.h val
9302 eval $inhdr
9303
9304 : see if we can include fcntl.h
9305 case "$val" in
9306 "$define")
9307         echo " "
9308         if $h_fcntl; then
9309                 val="$define"
9310                 echo "We'll be including <fcntl.h>." >&4
9311         else
9312                 val="$undef"
9313                 if $h_sysfile; then
9314         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9315                 else
9316                         echo "We won't be including <fcntl.h>." >&4
9317                 fi
9318         fi
9319         ;;
9320 *)
9321         h_fcntl=false
9322         val="$undef"
9323         ;;
9324 esac
9325 set i_fcntl
9326 eval $setvar
9327
9328 : see if this is an grp system
9329 set grp.h i_grp
9330 eval $inhdr
9331
9332 : see if locale.h is available
9333 set locale.h i_locale
9334 eval $inhdr
9335
9336 : see if this is a math.h system
9337 set math.h i_math
9338 eval $inhdr
9339
9340 : see if ndbm.h is available
9341 set ndbm.h t_ndbm
9342 eval $inhdr
9343 case "$t_ndbm" in
9344 $define)
9345         : see if dbm_open exists
9346         set dbm_open d_dbm_open
9347         eval $inlibc
9348         case "$d_dbm_open" in
9349         $undef)
9350                 t_ndbm="$undef"
9351                 echo "We won't be including <ndbm.h>"
9352                 ;;
9353         esac
9354         ;;
9355 esac
9356 val="$t_ndbm"
9357 set i_ndbm
9358 eval $setvar
9359
9360 : see if net/errno.h is available
9361 val=''
9362 set net/errno.h val
9363 eval $inhdr
9364
9365 : Unfortunately, it causes problems on some systems.  Arrgh.
9366 case "$val" in
9367 $define)
9368         cat > try.c <<'EOM'
9369 #include <stdio.h>
9370 #include <errno.h>
9371 #include <net/errno.h>
9372 int func()
9373 {
9374         return ENOTSOCK;
9375 }
9376 EOM
9377         if $cc $ccflags -c try.c >/dev/null 2>&1; then
9378                 echo "We'll be including <net/errno.h>." >&4
9379         else
9380                 echo "We won't be including <net/errno.h>." >&4
9381                 val="$undef"
9382         fi
9383         $rm -f try.* try
9384         ;;
9385 esac
9386 set i_neterrno
9387 eval $setvar
9388
9389 : get C preprocessor symbols handy
9390 echo " "
9391 $echo $n "Hmm... $c"
9392 echo $al | $tr ' ' '\012' >Cppsym.know
9393 $cat <<EOSS >Cppsym
9394 $startsh
9395 case "\$1" in
9396 -l) list=true
9397         shift
9398         ;;
9399 esac
9400 unknown=''
9401 case "\$list\$#" in
9402 1|2)
9403         for sym do
9404                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
9405                         exit 0
9406                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
9407                         :
9408                 else
9409                         unknown="\$unknown \$sym"
9410                 fi
9411         done
9412         set X \$unknown
9413         shift
9414         ;;
9415 esac
9416 case \$# in
9417 0) exit 1;;
9418 esac
9419 echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
9420 #ifdef \1\\
9421 exit 0; _ _ _ _\1\\      \1\\
9422 #endif\\
9423 /' >Cppsym\$\$
9424 echo "exit 1; _ _ _" >>Cppsym\$\$
9425 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
9426 case "\$list" in
9427 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
9428 *)
9429         sh Cppsym2\$\$
9430         status=\$?
9431         ;;
9432 esac
9433 $rm -f Cppsym\$\$ Cppsym2\$\$
9434 exit \$status
9435 EOSS
9436 chmod +x Cppsym
9437 $eunicefix Cppsym
9438 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
9439
9440 : now check the C compiler for additional symbols
9441 $cat >ccsym <<EOS
9442 $startsh
9443 $cat >tmp.c <<EOF
9444 extern int foo;
9445 EOF
9446 for i in \`$cc -v -c tmp.c 2>&1\`
9447 do
9448         case "\$i" in
9449         -D*) echo "\$i" | $sed 's/^-D//';;
9450         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
9451         esac
9452 done
9453 $rm -f try.c
9454 EOS
9455 chmod +x ccsym
9456 $eunicefix ccsym
9457 ./ccsym | $sort | $uniq >ccsym.raw
9458 $awk '/\=/ { print $0; next }
9459         { print $0"=1" }' ccsym.raw >ccsym.list
9460 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
9461 $comm -13 ccsym.true ccsym.list >ccsym.own
9462 $comm -12 ccsym.true ccsym.list >ccsym.com
9463 $comm -23 ccsym.true ccsym.list >ccsym.cpp
9464 also=''
9465 symbols='symbols'
9466 if $test -z ccsym.raw; then
9467         echo "Your C compiler doesn't seem to define any symbol!" >&4
9468         echo " "
9469         echo "However, your C preprocessor defines the following ones:"
9470         $cat Cppsym.true
9471 else
9472         if $test -s ccsym.com; then
9473                 echo "Your C compiler and pre-processor define these symbols:"
9474                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
9475                 also='also '
9476                 symbols='ones'
9477                 $test "$silent" || sleep 1
9478         fi
9479         if $test -s ccsym.cpp; then
9480                 $test "$also" && echo " "
9481                 echo "Your C pre-processor ${also}defines the following $symbols:"
9482                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
9483                 also='further '
9484                 $test "$silent" || sleep 1
9485         fi
9486         if $test -s ccsym.own; then
9487                 $test "$also" && echo " "
9488                 echo "Your C compiler ${also}defines the following cpp variables:"
9489                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
9490                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
9491                 $test "$silent" || sleep 1
9492         fi
9493 fi
9494 $rm -f ccsym*
9495
9496 : see if this is a termio system
9497 val="$undef"
9498 val2="$undef"
9499 val3="$undef"
9500 if $test `./findhdr termios.h`; then
9501         set tcsetattr i_termios
9502         eval $inlibc
9503         val3="$i_termios"
9504 fi
9505 echo " "
9506 case "$val3" in
9507 "$define") echo "You have POSIX termios.h... good!" >&4;;
9508 *) if ./Cppsym pyr; then
9509                 case "`/bin/universe`" in
9510                 ucb) if $test `./findhdr sgtty.h`; then
9511                                 val2="$define"
9512                                 echo "<sgtty.h> found." >&4
9513                         else
9514                                 echo "System is pyramid with BSD universe."
9515                                 echo "<sgtty.h> not found--you could have problems." >&4
9516                         fi;;
9517                 *) if $test `./findhdr termio.h`; then
9518                                 val="$define"
9519                                 echo "<termio.h> found." >&4
9520                         else
9521                                 echo "System is pyramid with USG universe."
9522                                 echo "<termio.h> not found--you could have problems." >&4
9523                         fi;;
9524                 esac
9525         elif ./usg; then
9526                 if $test `./findhdr termio.h`; then
9527                         echo "<termio.h> found." >&4
9528                         val="$define"
9529                 elif $test `./findhdr sgtty.h`; then
9530                         echo "<sgtty.h> found." >&4
9531                         val2="$define"
9532                 else
9533 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
9534                 fi
9535         else
9536                 if $test `./findhdr sgtty.h`; then
9537                         echo "<sgtty.h> found." >&4
9538                         val2="$define"
9539                 elif $test `./findhdr termio.h`; then
9540                         echo "<termio.h> found." >&4
9541                         val="$define"
9542                 else
9543 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
9544                 fi
9545         fi;;
9546 esac
9547 set i_termio; eval $setvar
9548 val=$val2; set i_sgtty; eval $setvar
9549 val=$val3; set i_termios; eval $setvar
9550
9551 : see if stdarg is available
9552 echo " "
9553 if $test `./findhdr stdarg.h`; then
9554         echo "<stdarg.h> found." >&4
9555         valstd="$define"
9556 else
9557         echo "<stdarg.h> NOT found." >&4
9558         valstd="$undef"
9559 fi
9560
9561 : see if varags is available
9562 echo " "
9563 if $test `./findhdr varargs.h`; then
9564         echo "<varargs.h> found." >&4
9565 else
9566         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
9567 fi
9568
9569 : set up the varargs testing programs
9570 $cat > varargs.c <<EOP
9571 #ifdef I_STDARG
9572 #include <stdarg.h>
9573 #endif
9574 #ifdef I_VARARGS
9575 #include <varargs.h>
9576 #endif
9577
9578 #ifdef I_STDARG
9579 int f(char *p, ...)
9580 #else
9581 int f(va_alist)
9582 va_dcl
9583 #endif
9584 {
9585         va_list ap;
9586 #ifndef I_STDARG
9587         char *p;
9588 #endif
9589 #ifdef I_STDARG
9590         va_start(ap,p);
9591 #else
9592         va_start(ap);
9593         p = va_arg(ap, char *);
9594 #endif
9595         va_end(ap);
9596 }
9597 EOP
9598 $cat > varargs <<EOP
9599 $startsh
9600 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
9601         echo "true"
9602 else
9603         echo "false"
9604 fi
9605 $rm -f varargs.o
9606 EOP
9607 chmod +x varargs
9608
9609 : now check which varargs header should be included
9610 echo " "
9611 i_varhdr=''
9612 case "$valstd" in
9613 "$define")
9614         if `./varargs I_STDARG`; then
9615                 val='stdarg.h'
9616         elif `./varargs I_VARARGS`; then
9617                 val='varargs.h'
9618         fi
9619         ;;
9620 *)
9621         if `./varargs I_VARARGS`; then
9622                 val='varargs.h'
9623         fi
9624         ;;
9625 esac
9626 case "$val" in
9627 '')
9628 echo "I could not find the definition for va_dcl... You have problems..." >&4
9629         val="$undef"; set i_stdarg; eval $setvar
9630         val="$undef"; set i_varargs; eval $setvar
9631         ;;
9632 *) 
9633         set i_varhdr
9634         eval $setvar
9635         case "$i_varhdr" in
9636         stdarg.h)
9637                 val="$define"; set i_stdarg; eval $setvar
9638                 val="$undef"; set i_varargs; eval $setvar
9639                 ;;
9640         varargs.h)
9641                 val="$undef"; set i_stdarg; eval $setvar
9642                 val="$define"; set i_varargs; eval $setvar
9643                 ;;
9644         esac
9645         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
9646 esac
9647 $rm -f varargs*
9648
9649 : see if stddef is available
9650 set stddef.h i_stddef
9651 eval $inhdr
9652
9653 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
9654 set sys/filio.h i_sysfilio
9655 eval $inhdr
9656 echo " "
9657 if $test `./findhdr sys/ioctl.h`; then
9658         val="$define"
9659         echo '<sys/ioctl.h> found.' >&4
9660 else
9661         val="$undef"
9662         if $test $i_sysfilio = "$define"; then
9663             echo '<sys/ioctl.h> NOT found.' >&4
9664         else
9665                 $test $i_sgtty = "$define" && xxx="sgtty.h"
9666                 $test $i_termio = "$define" && xxx="termio.h"
9667                 $test $i_termios = "$define" && xxx="termios.h"
9668 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
9669         fi
9670 fi
9671 set i_sysioctl
9672 eval $setvar
9673
9674 : see if this is a sys/param system
9675 set sys/param.h i_sysparam
9676 eval $inhdr
9677
9678 : see if sys/resource.h has to be included
9679 set sys/resource.h i_sysresrc
9680 eval $inhdr
9681
9682 : see if sys/stat.h is available
9683 set sys/stat.h i_sysstat
9684 eval $inhdr
9685
9686 : see if sys/types.h has to be included
9687 set sys/types.h i_systypes
9688 eval $inhdr
9689
9690 : see if this is a sys/un.h system
9691 set sys/un.h i_sysun
9692 eval $inhdr
9693
9694 : see if this is a syswait system
9695 set sys/wait.h i_syswait
9696 eval $inhdr
9697
9698 : see if this is an utime system
9699 set utime.h i_utime
9700 eval $inhdr
9701
9702 : see if this is a values.h system
9703 set values.h i_values
9704 eval $inhdr
9705
9706 : see if this is a vfork system
9707 case "$d_vfork" in
9708 "$define")
9709         set vfork.h i_vfork
9710         eval $inhdr
9711         ;;
9712 *)
9713         i_vfork="$undef"
9714         ;;
9715 esac
9716
9717 : see if gdbm.h is available
9718 set gdbm.h t_gdbm
9719 eval $inhdr
9720 case "$t_gdbm" in
9721 $define)
9722         : see if gdbm_open exists
9723         set gdbm_open d_gdbm_open
9724         eval $inlibc
9725         case "$d_gdbm_open" in
9726         $undef)
9727                 t_gdbm="$undef"
9728                 echo "We won't be including <gdbm.h>"
9729                 ;;
9730         esac
9731         ;;
9732 esac
9733 val="$t_gdbm"
9734 set i_gdbm
9735 eval $setvar
9736
9737 echo " "
9738 echo "Looking for extensions..." >&4
9739 cd ../ext
9740 : If we are using the old config.sh, known_extensions may contain
9741 : old or inaccurate or duplicate values.
9742 known_extensions=''
9743 : We do not use find because it might not be available.
9744 : We do not just use MANIFEST because the user may have dropped
9745 : some additional extensions into the source tree and expect them
9746 : to be built.
9747 for xxx in * ; do
9748     case "$xxx" in
9749     DynaLoader) ;;
9750     *)  if $test -f $xxx/$xxx.xs; then
9751             known_extensions="$known_extensions $xxx"
9752         else
9753             if $test -d $xxx; then
9754                 cd $xxx
9755                 for yyy in * ; do
9756                     if $test -f $yyy/$yyy.xs; then
9757                         known_extensions="$known_extensions $xxx/$yyy"
9758                     fi
9759                 done
9760                 cd ..
9761             fi
9762         fi ;;
9763     esac
9764 done
9765 set X $known_extensions
9766 shift
9767 known_extensions="$*"
9768 cd ../UU
9769
9770 : Now see which are supported on this system.
9771 avail_ext=''
9772 for xxx in $known_extensions ; do
9773     case "$xxx" in
9774     DB_File) case "$i_db" in 
9775             $define) avail_ext="$avail_ext $xxx" ;;
9776             esac
9777             ;;
9778     GDBM_File) case "$i_gdbm" in 
9779             $define) avail_ext="$avail_ext $xxx" ;;
9780             esac
9781             ;;
9782     NDBM_File) case "$i_ndbm" in 
9783             $define) avail_ext="$avail_ext $xxx" ;;
9784             esac
9785             ;;
9786     ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
9787             *"${define}"*) avail_ext="$avail_ext $xxx" ;;
9788             esac
9789             ;;
9790     POSIX) case "$useposix" in 
9791             true|define|y) avail_ext="$avail_ext $xxx" ;;
9792             esac
9793             ;;
9794     Opcode) case "$useopcode" in 
9795             true|define|y) avail_ext="$avail_ext $xxx" ;;
9796             esac
9797             ;;
9798     Socket) case "$d_socket" in 
9799             $define) avail_ext="$avail_ext $xxx" ;;
9800             esac
9801             ;;
9802     *)      avail_ext="$avail_ext $xxx"
9803             ;;
9804     esac
9805 done
9806
9807 set X $avail_ext
9808 shift
9809 avail_ext="$*"
9810
9811 case $usedl in
9812 $define)
9813         $cat <<EOM
9814 A number of extensions are supplied with $package.  You may choose to
9815 compile these extensions for dynamic loading (the default), compile
9816 them into the $package executable (static loading), or not include
9817 them at all.  Answer "none" to include no extensions.
9818
9819 EOM
9820         case "$dynamic_ext" in
9821         '') dflt="$avail_ext" ;;
9822         *)      dflt="$dynamic_ext" ;;
9823         esac
9824         case "$dflt" in
9825         '')     dflt=none;;
9826         esac
9827         rp="What extensions do you wish to load dynamically?"
9828         . ./myread
9829         case "$ans" in
9830         none) dynamic_ext=' ' ;;
9831         *) dynamic_ext="$ans" ;;
9832         esac
9833
9834         case "$static_ext" in
9835         '')
9836                 : Exclude those already listed in dynamic linking
9837                 dflt=''
9838                 for xxx in $avail_ext; do
9839                         case " $dynamic_ext " in
9840                         *" $xxx "*) ;;
9841                         *) dflt="$dflt $xxx" ;;
9842                         esac
9843                 done
9844                 set X $dflt
9845                 shift
9846                 dflt="$*"
9847                 ;;
9848         *)  dflt="$static_ext" 
9849                 ;;
9850         esac
9851
9852         case "$dflt" in
9853         '')     dflt=none;;
9854         esac
9855         rp="What extensions do you wish to load statically?"
9856         . ./myread
9857         case "$ans" in
9858         none) static_ext=' ' ;;
9859         *) static_ext="$ans" ;;
9860         esac
9861         ;;
9862 *)
9863         $cat <<EOM
9864 A number of extensions are supplied with $package.  Answer "none" 
9865 to include no extensions. 
9866
9867 EOM
9868         case "$static_ext" in
9869         '') dflt="$avail_ext" ;;
9870         *)      dflt="$static_ext" ;;
9871         esac
9872
9873         case "$dflt" in
9874         '')     dflt=none;;
9875         esac
9876         rp="What extensions do you wish to include?"
9877         . ./myread
9878         case "$ans" in
9879         none) static_ext=' ' ;;
9880         *) static_ext="$ans" ;;
9881         esac
9882         ;;
9883 esac
9884
9885 set X $dynamic_ext $static_ext
9886 shift
9887 extensions="$*"
9888
9889 : Remove build directory name from cppstdin so it can be used from
9890 : either the present location or the final installed location.
9891 echo " "
9892 : Get out of the UU directory to get correct path name.
9893 cd ..
9894 case "$cppstdin" in
9895 `pwd`/cppstdin)
9896         echo "Stripping down cppstdin path name"
9897         cppstdin=cppstdin
9898         ;;
9899 esac
9900 cd UU
9901
9902 : end of configuration questions
9903 echo " "
9904 echo "End of configuration questions."
9905 echo " "
9906
9907 : back to where it started
9908 if test -d ../UU; then
9909         cd ..
9910 fi
9911
9912 : configuration may be patched via a 'config.over' file
9913 if $test -f config.over; then
9914         echo " "
9915         dflt=y
9916         rp='I see a config.over file.  Do you wish to load it?'
9917         . UU/myread
9918         case "$ans" in
9919         n*) echo "OK, I'll ignore it.";;
9920         *)      . ./config.over
9921                 echo "Configuration override changes have been loaded."
9922                 ;;
9923         esac
9924 fi
9925
9926 : in case they want portability, strip down executable paths
9927 case "$d_portable" in
9928 "$define")
9929         echo " "
9930         echo "Stripping down executable paths..." >&4
9931         for file in $loclist $trylist; do
9932                 eval $file="\$file"
9933         done
9934         ;;
9935 esac
9936
9937 : create config.sh file
9938 echo " "
9939 echo "Creating config.sh..." >&4
9940 $spitshell <<EOT >config.sh
9941 $startsh
9942 #
9943 # This file was produced by running the Configure script.  It holds all
9944 # the definitions figured out by Configure.  Should you modify any of
9945 # these values, do not forget to propagate your changes by running
9946 # "Configure -S"; or, equivalently, you may run each .SH file yourself.
9947 #
9948
9949 # Configuration time: $cf_time
9950 # Configured by: $cf_by
9951 # Target system: $myuname
9952
9953 Author='$Author'
9954 Date='$Date'
9955 Header='$Header'
9956 Id='$Id'
9957 Locker='$Locker'
9958 Log='$Log'
9959 Mcc='$Mcc'
9960 RCSfile='$RCSfile'
9961 Revision='$Revision'
9962 Source='$Source'
9963 State='$State'
9964 afs='$afs'
9965 alignbytes='$alignbytes'
9966 aphostname='$aphostname'
9967 ar='$ar'
9968 archlib='$archlib'
9969 archlibexp='$archlibexp'
9970 archname='$archname'
9971 archobjs='$archobjs'
9972 awk='$awk'
9973 baserev='$baserev'
9974 bash='$bash'
9975 bin='$bin'
9976 bincompat3='$bincompat3'
9977 binexp='$binexp'
9978 bison='$bison'
9979 byacc='$byacc'
9980 byteorder='$byteorder'
9981 c='$c'
9982 castflags='$castflags'
9983 cat='$cat'
9984 cc='$cc'
9985 cccdlflags='$cccdlflags'
9986 ccdlflags='$ccdlflags'
9987 ccflags='$ccflags'
9988 cf_by='$cf_by'
9989 cf_email='$cf_email'
9990 cf_time='$cf_time'
9991 chgrp='$chgrp'
9992 chmod='$chmod'
9993 chown='$chown'
9994 clocktype='$clocktype'
9995 comm='$comm'
9996 compress='$compress'
9997 contains='$contains'
9998 cp='$cp'
9999 cpio='$cpio'
10000 cpp='$cpp'
10001 cpp_stuff='$cpp_stuff'
10002 cppflags='$cppflags'
10003 cpplast='$cpplast'
10004 cppminus='$cppminus'
10005 cpprun='$cpprun'
10006 cppstdin='$cppstdin'
10007 cryptlib='$cryptlib'
10008 csh='$csh'
10009 d_Gconvert='$d_Gconvert'
10010 d_access='$d_access'
10011 d_alarm='$d_alarm'
10012 d_archlib='$d_archlib'
10013 d_attribut='$d_attribut'
10014 d_bcmp='$d_bcmp'
10015 d_bcopy='$d_bcopy'
10016 d_bincompat3='$d_bincompat3'
10017 d_bsd='$d_bsd'
10018 d_bsdgetpgrp='$d_bsdgetpgrp'
10019 d_bsdpgrp='$d_bsdpgrp'
10020 d_bsdsetpgrp='$d_bsdsetpgrp'
10021 d_bzero='$d_bzero'
10022 d_casti32='$d_casti32'
10023 d_castneg='$d_castneg'
10024 d_charvspr='$d_charvspr'
10025 d_chown='$d_chown'
10026 d_chroot='$d_chroot'
10027 d_chsize='$d_chsize'
10028 d_closedir='$d_closedir'
10029 d_const='$d_const'
10030 d_crypt='$d_crypt'
10031 d_csh='$d_csh'
10032 d_cuserid='$d_cuserid'
10033 d_dbl_dig='$d_dbl_dig'
10034 d_difftime='$d_difftime'
10035 d_dirnamlen='$d_dirnamlen'
10036 d_dlerror='$d_dlerror'
10037 d_dlopen='$d_dlopen'
10038 d_dlsymun='$d_dlsymun'
10039 d_dosuid='$d_dosuid'
10040 d_dup2='$d_dup2'
10041 d_eofnblk='$d_eofnblk'
10042 d_eunice='$d_eunice'
10043 d_fchmod='$d_fchmod'
10044 d_fchown='$d_fchown'
10045 d_fcntl='$d_fcntl'
10046 d_fd_macros='$d_fd_macros'
10047 d_fd_set='$d_fd_set'
10048 d_fds_bits='$d_fds_bits'
10049 d_fgetpos='$d_fgetpos'
10050 d_flexfnam='$d_flexfnam'
10051 d_flock='$d_flock'
10052 d_fork='$d_fork'
10053 d_fpathconf='$d_fpathconf'
10054 d_fsetpos='$d_fsetpos'
10055 d_ftime='$d_ftime'
10056 d_getgrps='$d_getgrps'
10057 d_setgrps='$d_setgrps'
10058 d_gethent='$d_gethent'
10059 d_gethname='$d_gethname'
10060 d_getlogin='$d_getlogin'
10061 d_getpgid='$d_getpgid'
10062 d_getpgrp2='$d_getpgrp2'
10063 d_getpgrp='$d_getpgrp'
10064 d_getppid='$d_getppid'
10065 d_getprior='$d_getprior'
10066 d_gettimeod='$d_gettimeod'
10067 d_gnulibc='$d_gnulibc'
10068 d_htonl='$d_htonl'
10069 d_index='$d_index'
10070 d_inetaton='$d_inetaton'
10071 d_isascii='$d_isascii'
10072 d_killpg='$d_killpg'
10073 d_link='$d_link'
10074 d_locconv='$d_locconv'
10075 d_lockf='$d_lockf'
10076 d_lstat='$d_lstat'
10077 d_mblen='$d_mblen'
10078 d_mbstowcs='$d_mbstowcs'
10079 d_mbtowc='$d_mbtowc'
10080 d_memcmp='$d_memcmp'
10081 d_memcpy='$d_memcpy'
10082 d_memmove='$d_memmove'
10083 d_memset='$d_memset'
10084 d_mkdir='$d_mkdir'
10085 d_mkfifo='$d_mkfifo'
10086 d_mktime='$d_mktime'
10087 d_msg='$d_msg'
10088 d_msgctl='$d_msgctl'
10089 d_msgget='$d_msgget'
10090 d_msgrcv='$d_msgrcv'
10091 d_msgsnd='$d_msgsnd'
10092 d_mymalloc='$d_mymalloc'
10093 d_nice='$d_nice'
10094 d_oldarchlib='$d_oldarchlib'
10095 d_oldsock='$d_oldsock'
10096 d_open3='$d_open3'
10097 d_pathconf='$d_pathconf'
10098 d_pause='$d_pause'
10099 d_phostname='$d_phostname'
10100 d_pipe='$d_pipe'
10101 d_poll='$d_poll'
10102 d_portable='$d_portable'
10103 d_pwage='$d_pwage'
10104 d_pwchange='$d_pwchange'
10105 d_pwclass='$d_pwclass'
10106 d_pwcomment='$d_pwcomment'
10107 d_pwexpire='$d_pwexpire'
10108 d_pwquota='$d_pwquota'
10109 d_readdir='$d_readdir'
10110 d_readlink='$d_readlink'
10111 d_rename='$d_rename'
10112 d_rewinddir='$d_rewinddir'
10113 d_rmdir='$d_rmdir'
10114 d_safebcpy='$d_safebcpy'
10115 d_safemcpy='$d_safemcpy'
10116 d_sanemcmp='$d_sanemcmp'
10117 d_seekdir='$d_seekdir'
10118 d_select='$d_select'
10119 d_sem='$d_sem'
10120 d_semctl='$d_semctl'
10121 d_semget='$d_semget'
10122 d_semop='$d_semop'
10123 d_setegid='$d_setegid'
10124 d_seteuid='$d_seteuid'
10125 d_setlinebuf='$d_setlinebuf'
10126 d_setlocale='$d_setlocale'
10127 d_setpgid='$d_setpgid'
10128 d_setpgrp2='$d_setpgrp2'
10129 d_setpgrp='$d_setpgrp'
10130 d_setprior='$d_setprior'
10131 d_setregid='$d_setregid'
10132 d_setresgid='$d_setresgid'
10133 d_setresuid='$d_setresuid'
10134 d_setreuid='$d_setreuid'
10135 d_setrgid='$d_setrgid'
10136 d_setruid='$d_setruid'
10137 d_setsid='$d_setsid'
10138 d_sfio='$d_sfio'
10139 d_shm='$d_shm'
10140 d_shmat='$d_shmat'
10141 d_shmatprototype='$d_shmatprototype'
10142 d_shmctl='$d_shmctl'
10143 d_shmdt='$d_shmdt'
10144 d_shmget='$d_shmget'
10145 d_sigaction='$d_sigaction'
10146 d_sigsetjmp='$d_sigsetjmp'
10147 d_socket='$d_socket'
10148 d_sockpair='$d_sockpair'
10149 d_statblks='$d_statblks'
10150 d_stdio_cnt_lval='$d_stdio_cnt_lval'
10151 d_stdio_ptr_lval='$d_stdio_ptr_lval'
10152 d_stdiobase='$d_stdiobase'
10153 d_stdstdio='$d_stdstdio'
10154 d_strchr='$d_strchr'
10155 d_strcoll='$d_strcoll'
10156 d_strctcpy='$d_strctcpy'
10157 d_strerrm='$d_strerrm'
10158 d_strerror='$d_strerror'
10159 d_strtod='$d_strtod'
10160 d_strtol='$d_strtol'
10161 d_strtoul='$d_strtoul'
10162 d_strxfrm='$d_strxfrm'
10163 d_suidsafe='$d_suidsafe'
10164 d_symlink='$d_symlink'
10165 d_syscall='$d_syscall'
10166 d_sysconf='$d_sysconf'
10167 d_sysernlst='$d_sysernlst'
10168 d_syserrlst='$d_syserrlst'
10169 d_system='$d_system'
10170 d_tcgetpgrp='$d_tcgetpgrp'
10171 d_tcsetpgrp='$d_tcsetpgrp'
10172 d_telldir='$d_telldir'
10173 d_time='$d_time'
10174 d_times='$d_times'
10175 d_truncate='$d_truncate'
10176 d_tzname='$d_tzname'
10177 d_umask='$d_umask'
10178 d_uname='$d_uname'
10179 d_vfork='$d_vfork'
10180 d_void_closedir='$d_void_closedir'
10181 d_voidsig='$d_voidsig'
10182 d_voidtty='$d_voidtty'
10183 d_volatile='$d_volatile'
10184 d_vprintf='$d_vprintf'
10185 d_wait4='$d_wait4'
10186 d_waitpid='$d_waitpid'
10187 d_wcstombs='$d_wcstombs'
10188 d_wctomb='$d_wctomb'
10189 d_xenix='$d_xenix'
10190 date='$date'
10191 db_hashtype='$db_hashtype'
10192 db_prefixtype='$db_prefixtype'
10193 defvoidused='$defvoidused'
10194 direntrytype='$direntrytype'
10195 dlext='$dlext'
10196 dlsrc='$dlsrc'
10197 dynamic_ext='$dynamic_ext'
10198 eagain='$eagain'
10199 echo='$echo'
10200 egrep='$egrep'
10201 emacs='$emacs'
10202 eunicefix='$eunicefix'
10203 exe_ext='$exe_ext'
10204 expr='$expr'
10205 extensions='$extensions'
10206 find='$find'
10207 firstmakefile='$firstmakefile'
10208 flex='$flex'
10209 fpostype='$fpostype'
10210 freetype='$freetype'
10211 full_csh='$full_csh'
10212 full_sed='$full_sed'
10213 gcc='$gcc'
10214 gccversion='$gccversion'
10215 gidtype='$gidtype'
10216 glibpth='$glibpth'
10217 grep='$grep'
10218 groupcat='$groupcat'
10219 groupstype='$groupstype'
10220 gzip='$gzip'
10221 h_fcntl='$h_fcntl'
10222 h_sysfile='$h_sysfile'
10223 hint='$hint'
10224 hostcat='$hostcat'
10225 huge='$huge'
10226 i_bsdioctl='$i_bsdioctl'
10227 i_db='$i_db'
10228 i_dbm='$i_dbm'
10229 i_dirent='$i_dirent'
10230 i_dld='$i_dld'
10231 i_dlfcn='$i_dlfcn'
10232 i_fcntl='$i_fcntl'
10233 i_float='$i_float'
10234 i_gdbm='$i_gdbm'
10235 i_grp='$i_grp'
10236 i_limits='$i_limits'
10237 i_locale='$i_locale'
10238 i_malloc='$i_malloc'
10239 i_math='$i_math'
10240 i_memory='$i_memory'
10241 i_ndbm='$i_ndbm'
10242 i_neterrno='$i_neterrno'
10243 i_niin='$i_niin'
10244 i_pwd='$i_pwd'
10245 i_rpcsvcdbm='$i_rpcsvcdbm'
10246 i_sfio='$i_sfio'
10247 i_sgtty='$i_sgtty'
10248 i_stdarg='$i_stdarg'
10249 i_stddef='$i_stddef'
10250 i_stdlib='$i_stdlib'
10251 i_string='$i_string'
10252 i_sysdir='$i_sysdir'
10253 i_sysfile='$i_sysfile'
10254 i_sysfilio='$i_sysfilio'
10255 i_sysin='$i_sysin'
10256 i_sysioctl='$i_sysioctl'
10257 i_sysndir='$i_sysndir'
10258 i_sysparam='$i_sysparam'
10259 i_sysresrc='$i_sysresrc'
10260 i_sysselct='$i_sysselct'
10261 i_syssockio='$i_syssockio'
10262 i_sysstat='$i_sysstat'
10263 i_systime='$i_systime'
10264 i_systimek='$i_systimek'
10265 i_systimes='$i_systimes'
10266 i_systypes='$i_systypes'
10267 i_sysun='$i_sysun'
10268 i_syswait='$i_syswait'
10269 i_termio='$i_termio'
10270 i_termios='$i_termios'
10271 i_time='$i_time'
10272 i_unistd='$i_unistd'
10273 i_utime='$i_utime'
10274 i_values='$i_values'
10275 i_varargs='$i_varargs'
10276 i_varhdr='$i_varhdr'
10277 i_vfork='$i_vfork'
10278 incpath='$incpath'
10279 inews='$inews'
10280 installarchlib='$installarchlib'
10281 installbin='$installbin'
10282 installman1dir='$installman1dir'
10283 installman3dir='$installman3dir'
10284 installprivlib='$installprivlib'
10285 installscript='$installscript'
10286 installsitearch='$installsitearch'
10287 installsitelib='$installsitelib'
10288 intsize='$intsize'
10289 known_extensions='$known_extensions'
10290 ksh='$ksh'
10291 large='$large'
10292 ld='$ld'
10293 lddlflags='$lddlflags'
10294 ldflags='$ldflags'
10295 less='$less'
10296 lib_ext='$lib_ext'
10297 libc='$libc'
10298 libperl='$libperl'
10299 libpth='$libpth'
10300 libs='$libs'
10301 libswanted='$libswanted'
10302 line='$line'
10303 lint='$lint'
10304 lkflags='$lkflags'
10305 ln='$ln'
10306 lns='$lns'
10307 locincpth='$locincpth'
10308 loclibpth='$loclibpth'
10309 longsize='$longsize'
10310 lp='$lp'
10311 lpr='$lpr'
10312 ls='$ls'
10313 lseektype='$lseektype'
10314 mail='$mail'
10315 mailx='$mailx'
10316 make='$make'
10317 make_set_make='$make_set_make'
10318 mallocobj='$mallocobj'
10319 mallocsrc='$mallocsrc'
10320 malloctype='$malloctype'
10321 man1dir='$man1dir'
10322 man1direxp='$man1direxp'
10323 man1ext='$man1ext'
10324 man3dir='$man3dir'
10325 man3direxp='$man3direxp'
10326 man3ext='$man3ext'
10327 medium='$medium'
10328 mips='$mips'
10329 mips_type='$mips_type'
10330 mkdir='$mkdir'
10331 models='$models'
10332 modetype='$modetype'
10333 more='$more'
10334 mv='$mv'
10335 myarchname='$myarchname'
10336 mydomain='$mydomain'
10337 myhostname='$myhostname'
10338 myuname='$myuname'
10339 n='$n'
10340 nm_opt='$nm_opt'
10341 nm_so_opt='$nm_so_opt'
10342 nroff='$nroff'
10343 o_nonblock='$o_nonblock'
10344 obj_ext='$obj_ext'
10345 oldarchlib='$oldarchlib'
10346 oldarchlibexp='$oldarchlibexp'
10347 optimize='$optimize'
10348 orderlib='$orderlib'
10349 osname='$osname'
10350 osvers='$osvers'
10351 package='$package'
10352 pager='$pager'
10353 passcat='$passcat'
10354 patchlevel='$patchlevel'
10355 path_sep='$path_sep'
10356 perl='$perl'
10357 perladmin='$perladmin'
10358 perlpath='$perlpath'
10359 pg='$pg'
10360 phostname='$phostname'
10361 plibpth='$plibpth'
10362 pmake='$pmake'
10363 pr='$pr'
10364 prefix='$prefix'
10365 prefixexp='$prefixexp'
10366 privlib='$privlib'
10367 privlibexp='$privlibexp'
10368 prototype='$prototype'
10369 randbits='$randbits'
10370 ranlib='$ranlib'
10371 rd_nodata='$rd_nodata'
10372 rm='$rm'
10373 rmail='$rmail'
10374 runnm='$runnm'
10375 scriptdir='$scriptdir'
10376 scriptdirexp='$scriptdirexp'
10377 sed='$sed'
10378 selecttype='$selecttype'
10379 sendmail='$sendmail'
10380 sh='$sh'
10381 shar='$shar'
10382 sharpbang='$sharpbang'
10383 shmattype='$shmattype'
10384 shortsize='$shortsize'
10385 shrpenv='$shrpenv'
10386 shsharp='$shsharp'
10387 sig_name='$sig_name'
10388 sig_num='$sig_num'
10389 signal_t='$signal_t'
10390 sitearch='$sitearch'
10391 sitearchexp='$sitearchexp'
10392 sitelib='$sitelib'
10393 sitelibexp='$sitelibexp'
10394 sizetype='$sizetype'
10395 sleep='$sleep'
10396 smail='$smail'
10397 small='$small'
10398 so='$so'
10399 sockethdr='$sockethdr'
10400 socketlib='$socketlib'
10401 sort='$sort'
10402 spackage='$spackage'
10403 spitshell='$spitshell'
10404 split='$split'
10405 ssizetype='$ssizetype'
10406 startperl='$startperl'
10407 startsh='$startsh'
10408 static_ext='$static_ext'
10409 stdchar='$stdchar'
10410 stdio_base='$stdio_base'
10411 stdio_bufsiz='$stdio_bufsiz'
10412 stdio_cnt='$stdio_cnt'
10413 stdio_ptr='$stdio_ptr'
10414 strings='$strings'
10415 submit='$submit'
10416 subversion='$subversion'
10417 sysman='$sysman'
10418 tail='$tail'
10419 tar='$tar'
10420 tbl='$tbl'
10421 test='$test'
10422 timeincl='$timeincl'
10423 timetype='$timetype'
10424 touch='$touch'
10425 tr='$tr'
10426 troff='$troff'
10427 uidtype='$uidtype'
10428 uname='$uname'
10429 uniq='$uniq'
10430 usedl='$usedl'
10431 usemymalloc='$usemymalloc'
10432 usenm='$usenm'
10433 useopcode='$useopcode'
10434 useperlio='$useperlio'
10435 useposix='$useposix'
10436 usesfio='$usesfio'
10437 useshrplib='$useshrplib'
10438 usevfork='$usevfork'
10439 usrinc='$usrinc'
10440 uuname='$uuname'
10441 vi='$vi'
10442 voidflags='$voidflags'
10443 xlibpth='$xlibpth'
10444 zcat='$zcat'
10445 zip='$zip'
10446 EOT
10447
10448 : add special variables
10449 $test -f patchlevel.h && \
10450 awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
10451 echo "CONFIG=true" >>config.sh
10452
10453 : propagate old symbols
10454 if $test -f UU/config.sh; then
10455         <UU/config.sh sort | uniq >UU/oldconfig.sh
10456         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
10457         sort | uniq -u >UU/oldsyms
10458         set X `cat UU/oldsyms`
10459         shift
10460         case $# in
10461         0) ;;
10462         *)
10463                 cat <<EOM
10464 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
10465 EOM
10466                 echo "# Variables propagated from previous config.sh file." >>config.sh
10467                 for sym in `cat UU/oldsyms`; do
10468                         echo "    Propagating $hint variable "'$'"$sym..."
10469                         eval 'tmp="$'"${sym}"'"'
10470                         echo "$tmp" | \
10471                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
10472                 done
10473                 ;;
10474         esac
10475 fi
10476
10477 : Finish up by extracting the .SH files
10478 case "$alldone" in
10479 exit)
10480         $rm -rf UU
10481         echo "Done."
10482         exit 0
10483         ;;
10484 cont)
10485         ;;
10486 '')
10487         dflt=''
10488         nostick=true
10489         $cat <<EOM
10490
10491 If you'd like to make any changes to the config.sh file before I begin
10492 to configure things, do it as a shell escape now (e.g. !vi config.sh).
10493
10494 EOM
10495         rp="Press return or use a shell escape to edit config.sh:"
10496         . UU/myread
10497         nostick=''
10498         case "$ans" in
10499         '') ;;
10500         *) : in case they cannot read
10501                 sh 1>&4 -c "$ans";;
10502         esac
10503         ;;
10504 esac
10505
10506 : if this fails, just run all the .SH files by hand
10507 . ./config.sh
10508
10509 echo " "
10510 exec 1>&4
10511 . ./UU/extract
10512
10513 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
10514         dflt=y
10515         case "$silent" in
10516         true) ;;
10517         *)
10518                 $cat <<EOM
10519
10520 Now you need to generate make dependencies by running "make depend".
10521 You might prefer to run it in background: "make depend > makedepend.out &"
10522 It can take a while, so you might not want to run it right now.
10523
10524 EOM
10525                 ;;
10526         esac
10527         rp="Run make depend now?"
10528         . UU/myread
10529         case "$ans" in
10530         y*)
10531                 make depend && echo "Now you must run a make."
10532                 ;;
10533         *)
10534                 echo "You must run 'make depend' then 'make'."
10535                 ;;
10536         esac
10537 elif test -f [Mm]akefile; then
10538         echo " "
10539         echo "Now you must run a make."
10540 else
10541         echo "Done."
10542 fi
10543
10544 $rm -f kit*isdone ark*isdone
10545 $rm -rf UU
10546
10547 : End of Configure
10548