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