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