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