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