b8618cbe2b350039013c87be0a62fa43a397e843
[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_pwage=''
497 d_pwchange=''
498 d_pwclass=''
499 d_pwcomment=''
500 d_pwexpire=''
501 d_pwquota=''
502 i_pwd=''
503 i_sfio=''
504 i_stddef=''
505 i_stdlib=''
506 i_string=''
507 strings=''
508 i_sysdir=''
509 i_sysfile=''
510 d_voidtty=''
511 i_bsdioctl=''
512 i_sysfilio=''
513 i_sysioctl=''
514 i_syssockio=''
515 i_sysndir=''
516 i_sysparam=''
517 i_sysresrc=''
518 i_sysselct=''
519 i_sysstat=''
520 i_systimes=''
521 i_systypes=''
522 i_sysun=''
523 i_syswait=''
524 i_sgtty=''
525 i_termio=''
526 i_termios=''
527 i_systime=''
528 i_systimek=''
529 i_time=''
530 timeincl=''
531 i_unistd=''
532 i_utime=''
533 i_values=''
534 i_stdarg=''
535 i_varargs=''
536 i_varhdr=''
537 i_vfork=''
538 intsize=''
539 longsize=''
540 shortsize=''
541 libc=''
542 libperl=''
543 shrpenv=''
544 useshrplib=''
545 glibpth=''
546 libpth=''
547 loclibpth=''
548 plibpth=''
549 xlibpth=''
550 libs=''
551 lns=''
552 lseektype=''
553 make=''
554 make_set_make=''
555 d_mymalloc=''
556 freetype=''
557 mallocobj=''
558 mallocsrc=''
559 malloctype=''
560 usemymalloc=''
561 installman1dir=''
562 man1dir=''
563 man1direxp=''
564 man1ext=''
565 installman3dir=''
566 man3dir=''
567 man3direxp=''
568 man3ext=''
569 huge=''
570 large=''
571 medium=''
572 models=''
573 small=''
574 split=''
575 modetype=''
576 mydomain=''
577 myhostname=''
578 phostname=''
579 c=''
580 n=''
581 d_eofnblk=''
582 eagain=''
583 o_nonblock=''
584 rd_nodata=''
585 groupcat=''
586 hostcat=''
587 passcat=''
588 d_oldarchlib=''
589 oldarchlib=''
590 oldarchlibexp=''
591 orderlib=''
592 ranlib=''
593 package=''
594 spackage=''
595 pager=''
596 patchlevel=''
597 subversion=''
598 perladmin=''
599 perlpath=''
600 prefix=''
601 prefixexp=''
602 installprivlib=''
603 privlib=''
604 privlibexp=''
605 prototype=''
606 pthreads_created_joinable=''
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 "usethreads 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 getnetbyaddr exists
6617 set getnetbyaddr d_getnbadd
6618 eval $inlibc
6619
6620 : see if gethostent exists
6621 set gethostent d_gethent
6622 eval $inlibc
6623
6624 : see if getlogin exists
6625 set getlogin d_getlogin
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 case "$usethreads" in
8556 $define)
8557
8558     : see if sched_yield exists
8559     set sched_yield d_sched_yield
8560     eval $inlibc
8561     
8562     : see if pthread_yield exists
8563     set pthread_yield d_pthread_yield
8564     eval $inlibc
8565
8566     ;;
8567 *)
8568     d_sched_yield=$undef
8569     d_pthread_yield=$undef
8570     ;;
8571 esac
8572
8573 : see what type lseek is declared as in the kernel
8574 set off_t lseektype long stdio.h sys/types.h
8575 eval $typedef
8576 echo " "
8577 dflt="$lseektype"
8578 rp="What type is lseek's offset on this system declared as?"
8579 . ./myread
8580 lseektype="$ans"
8581
8582 echo " "
8583 case "$make" in
8584 '')
8585         make=`./loc make make $pth`
8586         case "$make" in
8587         /*)     echo make is in $make.  ;;
8588         ?:[\\/]*)       echo make is in $make.  ;;
8589         *)      echo "I don't know where 'make' is, and my life depends on it." >&4
8590                 echo "Go find a make program or fix your PATH setting!" >&4
8591                 exit 1
8592                 ;;
8593         esac
8594         ;;
8595 *)      echo make is in $make. ;;
8596 esac
8597
8598 $echo $n "Checking if your $make program sets \$(MAKE)... $c" >&4
8599 case "$make_set_make" in
8600 '')
8601         $sed 's/^X //' > testmake.mak << 'EOF'
8602 Xall:
8603 X       @echo 'ac_maketemp="$(MAKE)"'
8604 EOF
8605         : GNU make sometimes prints "make[1]: Entering...", which would confuse us.
8606         case "`$make -f testmake.mak 2>/dev/null`" in
8607         *ac_maketemp=*) make_set_make='#' ;;
8608         *)      make_set_make="MAKE=$make" ;;
8609         esac
8610         $rm -f testmake.mak
8611         ;;
8612 esac
8613 case "$make_set_make" in
8614 '#')    echo "Yup, it does." >&4 ;;
8615 *)      echo "Nope, it doesn't." >&4 ;;
8616 esac
8617
8618 : see what type is used for mode_t
8619 set mode_t modetype int stdio.h sys/types.h
8620 eval $typedef
8621 dflt="$modetype"
8622 echo " "
8623 rp="What type is used for file modes?"
8624 . ./myread
8625 modetype="$ans"
8626
8627 : locate the preferred pager for this system
8628 case "$pager" in
8629 '')
8630         dflt=''
8631         case "$pg" in
8632         /*) dflt=$pg;;
8633         esac
8634         case "$more" in
8635         /*) dflt=$more;;
8636         esac
8637         case "$less" in
8638         /*) dflt=$less;;
8639         esac
8640         case "$dflt" in
8641         '') dflt=/usr/ucb/more;;
8642         esac
8643         ;;
8644 *) dflt="$pager";;
8645 esac
8646 echo " "
8647 fn=f/
8648 rp='What pager is used on your system?'
8649 . ./getfile
8650 pager="$ans"
8651
8652 : Cruising for prototypes
8653 echo " "
8654 echo "Checking out function prototypes..." >&4
8655 $cat >prototype.c <<'EOCP'
8656 main(int argc, char *argv[]) {
8657         exit(0);}
8658 EOCP
8659 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
8660         echo "Your C compiler appears to support function prototypes."
8661         val="$define"
8662 else
8663         echo "Your C compiler doesn't seem to understand function prototypes."
8664         val="$undef"
8665 fi
8666 set prototype
8667 eval $setvar
8668 $rm -f prototype*
8669
8670 : check for size of random number generator
8671 echo " "
8672 case "$randbits" in
8673 '')
8674         echo "Checking to see how many bits your rand function produces..." >&4
8675         $cat >try.c <<EOCP
8676 #$i_unistd I_UNISTD
8677 #$i_stdlib I_STDLIB
8678 #include <stdio.h>
8679 #ifdef I_UNISTD
8680 #  include <unistd.h>
8681 #endif
8682 #ifdef I_STDLIB
8683 #  include <stdlib.h>
8684 #endif
8685 EOCP
8686         $cat >>try.c <<'EOCP'
8687 main()
8688 {
8689         register int i;
8690         register unsigned long tmp;
8691         register unsigned long max = 0L;
8692
8693         for (i = 1000; i; i--) {
8694                 tmp = (unsigned long)rand();
8695                 if (tmp > max) max = tmp;
8696         }
8697         for (i = 0; max; i++)
8698                 max /= 2;
8699         printf("%d\n",i);
8700         fflush(stdout);
8701 }
8702 EOCP
8703         if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 ; then
8704                 dflt=`try`
8705         else
8706                 dflt='?'
8707                 echo "(I can't seem to compile the test program...)"
8708         fi
8709         ;;
8710 *)
8711         dflt="$randbits"
8712         ;;
8713 esac
8714 rp='How many bits does your rand() function produce?'
8715 . ./myread
8716 randbits="$ans"
8717 $rm -f try.c try.o try
8718
8719 : see if ar generates random libraries by itself
8720 echo " "
8721 echo "Checking how to generate random libraries on your machine..." >&4
8722 echo 'int bar1() { return bar2(); }' > bar1.c
8723 echo 'int bar2() { return 2; }' > bar2.c
8724 $cat > foo.c <<'EOP'
8725 main() { printf("%d\n", bar1()); exit(0); }
8726 EOP
8727 $cc $ccflags -c bar1.c >/dev/null 2>&1
8728 $cc $ccflags -c bar2.c >/dev/null 2>&1
8729 $cc $ccflags -c foo.c >/dev/null 2>&1
8730 ar rc bar$lib_ext bar2.o bar1.o >/dev/null 2>&1
8731 if $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
8732         ./foobar >/dev/null 2>&1; then
8733         echo "ar appears to generate random libraries itself."
8734         orderlib=false
8735         ranlib=":"
8736 elif ar ts bar$lib_ext >/dev/null 2>&1 &&
8737         $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
8738         ./foobar >/dev/null 2>&1; then
8739                 echo "a table of contents needs to be added with 'ar ts'."
8740                 orderlib=false
8741                 ranlib="ar ts"
8742 else
8743         case "$ranlib" in
8744         :) ranlib='';;
8745         '')
8746                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
8747                 $test -f $ranlib || ranlib=''
8748                 ;;
8749         esac
8750         if $test -n "$ranlib"; then
8751                 echo "your system has '$ranlib'; we'll use that."
8752                 orderlib=false
8753         else
8754                 echo "your system doesn't seem to support random libraries"
8755                 echo "so we'll use lorder and tsort to order the libraries."
8756                 orderlib=true
8757                 ranlib=":"
8758         fi
8759 fi
8760 $rm -f foo* bar* 
8761
8762 : see if sys/select.h has to be included
8763 set sys/select.h i_sysselct
8764 eval $inhdr
8765
8766 : see if we should include time.h, sys/time.h, or both
8767 echo " "
8768 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8769 $echo $n "I'm now running the test program...$c"
8770 $cat >try.c <<'EOCP'
8771 #include <sys/types.h>
8772 #ifdef I_TIME
8773 #include <time.h>
8774 #endif
8775 #ifdef I_SYSTIME
8776 #ifdef SYSTIMEKERNEL
8777 #define KERNEL
8778 #endif
8779 #include <sys/time.h>
8780 #endif
8781 #ifdef I_SYSSELECT
8782 #include <sys/select.h>
8783 #endif
8784 main()
8785 {
8786         struct tm foo;
8787 #ifdef S_TIMEVAL
8788         struct timeval bar;
8789 #endif
8790 #ifdef S_TIMEZONE
8791         struct timezone tzp;
8792 #endif
8793         if (foo.tm_sec == foo.tm_sec)
8794                 exit(0);
8795 #ifdef S_TIMEVAL
8796         if (bar.tv_sec == bar.tv_sec)
8797                 exit(0);
8798 #endif
8799         exit(1);
8800 }
8801 EOCP
8802 flags=''
8803 for s_timezone in '-DS_TIMEZONE' ''; do
8804 sysselect=''
8805 for s_timeval in '-DS_TIMEVAL' ''; do
8806 for i_systimek in '' '-DSYSTIMEKERNEL'; do
8807 for i_time in '' '-DI_TIME'; do
8808 for i_systime in '-DI_SYSTIME' ''; do
8809         case "$flags" in
8810         '') $echo $n ".$c"
8811                 if $cc $ccflags \
8812                 $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
8813                 try.c -o try >/dev/null 2>&1 ; then
8814                         set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8815                         shift
8816                         flags="$*"
8817                         echo " "
8818                         $echo $n "Succeeded with $flags$c"
8819                 fi
8820                 ;;
8821         esac
8822 done
8823 done
8824 done
8825 done
8826 done
8827 timeincl=''
8828 echo " "
8829 case "$flags" in
8830 *SYSTIMEKERNEL*) i_systimek="$define"
8831         timeincl=`./findhdr sys/time.h`
8832         echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8833 *) i_systimek="$undef";;
8834 esac
8835 case "$flags" in
8836 *I_TIME*) i_time="$define"
8837         timeincl=`./findhdr time.h`" $timeincl"
8838         echo "We'll include <time.h>." >&4;;
8839 *) i_time="$undef";;
8840 esac
8841 case "$flags" in
8842 *I_SYSTIME*) i_systime="$define"
8843         timeincl=`./findhdr sys/time.h`" $timeincl"
8844         echo "We'll include <sys/time.h>." >&4;;
8845 *) i_systime="$undef";;
8846 esac
8847 $rm -f try.c try
8848
8849 : check for fd_set items
8850 $cat <<EOM
8851
8852 Checking to see how well your C compiler handles fd_set and friends ...
8853 EOM
8854 $cat >fd_set.c <<EOCP
8855 #$i_systime I_SYS_TIME
8856 #$i_sysselct I_SYS_SELECT
8857 #$d_socket HAS_SOCKET
8858 #include <sys/types.h>
8859 #ifdef HAS_SOCKET
8860 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8861 #endif
8862 #ifdef I_SYS_TIME
8863 #include <sys/time.h>
8864 #endif
8865 #ifdef I_SYS_SELECT
8866 #include <sys/select.h>
8867 #endif
8868 main() {
8869         fd_set fds;
8870
8871 #ifdef TRYBITS
8872         if(fds.fds_bits);
8873 #endif
8874
8875 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8876         exit(0);
8877 #else
8878         exit(1);
8879 #endif
8880 }
8881 EOCP
8882 if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8883         d_fds_bits="$define"
8884         d_fd_set="$define"
8885         echo "Well, your system knows about the normal fd_set typedef..." >&4
8886         if ./fd_set; then
8887                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8888                 d_fd_macros="$define"
8889         else
8890                 $cat >&4 <<'EOM'
8891 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8892 EOM
8893                 d_fd_macros="$undef"
8894         fi
8895 else
8896         $cat <<'EOM'
8897 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8898 EOM
8899         if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8900                 d_fds_bits="$undef"
8901                 d_fd_set="$define"
8902                 echo "Well, your system has some sort of fd_set available..." >&4
8903                 if ./fd_set; then
8904                         echo "and you have the normal fd_set macros." >&4
8905                         d_fd_macros="$define"
8906                 else
8907                         $cat <<'EOM'
8908 but not the normal fd_set macros!  Gross!  More work for me...
8909 EOM
8910                         d_fd_macros="$undef"
8911                 fi
8912         else
8913         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8914                 d_fd_set="$undef"
8915                 d_fds_bits="$undef"
8916                 d_fd_macros="$undef"
8917         fi
8918 fi
8919 $rm -f fd_set*
8920
8921
8922 : check for type of arguments to select.  This will only really
8923 : work if the system supports prototypes and provides one for
8924 : select.
8925 case "$d_select" in
8926 $define)
8927         : Make initial guess
8928         case "$selecttype" in
8929         ''|' ')
8930                 case "$d_fd_set" in
8931                 $define) xxx='fd_set *' ;;
8932                 *) xxx='int *' ;;
8933                 esac
8934                 ;;
8935         *)      xxx="$selecttype" 
8936                 ;;
8937         esac
8938         : backup guess
8939         case "$xxx" in
8940         'fd_set *') yyy='int *' ;;
8941         'int *') yyy='fd_set *' ;;
8942         esac
8943
8944         $cat <<EOM
8945
8946 Checking to see what type of arguments are expected by select().
8947 EOM
8948         $cat >try.c <<EOCP
8949 #$i_systime I_SYS_TIME
8950 #$i_sysselct I_SYS_SELECT
8951 #$d_socket HAS_SOCKET
8952 #include <sys/types.h>
8953 #ifdef HAS_SOCKET
8954 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8955 #endif
8956 #ifdef I_SYS_TIME
8957 #include <sys/time.h>
8958 #endif
8959 #ifdef I_SYS_SELECT
8960 #include <sys/select.h>
8961 #endif
8962 main()
8963 {
8964         int width;
8965         Select_fd_set_t readfds;
8966         Select_fd_set_t writefds;
8967         Select_fd_set_t exceptfds;
8968         struct timeval timeout;
8969         select(width, readfds, writefds, exceptfds, &timeout);
8970         exit(0);
8971 }
8972 EOCP
8973         if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
8974                 selecttype="$xxx"
8975                 echo "Your system uses $xxx for the arguments to select." >&4
8976         elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
8977                 selecttype="$yyy"
8978                 echo "Your system uses $yyy for the arguments to select." >&4
8979         else
8980                 rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
8981                 dflt="$xxx"
8982                 . ./myread
8983                 selecttype="$ans"
8984         fi
8985         $rm -f try.[co]
8986         ;;
8987 *)      selecttype='int *'
8988         ;;
8989 esac
8990
8991 : Trace out the files included by signal.h, then look for SIGxxx names.
8992 : Remove SIGARRAYSIZE used by HPUX.
8993 : Remove SIGTYP void lines used by OS2.
8994 xxx=`echo '#include <signal.h>' |
8995         $cppstdin $cppminus $cppflags 2>/dev/null |
8996         $grep '^[       ]*#.*include' | 
8997         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
8998 : Check this list of files to be sure we have parsed the cpp output ok.
8999 : This will also avoid potentially non-existent files, such 
9000 : as ../foo/bar.h
9001 xxxfiles=''
9002 for xx in $xxx /dev/null ; do
9003         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
9004 done
9005 : If we have found no files, at least try signal.h
9006 case "$xxxfiles" in
9007 '')     xxxfiles=`./findhdr signal.h` ;;
9008 esac
9009 xxx=`awk '
9010 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
9011         print substr($2, 4, 20)
9012 }
9013 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
9014         print substr($3, 4, 20)
9015 }' $xxxfiles`
9016 : Append some common names just in case the awk scan failed.
9017 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
9018 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
9019 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
9020 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
9021 : generate a few handy files for later
9022 $cat > signal.c <<'EOP'
9023 #include <sys/types.h>
9024 #include <signal.h>
9025 int main() {
9026
9027 /* Strange style to avoid deeply-nested #if/#else/#endif */
9028 #ifndef NSIG
9029 #  ifdef _NSIG
9030 #    define NSIG (_NSIG)
9031 #  endif
9032 #endif
9033
9034 #ifndef NSIG
9035 #  ifdef SIGMAX
9036 #    define NSIG (SIGMAX+1)
9037 #  endif
9038 #endif
9039
9040 #ifndef NSIG
9041 #  ifdef SIG_MAX
9042 #    define NSIG (SIG_MAX+1)
9043 #  endif
9044 #endif
9045
9046 #ifndef NSIG
9047 #  ifdef MAXSIG
9048 #    define NSIG (MAXSIG+1)
9049 #  endif
9050 #endif
9051
9052 #ifndef NSIG
9053 #  ifdef MAX_SIG
9054 #    define NSIG (MAX_SIG+1)
9055 #  endif
9056 #endif
9057
9058 #ifndef NSIG
9059 #  ifdef SIGARRAYSIZE
9060 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
9061 #  endif
9062 #endif
9063
9064 #ifndef NSIG
9065 #  ifdef _sys_nsig
9066 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
9067 #  endif
9068 #endif
9069
9070 /* Default to some arbitrary number that's big enough to get most
9071    of the common signals.
9072 */
9073 #ifndef NSIG
9074 #    define NSIG 50
9075 #endif
9076
9077 printf("NSIG %d\n", NSIG);
9078
9079 EOP
9080 echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
9081 {
9082         printf "#ifdef SIG"; printf $1; printf "\n"
9083         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
9084         printf $1; printf ");\n"
9085         printf "#endif\n"
9086 }
9087 END {
9088         printf "}\n";
9089 }
9090 ' >>signal.c
9091 $cat >signal.awk <<'EOP'
9092 BEGIN { ndups = 0 }
9093 $1 ~ /^NSIG$/ { nsig = $2 }
9094 ($1 !~ /^NSIG$/) && (NF == 2) {
9095     if ($2 > maxsig) { maxsig = $2 }
9096     if (sig_name[$2]) {
9097         dup_name[ndups] = $1
9098         dup_num[ndups] = $2
9099         ndups++ 
9100     }
9101     else {
9102         sig_name[$2] = $1
9103         sig_num[$2] = $2
9104     }
9105
9106 }
9107 END { 
9108     if (nsig == 0) { nsig = maxsig + 1 }
9109         for (n = 1; n < nsig; n++) {
9110                 if (sig_name[n]) {
9111                         printf("%s %d\n", sig_name[n], sig_num[n])
9112                 }
9113                 else {
9114                         printf("NUM%d %d\n", n, n) 
9115                 }
9116         }
9117     for (n = 0; n < ndups; n++) {
9118                 printf("%s %d\n", dup_name[n], dup_num[n])
9119     }
9120 }
9121 EOP
9122 $cat >signal_cmd <<EOS
9123 $startsh
9124 $test -s signal.lst && exit 0
9125 if $cc $ccflags $ldflags signal.c -o signal >/dev/null 2>&1; then
9126         ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
9127 else
9128         echo "(I can't seem be able to compile the test program -- Guessing)"
9129         echo 'kill -l' >signal
9130         set X \`csh -f <signal\`
9131         $rm -f signal
9132         shift
9133         case \$# in
9134         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
9135         esac
9136         echo \$@ | $tr ' ' '\012' | \
9137                 $awk '{ printf \$1; printf " %d\n", ++s; }' >signal.lst
9138 fi
9139 $rm -f signal.c signal signal.o
9140 EOS
9141 chmod a+x signal_cmd
9142 $eunicefix signal_cmd
9143
9144 : generate list of signal names
9145 echo " "
9146 case "$sig_name" in
9147 '')     sig_num='' ;;
9148 esac
9149 case "$sig_num" in
9150 '')     sig_name='' ;;
9151 esac
9152 case "$sig_name" in
9153 '')
9154         echo "Generating a list of signal names and numbers..." >&4
9155         ./signal_cmd
9156         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
9157         sig_name="ZERO $sig_name"
9158         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
9159         sig_num="0 $sig_num"
9160         ;;
9161 esac
9162 echo "The following signals are available:"
9163 echo " "
9164 echo $sig_name | $awk \
9165 'BEGIN { linelen = 0 }
9166 {
9167         for (i = 1; i <= NF; i++) {
9168                 name = "SIG" $i " "
9169                 linelen = linelen + length(name)
9170                 if (linelen > 70) {
9171                         printf "\n"
9172                         linelen = length(name)
9173                 }
9174                 printf "%s", name
9175         }
9176         printf "\n"
9177 }'
9178 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
9179
9180 : see what type is used for size_t
9181 set size_t sizetype 'unsigned int' stdio.h sys/types.h
9182 eval $typedef
9183 dflt="$sizetype"
9184 echo " "
9185 rp="What type is used for the length parameter for string functions?"
9186 . ./myread
9187 sizetype="$ans"
9188
9189 : see what type is used for signed size_t
9190 set ssize_t ssizetype int stdio.h sys/types.h
9191 eval $typedef
9192 dflt="$ssizetype"
9193 $cat > ssize.c <<EOM
9194 #include <stdio.h>
9195 #include <sys/types.h>
9196 #define Size_t $sizetype
9197 #define SSize_t $dflt
9198 main()
9199 {
9200         if (sizeof(Size_t) == sizeof(SSize_t))
9201                 printf("$dflt\n");
9202         else if (sizeof(Size_t) == sizeof(int))
9203                 printf("int\n");
9204         else 
9205                 printf("long\n");
9206         fflush(stdout);
9207         exit(0);
9208 }
9209 EOM
9210 echo " "
9211 #       If $libs contains -lsfio, and sfio is mis-configured, then it
9212 #       sometimes (apparently) runs and exits with a 0 status, but with no
9213 #       output!.  Thus we check with test -s whether we actually got any 
9214 #       output.  I think it has to do with sfio's use of _exit vs. exit,
9215 #       but I don't know for sure.  --Andy Dougherty  1/27/97.
9216 if $cc $optimize $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1  &&
9217                 ./ssize > ssize.out 2>/dev/null && test -s ssize.out ; then
9218         ssizetype=`$cat ssize.out`
9219         echo "I'll be using $ssizetype for functions returning a byte count." >&4
9220 else
9221         $cat >&4 <<EOM
9222
9223 Help! I can't compile and run the ssize_t test program: please enlighten me!
9224 (This is probably a misconfiguration in your system or libraries, and
9225 you really ought to fix it.  Still, I'll try anyway.)
9226
9227 I need a type that is the same size as $sizetype, but is guaranteed to
9228 be signed.  Common values are ssize_t, int and long.
9229
9230 EOM
9231         rp="What signed type is the same size as $sizetype?"
9232         . ./myread
9233         ssizetype="$ans"
9234 fi
9235 $rm -f ssize ssize.[co] ssize.out
9236
9237 : see if this is a netdb.h system
9238 set netdb.h i_netdb
9239 eval $inhdr
9240
9241 : check for type of arguments to gethostbyaddr.  This will only really
9242 : work if the system supports prototypes and provides one for
9243 : gethostbyaddr.
9244 case "$d_gethbadd" in
9245 $define)
9246         if test "X$gethbadd_addr_type" = X -o "X$gethbadd_alen_type" = X; then
9247             $cat <<EOM
9248
9249 Checking to see what type of arguments are expected by gethostbyaddr().
9250 EOM
9251         $cat >try.c <<EOCP
9252 #include <sys/types.h>
9253 #$i_niin I_NIIN
9254 #$i_netdb I_NETDB
9255 #$i_unistd I_UNISTD
9256 #$d_socket HAS_SOCKET
9257 #$d_socket HAS_SOCKET
9258 #ifdef HAS_SOCKET
9259 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9260 #endif
9261 #ifdef I_NIIN
9262 #include <netinet/in.h>
9263 #endif
9264 #ifdef I_NETDB
9265 #include <netdb.h>
9266 #endif
9267 #ifdef I_UNISTD
9268 #include <unistd.h>
9269 #endif
9270 #define Size_t $sizetype
9271 main()
9272 {
9273         Gethbadd_addr_t addr;
9274         Gethbadd_alen_t alen;
9275         struct hostent* hent;
9276
9277         extern struct hostent *gethostbyaddr(const Gethbadd_addr_t, Gethbadd_alen_t, int);
9278
9279         alen = sizeof(struct in_addr);
9280         addr = (Gethbadd_addr_t)malloc(alen);
9281         /* We do not execute this so the contents of the addr matter not. */
9282         hent = gethostbyaddr(addr, alen, AF_INET);
9283
9284         exit(0);
9285 }
9286 EOCP
9287             for xxx in "void *" "char *"; do
9288                     for yyy in Size_t int; do
9289                             if $cc $ccflags -c -DGethbadd_addr_t="$xxx" -DGethbadd_alen_t="$yyy" try.c >/dev/null 2>&1 ; then
9290                                 gethbadd_addr_type="$xxx"
9291                                 gethbadd_alen_type="$yyy"
9292                                 echo "Your system uses $xxx for the 1st argument to gethostbyaddr." >&4
9293                                 echo "and the the 2nd argument to gethostbyaddr is $yyy." >&4
9294                                 break
9295                             fi
9296                     done
9297                     test "X$gethbadd_addr_type" != X && break
9298             done
9299             if test "X$gethbadd_addr_type" = X; then
9300                     rp='What is the type for the 1st argument to gethostbyaddr?'
9301                     dflt="void *"
9302                     . ./myread
9303                     gethbadd_addr_type="$ans"
9304
9305                     # Remove the "const" if needed.
9306                     gethbadd_addr_type=`echo $gethbadd_addr_type | sed 's/^const //'`
9307
9308                     rp='What is the type for the 2nd argument to gethostbyaddr ?'
9309                     dflt="Size_t"
9310                     . ./myread
9311                     gethbadd_alen_type="$ans"
9312             fi
9313             $rm -f try.[co]
9314         fi
9315         ;;
9316 *)      gethbadd_addr_type='void *'
9317         gethbadd_alen_type='Size_t'
9318         ;;
9319 esac
9320
9321 : check for type of arguments to getnetbyaddr.  This will only really
9322 : work if the system supports prototypes and provides one for
9323 : getnetbyaddr.
9324 case "$d_getnbadd" in
9325 $define)
9326         if test "X$getnbadd_addr_type" = X -o "X$getnbadd_alen_type" = X; then
9327             $cat <<EOM
9328
9329 Checking to see what type of arguments are expected by getnetbyaddr().
9330 EOM
9331         $cat >try.c <<EOCP
9332 #$i_niin I_NIIN
9333 #$i_netdb I_NETDB
9334 #$d_socket HAS_SOCKET
9335 #$d_socket HAS_SOCKET
9336 #include <sys/types.h>
9337 #ifdef HAS_SOCKET
9338 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9339 #endif
9340 #ifdef I_NIIN
9341 #include <netinet/in.h>
9342 #endif
9343 #ifdef I_NETDB
9344 #include <netdb.h>
9345 #endif
9346 main()
9347 {
9348         Getnbadd_net_t  net;
9349         struct netent*  nent;
9350
9351         extern struct netent *getnetbyaddr(Getnbadd_net_t, int);
9352
9353         /* We do not execute this so the contents of the net matter not. */
9354         nent = getnetbyaddr(net, AF_INET);
9355
9356         exit(0);
9357 }
9358 EOCP
9359             for xxx in in_addr_t long int; do
9360                     if $cc $ccflags -c -DGetnbadd_net_t="$xxx" try.c >/dev/null 2>&1 ; then
9361                         getnbadd_net_type="$xxx"
9362                         echo "Your system uses $xxx for the 1st argument to getnetbyaddr." >&4
9363                         break
9364                     fi
9365             done
9366             if test "X$getnbadd_net_type" = X; then
9367                     rp='What is the type for the 1st argument to getnetbyaddr?'
9368                     dflt="long"
9369                     . ./myread
9370                     getnbadd_net_type="$ans"
9371             fi
9372             $rm -f try.[co]
9373         fi
9374         ;;
9375 *)      getnbadd_net_type='long'
9376         ;;
9377 esac
9378
9379 : see what type of char stdio uses.
9380 echo " "
9381 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9382         echo "Your stdio uses unsigned chars." >&4
9383         stdchar="unsigned char"
9384 else
9385         echo "Your stdio uses signed chars." >&4
9386         stdchar="char"
9387 fi
9388
9389 : see if time exists
9390 echo " "
9391 if set time val -f d_time; eval $csym; $val; then
9392         echo 'time() found.' >&4
9393         val="$define"
9394         set time_t timetype long stdio.h sys/types.h
9395         eval $typedef
9396         dflt="$timetype"
9397         echo " "
9398         rp="What type is returned by time() on this system?"
9399         . ./myread
9400         timetype="$ans"
9401 else
9402         echo 'time() not found, hope that will do.' >&4
9403         val="$undef"
9404         timetype='int';
9405 fi
9406 set d_time
9407 eval $setvar
9408
9409 : see what type uids are declared as in the kernel
9410 set uid_t uidtype xxx stdio.h sys/types.h
9411 eval $typedef
9412 case "$uidtype" in
9413 xxx)
9414         xxx=`./findhdr sys/user.h`
9415         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
9416         case $1 in
9417         unsigned) dflt="$1 $2" ;;
9418         *) dflt="$1" ;;
9419         esac
9420         ;;
9421 *) dflt="$uidtype";;
9422 esac
9423 echo " "
9424 rp="What is the type for user ids returned by getuid()?"
9425 . ./myread
9426 uidtype="$ans"
9427
9428 : see if dbm.h is available
9429 : see if dbmclose exists
9430 set dbmclose d_dbmclose
9431 eval $inlibc
9432
9433 case "$d_dbmclose" in
9434 $define)
9435         set dbm.h i_dbm
9436         eval $inhdr
9437         case "$i_dbm" in
9438         $define)
9439                 val="$undef"
9440                 set i_rpcsvcdbm
9441                 eval $setvar
9442                 ;;
9443         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9444                 eval $inhdr
9445                 ;;
9446         esac
9447         ;;
9448 *)      echo "We won't be including <dbm.h>"
9449         val="$undef"
9450         set i_dbm
9451         eval $setvar
9452         val="$undef"
9453         set i_rpcsvcdbm
9454         eval $setvar
9455         ;;
9456 esac
9457
9458 : see if this is a sys/file.h system
9459 val=''
9460 set sys/file.h val
9461 eval $inhdr
9462
9463 : do we need to include sys/file.h ?
9464 case "$val" in
9465 "$define")
9466         echo " "
9467         if $h_sysfile; then
9468                 val="$define"
9469                 echo "We'll be including <sys/file.h>." >&4
9470         else
9471                 val="$undef"
9472                 echo "We won't be including <sys/file.h>." >&4
9473         fi
9474         ;;
9475 *)
9476         h_sysfile=false
9477         ;;
9478 esac
9479 set i_sysfile
9480 eval $setvar
9481
9482 : see if fcntl.h is there
9483 val=''
9484 set fcntl.h val
9485 eval $inhdr
9486
9487 : see if we can include fcntl.h
9488 case "$val" in
9489 "$define")
9490         echo " "
9491         if $h_fcntl; then
9492                 val="$define"
9493                 echo "We'll be including <fcntl.h>." >&4
9494         else
9495                 val="$undef"
9496                 if $h_sysfile; then
9497         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9498                 else
9499                         echo "We won't be including <fcntl.h>." >&4
9500                 fi
9501         fi
9502         ;;
9503 *)
9504         h_fcntl=false
9505         val="$undef"
9506         ;;
9507 esac
9508 set i_fcntl
9509 eval $setvar
9510
9511 : see if this is an grp system
9512 set grp.h i_grp
9513 eval $inhdr
9514
9515 : see if locale.h is available
9516 set locale.h i_locale
9517 eval $inhdr
9518
9519 : see if this is a math.h system
9520 set math.h i_math
9521 eval $inhdr
9522
9523 : see if ndbm.h is available
9524 set ndbm.h t_ndbm
9525 eval $inhdr
9526 case "$t_ndbm" in
9527 $define)
9528         : see if dbm_open exists
9529         set dbm_open d_dbm_open
9530         eval $inlibc
9531         case "$d_dbm_open" in
9532         $undef)
9533                 t_ndbm="$undef"
9534                 echo "We won't be including <ndbm.h>"
9535                 ;;
9536         esac
9537         ;;
9538 esac
9539 val="$t_ndbm"
9540 set i_ndbm
9541 eval $setvar
9542
9543 : see if net/errno.h is available
9544 val=''
9545 set net/errno.h val
9546 eval $inhdr
9547
9548 : Unfortunately, it causes problems on some systems.  Arrgh.
9549 case "$val" in
9550 $define)
9551         cat > try.c <<'EOM'
9552 #include <stdio.h>
9553 #include <errno.h>
9554 #include <net/errno.h>
9555 int func()
9556 {
9557         return ENOTSOCK;
9558 }
9559 EOM
9560         if $cc $ccflags -c try.c >/dev/null 2>&1; then
9561                 echo "We'll be including <net/errno.h>." >&4
9562         else
9563                 echo "We won't be including <net/errno.h>." >&4
9564                 val="$undef"
9565         fi
9566         $rm -f try.* try
9567         ;;
9568 esac
9569 set i_neterrno
9570 eval $setvar
9571
9572 : get C preprocessor symbols handy
9573 echo " "
9574 $echo $n "Hmm... $c"
9575 echo $al | $tr ' ' '\012' >Cppsym.know
9576 $cat <<EOSS >Cppsym
9577 $startsh
9578 case "\$1" in
9579 -l) list=true
9580         shift
9581         ;;
9582 esac
9583 unknown=''
9584 case "\$list\$#" in
9585 1|2)
9586         for sym do
9587                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
9588                         exit 0
9589                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
9590                         :
9591                 else
9592                         unknown="\$unknown \$sym"
9593                 fi
9594         done
9595         set X \$unknown
9596         shift
9597         ;;
9598 esac
9599 case \$# in
9600 0) exit 1;;
9601 esac
9602 echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
9603 #ifdef \1\\
9604 exit 0; _ _ _ _\1\\      \1\\
9605 #endif\\
9606 /' >Cppsym\$\$
9607 echo "exit 1; _ _ _" >>Cppsym\$\$
9608 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
9609 case "\$list" in
9610 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
9611 *)
9612         sh Cppsym2\$\$
9613         status=\$?
9614         ;;
9615 esac
9616 $rm -f Cppsym\$\$ Cppsym2\$\$
9617 exit \$status
9618 EOSS
9619 chmod +x Cppsym
9620 $eunicefix Cppsym
9621 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
9622
9623 : now check the C compiler for additional symbols
9624 $cat >ccsym <<EOS
9625 $startsh
9626 $cat >tmp.c <<EOF
9627 extern int foo;
9628 EOF
9629 for i in \`$cc -v -c tmp.c 2>&1\`
9630 do
9631         case "\$i" in
9632         -D*) echo "\$i" | $sed 's/^-D//';;
9633         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
9634         esac
9635 done
9636 $rm -f try.c
9637 EOS
9638 chmod +x ccsym
9639 $eunicefix ccsym
9640 ./ccsym | $sort | $uniq >ccsym.raw
9641 $awk '/\=/ { print $0; next }
9642         { print $0"=1" }' ccsym.raw >ccsym.list
9643 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
9644 $comm -13 ccsym.true ccsym.list >ccsym.own
9645 $comm -12 ccsym.true ccsym.list >ccsym.com
9646 $comm -23 ccsym.true ccsym.list >ccsym.cpp
9647 also=''
9648 symbols='symbols'
9649 if $test -z ccsym.raw; then
9650         echo "Your C compiler doesn't seem to define any symbol!" >&4
9651         echo " "
9652         echo "However, your C preprocessor defines the following ones:"
9653         $cat Cppsym.true
9654 else
9655         if $test -s ccsym.com; then
9656                 echo "Your C compiler and pre-processor define these symbols:"
9657                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
9658                 also='also '
9659                 symbols='ones'
9660                 $test "$silent" || sleep 1
9661         fi
9662         if $test -s ccsym.cpp; then
9663                 $test "$also" && echo " "
9664                 echo "Your C pre-processor ${also}defines the following $symbols:"
9665                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
9666                 also='further '
9667                 $test "$silent" || sleep 1
9668         fi
9669         if $test -s ccsym.own; then
9670                 $test "$also" && echo " "
9671                 echo "Your C compiler ${also}defines the following cpp variables:"
9672                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
9673                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
9674                 $test "$silent" || sleep 1
9675         fi
9676 fi
9677 $rm -f ccsym*
9678
9679 : see if this is a termio system
9680 val="$undef"
9681 val2="$undef"
9682 val3="$undef"
9683 if $test `./findhdr termios.h`; then
9684         set tcsetattr i_termios
9685         eval $inlibc
9686         val3="$i_termios"
9687 fi
9688 echo " "
9689 case "$val3" in
9690 "$define") echo "You have POSIX termios.h... good!" >&4;;
9691 *) if ./Cppsym pyr; then
9692                 case "`/bin/universe`" in
9693                 ucb) if $test `./findhdr sgtty.h`; then
9694                                 val2="$define"
9695                                 echo "<sgtty.h> found." >&4
9696                         else
9697                                 echo "System is pyramid with BSD universe."
9698                                 echo "<sgtty.h> not found--you could have problems." >&4
9699                         fi;;
9700                 *) if $test `./findhdr termio.h`; then
9701                                 val="$define"
9702                                 echo "<termio.h> found." >&4
9703                         else
9704                                 echo "System is pyramid with USG universe."
9705                                 echo "<termio.h> not found--you could have problems." >&4
9706                         fi;;
9707                 esac
9708         elif ./usg; then
9709                 if $test `./findhdr termio.h`; then
9710                         echo "<termio.h> found." >&4
9711                         val="$define"
9712                 elif $test `./findhdr sgtty.h`; then
9713                         echo "<sgtty.h> found." >&4
9714                         val2="$define"
9715                 else
9716 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
9717                 fi
9718         else
9719                 if $test `./findhdr sgtty.h`; then
9720                         echo "<sgtty.h> found." >&4
9721                         val2="$define"
9722                 elif $test `./findhdr termio.h`; then
9723                         echo "<termio.h> found." >&4
9724                         val="$define"
9725                 else
9726 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
9727                 fi
9728         fi;;
9729 esac
9730 set i_termio; eval $setvar
9731 val=$val2; set i_sgtty; eval $setvar
9732 val=$val3; set i_termios; eval $setvar
9733
9734 : see if stdarg is available
9735 echo " "
9736 if $test `./findhdr stdarg.h`; then
9737         echo "<stdarg.h> found." >&4
9738         valstd="$define"
9739 else
9740         echo "<stdarg.h> NOT found." >&4
9741         valstd="$undef"
9742 fi
9743
9744 : see if varags is available
9745 echo " "
9746 if $test `./findhdr varargs.h`; then
9747         echo "<varargs.h> found." >&4
9748 else
9749         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
9750 fi
9751
9752 : set up the varargs testing programs
9753 $cat > varargs.c <<EOP
9754 #ifdef I_STDARG
9755 #include <stdarg.h>
9756 #endif
9757 #ifdef I_VARARGS
9758 #include <varargs.h>
9759 #endif
9760
9761 #ifdef I_STDARG
9762 int f(char *p, ...)
9763 #else
9764 int f(va_alist)
9765 va_dcl
9766 #endif
9767 {
9768         va_list ap;
9769 #ifndef I_STDARG
9770         char *p;
9771 #endif
9772 #ifdef I_STDARG
9773         va_start(ap,p);
9774 #else
9775         va_start(ap);
9776         p = va_arg(ap, char *);
9777 #endif
9778         va_end(ap);
9779 }
9780 EOP
9781 $cat > varargs <<EOP
9782 $startsh
9783 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
9784         echo "true"
9785 else
9786         echo "false"
9787 fi
9788 $rm -f varargs.o
9789 EOP
9790 chmod +x varargs
9791
9792 : now check which varargs header should be included
9793 echo " "
9794 i_varhdr=''
9795 case "$valstd" in
9796 "$define")
9797         if `./varargs I_STDARG`; then
9798                 val='stdarg.h'
9799         elif `./varargs I_VARARGS`; then
9800                 val='varargs.h'
9801         fi
9802         ;;
9803 *)
9804         if `./varargs I_VARARGS`; then
9805                 val='varargs.h'
9806         fi
9807         ;;
9808 esac
9809 case "$val" in
9810 '')
9811 echo "I could not find the definition for va_dcl... You have problems..." >&4
9812         val="$undef"; set i_stdarg; eval $setvar
9813         val="$undef"; set i_varargs; eval $setvar
9814         ;;
9815 *) 
9816         set i_varhdr
9817         eval $setvar
9818         case "$i_varhdr" in
9819         stdarg.h)
9820                 val="$define"; set i_stdarg; eval $setvar
9821                 val="$undef"; set i_varargs; eval $setvar
9822                 ;;
9823         varargs.h)
9824                 val="$undef"; set i_stdarg; eval $setvar
9825                 val="$define"; set i_varargs; eval $setvar
9826                 ;;
9827         esac
9828         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
9829 esac
9830 $rm -f varargs*
9831
9832 : see if stddef is available
9833 set stddef.h i_stddef
9834 eval $inhdr
9835
9836 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
9837 set sys/filio.h i_sysfilio
9838 eval $inhdr
9839 echo " "
9840 if $test `./findhdr sys/ioctl.h`; then
9841         val="$define"
9842         echo '<sys/ioctl.h> found.' >&4
9843 else
9844         val="$undef"
9845         if $test $i_sysfilio = "$define"; then
9846             echo '<sys/ioctl.h> NOT found.' >&4
9847         else
9848                 $test $i_sgtty = "$define" && xxx="sgtty.h"
9849                 $test $i_termio = "$define" && xxx="termio.h"
9850                 $test $i_termios = "$define" && xxx="termios.h"
9851 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
9852         fi
9853 fi
9854 set i_sysioctl
9855 eval $setvar
9856
9857 : see if this is a sys/param system
9858 set sys/param.h i_sysparam
9859 eval $inhdr
9860
9861 : see if sys/resource.h has to be included
9862 set sys/resource.h i_sysresrc
9863 eval $inhdr
9864
9865 : see if sys/stat.h is available
9866 set sys/stat.h i_sysstat
9867 eval $inhdr
9868
9869 : see if sys/types.h has to be included
9870 set sys/types.h i_systypes
9871 eval $inhdr
9872
9873 : see if this is a sys/un.h system
9874 set sys/un.h i_sysun
9875 eval $inhdr
9876
9877 : see if this is a syswait system
9878 set sys/wait.h i_syswait
9879 eval $inhdr
9880
9881 : see if this is an utime system
9882 set utime.h i_utime
9883 eval $inhdr
9884
9885 : see if this is a values.h system
9886 set values.h i_values
9887 eval $inhdr
9888
9889 : see if this is a vfork system
9890 case "$d_vfork" in
9891 "$define")
9892         set vfork.h i_vfork
9893         eval $inhdr
9894         ;;
9895 *)
9896         i_vfork="$undef"
9897         ;;
9898 esac
9899
9900 : see if gdbm.h is available
9901 set gdbm.h t_gdbm
9902 eval $inhdr
9903 case "$t_gdbm" in
9904 $define)
9905         : see if gdbm_open exists
9906         set gdbm_open d_gdbm_open
9907         eval $inlibc
9908         case "$d_gdbm_open" in
9909         $undef)
9910                 t_gdbm="$undef"
9911                 echo "We won't be including <gdbm.h>"
9912                 ;;
9913         esac
9914         ;;
9915 esac
9916 val="$t_gdbm"
9917 set i_gdbm
9918 eval $setvar
9919
9920 : test whether pthreads are created in joinable -- aka undetached -- state
9921 if test "X$usethreads" != X; then
9922 echo " "
9923 echo 'Checking whether pthreads are created joinable.' >&4
9924         $cat >try.c <<EOCP
9925 /* Note: this program returns 1 if detached, 0 if not.
9926  * Easier this way because the PTHREAD_CREATE_DETACHED is more
9927  * portable than the obsolete PTHREAD_CREATE_UNDETACHED.
9928  * Testing for joinable (aka undetached) as opposed to detached
9929  * is then again logically more sensible because that's
9930  * the more modern default state in the pthreads implementations. */
9931 #include <pthread.h>
9932 #include <stdio.h>
9933 int main() {
9934     pthread_attr_t attr;
9935     int detachstate;
9936     pthread_attr_init(&attr);
9937     pthread_attr_getdetachstate(&attr, &detachstate);
9938     printf("%s\n",
9939            detachstate == PTHREAD_CREATE_DETACHED ?
9940            "detached" : "joinable");
9941     exit(0);
9942 }
9943 EOCP
9944     if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
9945         yyy=`./try`
9946     else
9947         echo "(I can't seem to compile the test program--assuming they are.)"
9948         yyy=joinable
9949     fi
9950     case "$yyy" in
9951     joinable)
9952       val="$define"
9953       echo "Yup, they are."
9954       ;;
9955     *)
9956       val="$undef"
9957       echo "Nope, they aren't."
9958       ;;
9959     esac
9960     set d_pthreads_created_joinable
9961     eval $setvar
9962     $rm -f try try.*
9963 else
9964     d_pthreads_created_joinable=$undef
9965 fi
9966
9967 echo " "
9968 echo "Looking for extensions..." >&4
9969 cd ../ext
9970 : If we are using the old config.sh, known_extensions may contain
9971 : old or inaccurate or duplicate values.
9972 known_extensions=''
9973 : We do not use find because it might not be available.
9974 : We do not just use MANIFEST because the user may have dropped
9975 : some additional extensions into the source tree and expect them
9976 : to be built.
9977 for xxx in * ; do
9978     case "$xxx" in
9979     DynaLoader) ;;
9980     *)  if $test -f $xxx/$xxx.xs; then
9981             known_extensions="$known_extensions $xxx"
9982         else
9983             if $test -d $xxx; then
9984                 cd $xxx
9985                 for yyy in * ; do
9986                     if $test -f $yyy/$yyy.xs; then
9987                         known_extensions="$known_extensions $xxx/$yyy"
9988                     fi
9989                 done
9990                 cd ..
9991             fi
9992         fi ;;
9993     esac
9994 done
9995 set X $known_extensions
9996 shift
9997 known_extensions="$*"
9998 cd ../UU
9999
10000 : Now see which are supported on this system.
10001 avail_ext=''
10002 for xxx in $known_extensions ; do
10003     case "$xxx" in
10004     DB_File) case "$i_db" in 
10005             $define) avail_ext="$avail_ext $xxx" ;;
10006             esac
10007             ;;
10008     GDBM_File) case "$i_gdbm" in 
10009             $define) avail_ext="$avail_ext $xxx" ;;
10010             esac
10011             ;;
10012     NDBM_File) case "$i_ndbm" in 
10013             $define) avail_ext="$avail_ext $xxx" ;;
10014             esac
10015             ;;
10016     ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
10017             *"${define}"*) avail_ext="$avail_ext $xxx" ;;
10018             esac
10019             ;;
10020     POSIX) case "$useposix" in 
10021             true|define|y) avail_ext="$avail_ext $xxx" ;;
10022             esac
10023             ;;
10024     Opcode) case "$useopcode" in 
10025             true|define|y) avail_ext="$avail_ext $xxx" ;;
10026             esac
10027             ;;
10028     Socket) case "$d_socket" in 
10029             $define) avail_ext="$avail_ext $xxx" ;;
10030             esac
10031             ;;
10032     Thread) case "$usethreads" in 
10033             $define) avail_ext="$avail_ext $xxx" ;;
10034             esac
10035             ;;
10036     *)      avail_ext="$avail_ext $xxx"
10037             ;;
10038     esac
10039 done
10040
10041 set X $avail_ext
10042 shift
10043 avail_ext="$*"
10044
10045 case $usedl in
10046 $define)
10047         $cat <<EOM
10048 A number of extensions are supplied with $package.  You may choose to
10049 compile these extensions for dynamic loading (the default), compile
10050 them into the $package executable (static loading), or not include
10051 them at all.  Answer "none" to include no extensions.
10052
10053 EOM
10054         case "$dynamic_ext" in
10055         '') dflt="$avail_ext" ;;
10056         *)      dflt="$dynamic_ext" ;;
10057         esac
10058         case "$dflt" in
10059         '')     dflt=none;;
10060         esac
10061         rp="What extensions do you wish to load dynamically?"
10062         . ./myread
10063         case "$ans" in
10064         none) dynamic_ext=' ' ;;
10065         *) dynamic_ext="$ans" ;;
10066         esac
10067
10068         case "$static_ext" in
10069         '')
10070                 : Exclude those already listed in dynamic linking
10071                 dflt=''
10072                 for xxx in $avail_ext; do
10073                         case " $dynamic_ext " in
10074                         *" $xxx "*) ;;
10075                         *) dflt="$dflt $xxx" ;;
10076                         esac
10077                 done
10078                 set X $dflt
10079                 shift
10080                 dflt="$*"
10081                 ;;
10082         *)  dflt="$static_ext" 
10083                 ;;
10084         esac
10085
10086         case "$dflt" in
10087         '')     dflt=none;;
10088         esac
10089         rp="What extensions do you wish to load statically?"
10090         . ./myread
10091         case "$ans" in
10092         none) static_ext=' ' ;;
10093         *) static_ext="$ans" ;;
10094         esac
10095         ;;
10096 *)
10097         $cat <<EOM
10098 A number of extensions are supplied with $package.  Answer "none" 
10099 to include no extensions. 
10100
10101 EOM
10102         case "$static_ext" in
10103         '') dflt="$avail_ext" ;;
10104         *)      dflt="$static_ext" ;;
10105         esac
10106
10107         case "$dflt" in
10108         '')     dflt=none;;
10109         esac
10110         rp="What extensions do you wish to include?"
10111         . ./myread
10112         case "$ans" in
10113         none) static_ext=' ' ;;
10114         *) static_ext="$ans" ;;
10115         esac
10116         ;;
10117 esac
10118
10119 set X $dynamic_ext $static_ext
10120 shift
10121 extensions="$*"
10122
10123 : Remove build directory name from cppstdin so it can be used from
10124 : either the present location or the final installed location.
10125 echo " "
10126 : Get out of the UU directory to get correct path name.
10127 cd ..
10128 case "$cppstdin" in
10129 `pwd`/cppstdin)
10130         echo "Stripping down cppstdin path name"
10131         cppstdin=cppstdin
10132         ;;
10133 esac
10134 cd UU
10135
10136 : end of configuration questions
10137 echo " "
10138 echo "End of configuration questions."
10139 echo " "
10140
10141 : back to where it started
10142 if test -d ../UU; then
10143         cd ..
10144 fi
10145
10146 : configuration may be patched via a 'config.over' file
10147 if $test -f config.over; then
10148         echo " "
10149         dflt=y
10150         rp='I see a config.over file.  Do you wish to load it?'
10151         . UU/myread
10152         case "$ans" in
10153         n*) echo "OK, I'll ignore it.";;
10154         *)      . ./config.over
10155                 echo "Configuration override changes have been loaded."
10156                 ;;
10157         esac
10158 fi
10159
10160 : in case they want portability, strip down executable paths
10161 case "$d_portable" in
10162 "$define")
10163         echo " "
10164         echo "Stripping down executable paths..." >&4
10165         for file in $loclist $trylist; do
10166                 eval $file="\$file"
10167         done
10168         ;;
10169 esac
10170
10171 : create config.sh file
10172 echo " "
10173 echo "Creating config.sh..." >&4
10174 $spitshell <<EOT >config.sh
10175 $startsh
10176 #
10177 # This file was produced by running the Configure script.  It holds all
10178 # the definitions figured out by Configure.  Should you modify any of
10179 # these values, do not forget to propagate your changes by running
10180 # "Configure -S"; or, equivalently, you may run each .SH file yourself.
10181 #
10182
10183 # Configuration time: $cf_time
10184 # Configured by: $cf_by
10185 # Target system: $myuname
10186
10187 Author='$Author'
10188 Date='$Date'
10189 Header='$Header'
10190 Id='$Id'
10191 Locker='$Locker'
10192 Log='$Log'
10193 Mcc='$Mcc'
10194 RCSfile='$RCSfile'
10195 Revision='$Revision'
10196 Source='$Source'
10197 State='$State'
10198 afs='$afs'
10199 alignbytes='$alignbytes'
10200 aphostname='$aphostname'
10201 ar='$ar'
10202 archlib='$archlib'
10203 archlibexp='$archlibexp'
10204 archname='$archname'
10205 archobjs='$archobjs'
10206 awk='$awk'
10207 baserev='$baserev'
10208 bash='$bash'
10209 bin='$bin'
10210 bincompat3='$bincompat3'
10211 binexp='$binexp'
10212 bison='$bison'
10213 byacc='$byacc'
10214 byteorder='$byteorder'
10215 c='$c'
10216 castflags='$castflags'
10217 cat='$cat'
10218 cc='$cc'
10219 cccdlflags='$cccdlflags'
10220 ccdlflags='$ccdlflags'
10221 ccflags='$ccflags'
10222 cf_by='$cf_by'
10223 cf_email='$cf_email'
10224 cf_time='$cf_time'
10225 chgrp='$chgrp'
10226 chmod='$chmod'
10227 chown='$chown'
10228 clocktype='$clocktype'
10229 comm='$comm'
10230 compress='$compress'
10231 contains='$contains'
10232 cp='$cp'
10233 cpio='$cpio'
10234 cpp='$cpp'
10235 cpp_stuff='$cpp_stuff'
10236 cppflags='$cppflags'
10237 cpplast='$cpplast'
10238 cppminus='$cppminus'
10239 cpprun='$cpprun'
10240 cppstdin='$cppstdin'
10241 cryptlib='$cryptlib'
10242 csh='$csh'
10243 d_Gconvert='$d_Gconvert'
10244 d_access='$d_access'
10245 d_alarm='$d_alarm'
10246 d_archlib='$d_archlib'
10247 d_attribut='$d_attribut'
10248 d_bcmp='$d_bcmp'
10249 d_bcopy='$d_bcopy'
10250 d_bincompat3='$d_bincompat3'
10251 d_bsd='$d_bsd'
10252 d_bsdgetpgrp='$d_bsdgetpgrp'
10253 d_bsdpgrp='$d_bsdpgrp'
10254 d_bsdsetpgrp='$d_bsdsetpgrp'
10255 d_bzero='$d_bzero'
10256 d_casti32='$d_casti32'
10257 d_castneg='$d_castneg'
10258 d_charvspr='$d_charvspr'
10259 d_chown='$d_chown'
10260 d_chroot='$d_chroot'
10261 d_chsize='$d_chsize'
10262 d_closedir='$d_closedir'
10263 d_const='$d_const'
10264 d_crypt='$d_crypt'
10265 d_csh='$d_csh'
10266 d_cuserid='$d_cuserid'
10267 d_dbl_dig='$d_dbl_dig'
10268 d_difftime='$d_difftime'
10269 d_dirnamlen='$d_dirnamlen'
10270 d_dlerror='$d_dlerror'
10271 d_dlopen='$d_dlopen'
10272 d_dlsymun='$d_dlsymun'
10273 d_dosuid='$d_dosuid'
10274 d_dup2='$d_dup2'
10275 d_eofnblk='$d_eofnblk'
10276 d_eunice='$d_eunice'
10277 d_fchmod='$d_fchmod'
10278 d_fchown='$d_fchown'
10279 d_fcntl='$d_fcntl'
10280 d_fd_macros='$d_fd_macros'
10281 d_fd_set='$d_fd_set'
10282 d_fds_bits='$d_fds_bits'
10283 d_fgetpos='$d_fgetpos'
10284 d_flexfnam='$d_flexfnam'
10285 d_flock='$d_flock'
10286 d_fork='$d_fork'
10287 d_fpathconf='$d_fpathconf'
10288 d_fsetpos='$d_fsetpos'
10289 d_ftime='$d_ftime'
10290 d_getgrps='$d_getgrps'
10291 d_setgrps='$d_setgrps'
10292 d_gethbadd='$d_gethbadd'
10293 gethbadd_addr_type='$gethbadd_addr_type'
10294 gethbadd_alen_type='$gethbadd_alen_type'
10295 d_gethent='$d_gethent'
10296 d_gethname='$d_gethname'
10297 d_getlogin='$d_getlogin'
10298 d_getnbadd='$d_getnbadd'
10299 getnbadd_net_type='$getnbadd_net_type'
10300 d_getpgid='$d_getpgid'
10301 d_getpgrp2='$d_getpgrp2'
10302 d_getpgrp='$d_getpgrp'
10303 d_getppid='$d_getppid'
10304 d_getprior='$d_getprior'
10305 d_gettimeod='$d_gettimeod'
10306 d_gnulibc='$d_gnulibc'
10307 d_htonl='$d_htonl'
10308 d_index='$d_index'
10309 d_inetaton='$d_inetaton'
10310 d_isascii='$d_isascii'
10311 d_killpg='$d_killpg'
10312 d_link='$d_link'
10313 d_locconv='$d_locconv'
10314 d_lockf='$d_lockf'
10315 d_lstat='$d_lstat'
10316 d_mblen='$d_mblen'
10317 d_mbstowcs='$d_mbstowcs'
10318 d_mbtowc='$d_mbtowc'
10319 d_memcmp='$d_memcmp'
10320 d_memcpy='$d_memcpy'
10321 d_memmove='$d_memmove'
10322 d_memset='$d_memset'
10323 d_mkdir='$d_mkdir'
10324 d_mkfifo='$d_mkfifo'
10325 d_mktime='$d_mktime'
10326 d_msg='$d_msg'
10327 d_msgctl='$d_msgctl'
10328 d_msgget='$d_msgget'
10329 d_msgrcv='$d_msgrcv'
10330 d_msgsnd='$d_msgsnd'
10331 d_mymalloc='$d_mymalloc'
10332 d_nice='$d_nice'
10333 d_oldarchlib='$d_oldarchlib'
10334 d_oldsock='$d_oldsock'
10335 d_open3='$d_open3'
10336 d_pathconf='$d_pathconf'
10337 d_pause='$d_pause'
10338 d_phostname='$d_phostname'
10339 d_pipe='$d_pipe'
10340 d_poll='$d_poll'
10341 d_portable='$d_portable'
10342 d_pthread_yield='$d_pthread_yield'
10343 d_pwage='$d_pwage'
10344 d_pwchange='$d_pwchange'
10345 d_pwclass='$d_pwclass'
10346 d_pwcomment='$d_pwcomment'
10347 d_pwexpire='$d_pwexpire'
10348 d_pwquota='$d_pwquota'
10349 d_readdir='$d_readdir'
10350 d_readlink='$d_readlink'
10351 d_rename='$d_rename'
10352 d_rewinddir='$d_rewinddir'
10353 d_rmdir='$d_rmdir'
10354 d_safebcpy='$d_safebcpy'
10355 d_safemcpy='$d_safemcpy'
10356 d_sanemcmp='$d_sanemcmp'
10357 d_sched_yield='$d_sched_yield'
10358 d_seekdir='$d_seekdir'
10359 d_select='$d_select'
10360 d_sem='$d_sem'
10361 d_semctl='$d_semctl'
10362 d_semget='$d_semget'
10363 d_semop='$d_semop'
10364 d_setegid='$d_setegid'
10365 d_seteuid='$d_seteuid'
10366 d_setlinebuf='$d_setlinebuf'
10367 d_setlocale='$d_setlocale'
10368 d_setpgid='$d_setpgid'
10369 d_setpgrp2='$d_setpgrp2'
10370 d_setpgrp='$d_setpgrp'
10371 d_setprior='$d_setprior'
10372 d_setregid='$d_setregid'
10373 d_setresgid='$d_setresgid'
10374 d_setresuid='$d_setresuid'
10375 d_setreuid='$d_setreuid'
10376 d_setrgid='$d_setrgid'
10377 d_setruid='$d_setruid'
10378 d_setsid='$d_setsid'
10379 d_sfio='$d_sfio'
10380 d_shm='$d_shm'
10381 d_shmat='$d_shmat'
10382 d_shmatprototype='$d_shmatprototype'
10383 d_shmctl='$d_shmctl'
10384 d_shmdt='$d_shmdt'
10385 d_shmget='$d_shmget'
10386 d_sigaction='$d_sigaction'
10387 d_sigsetjmp='$d_sigsetjmp'
10388 d_socket='$d_socket'
10389 d_sockpair='$d_sockpair'
10390 d_statblks='$d_statblks'
10391 d_stdio_cnt_lval='$d_stdio_cnt_lval'
10392 d_stdio_ptr_lval='$d_stdio_ptr_lval'
10393 d_stdiobase='$d_stdiobase'
10394 d_stdstdio='$d_stdstdio'
10395 d_strchr='$d_strchr'
10396 d_strcoll='$d_strcoll'
10397 d_strctcpy='$d_strctcpy'
10398 d_strerrm='$d_strerrm'
10399 d_strerror='$d_strerror'
10400 d_strtod='$d_strtod'
10401 d_strtol='$d_strtol'
10402 d_strtoul='$d_strtoul'
10403 d_strxfrm='$d_strxfrm'
10404 d_suidsafe='$d_suidsafe'
10405 d_symlink='$d_symlink'
10406 d_syscall='$d_syscall'
10407 d_sysconf='$d_sysconf'
10408 d_sysernlst='$d_sysernlst'
10409 d_syserrlst='$d_syserrlst'
10410 d_system='$d_system'
10411 d_tcgetpgrp='$d_tcgetpgrp'
10412 d_tcsetpgrp='$d_tcsetpgrp'
10413 d_telldir='$d_telldir'
10414 d_time='$d_time'
10415 d_times='$d_times'
10416 d_truncate='$d_truncate'
10417 d_tzname='$d_tzname'
10418 d_umask='$d_umask'
10419 d_uname='$d_uname'
10420 d_vfork='$d_vfork'
10421 d_void_closedir='$d_void_closedir'
10422 d_voidsig='$d_voidsig'
10423 d_voidtty='$d_voidtty'
10424 d_volatile='$d_volatile'
10425 d_vprintf='$d_vprintf'
10426 d_wait4='$d_wait4'
10427 d_waitpid='$d_waitpid'
10428 d_wcstombs='$d_wcstombs'
10429 d_wctomb='$d_wctomb'
10430 d_xenix='$d_xenix'
10431 date='$date'
10432 db_hashtype='$db_hashtype'
10433 db_prefixtype='$db_prefixtype'
10434 defvoidused='$defvoidused'
10435 direntrytype='$direntrytype'
10436 dlext='$dlext'
10437 dlsrc='$dlsrc'
10438 dynamic_ext='$dynamic_ext'
10439 eagain='$eagain'
10440 echo='$echo'
10441 egrep='$egrep'
10442 emacs='$emacs'
10443 eunicefix='$eunicefix'
10444 exe_ext='$exe_ext'
10445 expr='$expr'
10446 extensions='$extensions'
10447 find='$find'
10448 firstmakefile='$firstmakefile'
10449 flex='$flex'
10450 fpostype='$fpostype'
10451 freetype='$freetype'
10452 full_csh='$full_csh'
10453 full_sed='$full_sed'
10454 gcc='$gcc'
10455 gccversion='$gccversion'
10456 gidtype='$gidtype'
10457 glibpth='$glibpth'
10458 grep='$grep'
10459 groupcat='$groupcat'
10460 groupstype='$groupstype'
10461 gzip='$gzip'
10462 h_fcntl='$h_fcntl'
10463 h_sysfile='$h_sysfile'
10464 hint='$hint'
10465 hostcat='$hostcat'
10466 huge='$huge'
10467 i_bsdioctl='$i_bsdioctl'
10468 i_db='$i_db'
10469 i_dbm='$i_dbm'
10470 i_dirent='$i_dirent'
10471 i_dld='$i_dld'
10472 i_dlfcn='$i_dlfcn'
10473 i_fcntl='$i_fcntl'
10474 i_float='$i_float'
10475 i_gdbm='$i_gdbm'
10476 i_grp='$i_grp'
10477 i_limits='$i_limits'
10478 i_locale='$i_locale'
10479 i_malloc='$i_malloc'
10480 i_math='$i_math'
10481 i_memory='$i_memory'
10482 i_ndbm='$i_ndbm'
10483 i_netdb='$i_netdb'
10484 i_neterrno='$i_neterrno'
10485 i_niin='$i_niin'
10486 i_pwd='$i_pwd'
10487 i_rpcsvcdbm='$i_rpcsvcdbm'
10488 i_sfio='$i_sfio'
10489 i_sgtty='$i_sgtty'
10490 i_stdarg='$i_stdarg'
10491 i_stddef='$i_stddef'
10492 i_stdlib='$i_stdlib'
10493 i_string='$i_string'
10494 i_sysdir='$i_sysdir'
10495 i_sysfile='$i_sysfile'
10496 i_sysfilio='$i_sysfilio'
10497 i_sysin='$i_sysin'
10498 i_sysioctl='$i_sysioctl'
10499 i_sysndir='$i_sysndir'
10500 i_sysparam='$i_sysparam'
10501 i_sysresrc='$i_sysresrc'
10502 i_sysselct='$i_sysselct'
10503 i_syssockio='$i_syssockio'
10504 i_sysstat='$i_sysstat'
10505 i_systime='$i_systime'
10506 i_systimek='$i_systimek'
10507 i_systimes='$i_systimes'
10508 i_systypes='$i_systypes'
10509 i_sysun='$i_sysun'
10510 i_syswait='$i_syswait'
10511 i_termio='$i_termio'
10512 i_termios='$i_termios'
10513 i_time='$i_time'
10514 i_unistd='$i_unistd'
10515 i_utime='$i_utime'
10516 i_values='$i_values'
10517 i_varargs='$i_varargs'
10518 i_varhdr='$i_varhdr'
10519 i_vfork='$i_vfork'
10520 incpath='$incpath'
10521 inews='$inews'
10522 installarchlib='$installarchlib'
10523 installbin='$installbin'
10524 installman1dir='$installman1dir'
10525 installman3dir='$installman3dir'
10526 installprivlib='$installprivlib'
10527 installscript='$installscript'
10528 installsitearch='$installsitearch'
10529 installsitelib='$installsitelib'
10530 intsize='$intsize'
10531 known_extensions='$known_extensions'
10532 ksh='$ksh'
10533 large='$large'
10534 ld='$ld'
10535 lddlflags='$lddlflags'
10536 ldflags='$ldflags'
10537 less='$less'
10538 lib_ext='$lib_ext'
10539 libc='$libc'
10540 libperl='$libperl'
10541 libpth='$libpth'
10542 libs='$libs'
10543 libswanted='$libswanted'
10544 line='$line'
10545 lint='$lint'
10546 lkflags='$lkflags'
10547 ln='$ln'
10548 lns='$lns'
10549 locincpth='$locincpth'
10550 loclibpth='$loclibpth'
10551 longsize='$longsize'
10552 lp='$lp'
10553 lpr='$lpr'
10554 ls='$ls'
10555 lseektype='$lseektype'
10556 mail='$mail'
10557 mailx='$mailx'
10558 make='$make'
10559 make_set_make='$make_set_make'
10560 mallocobj='$mallocobj'
10561 mallocsrc='$mallocsrc'
10562 malloctype='$malloctype'
10563 man1dir='$man1dir'
10564 man1direxp='$man1direxp'
10565 man1ext='$man1ext'
10566 man3dir='$man3dir'
10567 man3direxp='$man3direxp'
10568 man3ext='$man3ext'
10569 medium='$medium'
10570 mips='$mips'
10571 mips_type='$mips_type'
10572 mkdir='$mkdir'
10573 models='$models'
10574 modetype='$modetype'
10575 more='$more'
10576 mv='$mv'
10577 myarchname='$myarchname'
10578 mydomain='$mydomain'
10579 myhostname='$myhostname'
10580 myuname='$myuname'
10581 n='$n'
10582 nm_opt='$nm_opt'
10583 nm_so_opt='$nm_so_opt'
10584 nroff='$nroff'
10585 o_nonblock='$o_nonblock'
10586 obj_ext='$obj_ext'
10587 oldarchlib='$oldarchlib'
10588 oldarchlibexp='$oldarchlibexp'
10589 optimize='$optimize'
10590 orderlib='$orderlib'
10591 osname='$osname'
10592 osvers='$osvers'
10593 package='$package'
10594 pager='$pager'
10595 passcat='$passcat'
10596 patchlevel='$patchlevel'
10597 path_sep='$path_sep'
10598 perl='$perl'
10599 perladmin='$perladmin'
10600 perlpath='$perlpath'
10601 pg='$pg'
10602 phostname='$phostname'
10603 plibpth='$plibpth'
10604 pmake='$pmake'
10605 pr='$pr'
10606 prefix='$prefix'
10607 prefixexp='$prefixexp'
10608 privlib='$privlib'
10609 privlibexp='$privlibexp'
10610 prototype='$prototype'
10611 pthreads_created_joinable='$pthreads_created_joinable'
10612 randbits='$randbits'
10613 ranlib='$ranlib'
10614 rd_nodata='$rd_nodata'
10615 rm='$rm'
10616 rmail='$rmail'
10617 runnm='$runnm'
10618 scriptdir='$scriptdir'
10619 scriptdirexp='$scriptdirexp'
10620 sed='$sed'
10621 selecttype='$selecttype'
10622 sendmail='$sendmail'
10623 sh='$sh'
10624 shar='$shar'
10625 sharpbang='$sharpbang'
10626 shmattype='$shmattype'
10627 shortsize='$shortsize'
10628 shrpenv='$shrpenv'
10629 shsharp='$shsharp'
10630 sig_name='$sig_name'
10631 sig_num='$sig_num'
10632 signal_t='$signal_t'
10633 sitearch='$sitearch'
10634 sitearchexp='$sitearchexp'
10635 sitelib='$sitelib'
10636 sitelibexp='$sitelibexp'
10637 sizetype='$sizetype'
10638 sleep='$sleep'
10639 smail='$smail'
10640 small='$small'
10641 so='$so'
10642 sockethdr='$sockethdr'
10643 socketlib='$socketlib'
10644 sort='$sort'
10645 spackage='$spackage'
10646 spitshell='$spitshell'
10647 split='$split'
10648 ssizetype='$ssizetype'
10649 startperl='$startperl'
10650 startsh='$startsh'
10651 static_ext='$static_ext'
10652 stdchar='$stdchar'
10653 stdio_base='$stdio_base'
10654 stdio_bufsiz='$stdio_bufsiz'
10655 stdio_cnt='$stdio_cnt'
10656 stdio_ptr='$stdio_ptr'
10657 strings='$strings'
10658 submit='$submit'
10659 subversion='$subversion'
10660 sysman='$sysman'
10661 tail='$tail'
10662 tar='$tar'
10663 tbl='$tbl'
10664 test='$test'
10665 timeincl='$timeincl'
10666 timetype='$timetype'
10667 touch='$touch'
10668 tr='$tr'
10669 troff='$troff'
10670 uidtype='$uidtype'
10671 uname='$uname'
10672 uniq='$uniq'
10673 usedl='$usedl'
10674 usemymalloc='$usemymalloc'
10675 usenm='$usenm'
10676 useopcode='$useopcode'
10677 useperlio='$useperlio'
10678 useposix='$useposix'
10679 usesfio='$usesfio'
10680 useshrplib='$useshrplib'
10681 usevfork='$usevfork'
10682 usrinc='$usrinc'
10683 uuname='$uuname'
10684 vi='$vi'
10685 voidflags='$voidflags'
10686 xlibpth='$xlibpth'
10687 zcat='$zcat'
10688 zip='$zip'
10689 EOT
10690
10691 : add special variables
10692 $test -f patchlevel.h && \
10693 awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
10694 echo "CONFIG=true" >>config.sh
10695
10696 : propagate old symbols
10697 if $test -f UU/config.sh; then
10698         <UU/config.sh sort | uniq >UU/oldconfig.sh
10699         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
10700         sort | uniq -u >UU/oldsyms
10701         set X `cat UU/oldsyms`
10702         shift
10703         case $# in
10704         0) ;;
10705         *)
10706                 cat <<EOM
10707 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
10708 EOM
10709                 echo "# Variables propagated from previous config.sh file." >>config.sh
10710                 for sym in `cat UU/oldsyms`; do
10711                         echo "    Propagating $hint variable "'$'"$sym..."
10712                         eval 'tmp="$'"${sym}"'"'
10713                         echo "$tmp" | \
10714                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
10715                 done
10716                 ;;
10717         esac
10718 fi
10719
10720 : Finish up by extracting the .SH files
10721 case "$alldone" in
10722 exit)
10723         $rm -rf UU
10724         echo "Done."
10725         exit 0
10726         ;;
10727 cont)
10728         ;;
10729 '')
10730         dflt=''
10731         nostick=true
10732         $cat <<EOM
10733
10734 If you'd like to make any changes to the config.sh file before I begin
10735 to configure things, do it as a shell escape now (e.g. !vi config.sh).
10736
10737 EOM
10738         rp="Press return or use a shell escape to edit config.sh:"
10739         . UU/myread
10740         nostick=''
10741         case "$ans" in
10742         '') ;;
10743         *) : in case they cannot read
10744                 sh 1>&4 -c "$ans";;
10745         esac
10746         ;;
10747 esac
10748
10749 : if this fails, just run all the .SH files by hand
10750 . ./config.sh
10751
10752 echo " "
10753 exec 1>&4
10754 . ./UU/extract
10755
10756 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
10757         dflt=y
10758         case "$silent" in
10759         true) ;;
10760         *)
10761                 $cat <<EOM
10762
10763 Now you need to generate make dependencies by running "make depend".
10764 You might prefer to run it in background: "make depend > makedepend.out &"
10765 It can take a while, so you might not want to run it right now.
10766
10767 EOM
10768                 ;;
10769         esac
10770         rp="Run make depend now?"
10771         . UU/myread
10772         case "$ans" in
10773         y*)
10774                 make depend && echo "Now you must run a make."
10775                 ;;
10776         *)
10777                 echo "You must run 'make depend' then 'make'."
10778                 ;;
10779         esac
10780 elif test -f [Mm]akefile; then
10781         echo " "
10782         echo "Now you must run a make."
10783 else
10784         echo "Done."
10785 fi
10786
10787 $rm -f kit*isdone ark*isdone
10788 $rm -rf UU
10789
10790 : End of Configure
10791