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