Configure patches -01 and -02 for 5.004_61.
[p5sagit/p5-mst-13.2.git] / Configure
index 432398c..4695391 100755 (executable)
--- a/Configure
+++ b/Configure
 # (Note: this Configure script was generated automatically. Rather than
 # working with this copy of Configure, you may wish to get metaconfig.
 # The dist-3.0 package (which contains metaconfig) was posted in
-# comp.sources.misc so you may fetch it yourself from your nearest
-# archive site. Check with Archie if you don't know where that can be.)
+# comp.sources.misc and is available on CPAN under authors/id/RAM so
+# you may fetch it yourself from your nearest archive site.)
 #
 
-# $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
+# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Mon Nov 20 09:55:37 EST 1995 [metaconfig 3.0 PL58]
+# Generated on Tue Mar  3 11:16:26 EST 1998 [metaconfig 3.0 PL70]
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -55,13 +55,17 @@ case "$0" in
        ;;
 esac
 
-: Proper PATH separator
+: Proper separator for the PATH environment variable
 p_=:
 : On OS/2 this directory should exist if this is not floppy only system :-]
-if test -d c:/.; then
-       p_=\;
-       PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
-       OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
+if test -d c:/. ; then
+    if test -n "$OS2_SHELL"; then
+               p_=\;
+               PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
+               OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
+       elif test -n "$DJDIR"; then
+               p_=\;
+       fi
 fi
 
 : Proper PATH setting
@@ -85,46 +89,72 @@ done
 PATH=.$p_$PATH
 export PATH
 
-: Sanity checks
-if test ! -t 0; then
-       echo "Say 'sh $me', not 'sh <$me'"
-       exit 1
+: shall we be using ksh?
+inksh=''
+needksh=''
+avoidksh=''
+newsh=/bin/ksh
+changesh=''
+if (PATH=.; alias -x) >/dev/null 2>&1; then
+               inksh=true
 fi
-
-: On HP-UX, large Configure scripts may exercise a bug in /bin/sh
 if test -f /hp-ux -a -f /bin/ksh; then
-       if (PATH=.; alias -x) >/dev/null 2>&1; then
-               : already under /bin/ksh
-       else
-               cat <<'EOM'
-(Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
-EOM
-               unset ENV
-               exec /bin/ksh $0 "$@"
+       needksh='to avoid sh bug in "here document" expansion'
+fi
+if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
+       if test X`/usr/bin/uname -v` = X4; then
+               avoidksh="to avoid AIX 4's /bin/sh"
+               newsh=/usr/bin/bsh
        fi
-else
-       : Warn them if they use ksh on other systems
-       (PATH=.; alias -x) >/dev/null 2>&1 && \
+fi
+case "$inksh/$needksh" in
+/[a-z]*)
+               unset ENV
+               changesh=true
+               reason="$needksh"
+       ;;
+esac
+case "$inksh/$avoidksh" in
+true/[a-z]*)
+       changesh=true
+       reason="$avoidksh"
+       ;;
+esac
+case "$inksh/$needksh-$avoidksh-" in
+true/--)
                cat <<EOM
 (I see you are using the Korn shell.  Some ksh's blow up on $me,
-especially on exotic machines.  If yours does, try the Bourne shell instead.)
+mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
 EOM
-fi
+       ;;
+esac
+case "$changesh" in
+true)
+       echo "(Feeding myself to $newsh $reason.)"
+       case "$0" in
+       Configure|*/Configure) exec $newsh $0 "$@";;
+       *) exec $newsh Configure "$@";;
+       esac
+       ;;
+esac
 
 : Configure runs within the UU subdirectory
 test -d UU || mkdir UU
+unset CDPATH
 cd UU && rm -f ./*
 
 dynamic_ext=''
 extensions=''
 known_extensions=''
 static_ext=''
+useopcode=''
 useposix=''
 d_bsd=''
 d_eunice=''
 d_xenix=''
 eunicefix=''
 Mcc=''
+ar=''
 awk=''
 bash=''
 bison=''
@@ -148,6 +178,7 @@ find=''
 flex=''
 gcc=''
 grep=''
+gzip=''
 inews=''
 ksh=''
 less=''
@@ -163,6 +194,7 @@ make=''
 mkdir=''
 more=''
 mv=''
+nm=''
 nroff=''
 perl=''
 pg=''
@@ -172,7 +204,6 @@ rm=''
 rmail=''
 sed=''
 sendmail=''
-sh=''
 shar=''
 sleep=''
 smail=''
@@ -181,6 +212,7 @@ submit=''
 tail=''
 tar=''
 tbl=''
+tee=''
 test=''
 touch=''
 tr=''
@@ -190,6 +222,7 @@ uniq=''
 uuname=''
 vi=''
 zcat=''
+zip=''
 full_sed=''
 libswanted=''
 hint=''
@@ -206,7 +239,9 @@ RCSfile=''
 Revision=''
 Source=''
 State=''
-ar=''
+_a=''
+_exe=''
+_o=''
 archobjs=''
 exe_ext=''
 firstmakefile=''
@@ -225,6 +260,8 @@ baserev=''
 bin=''
 binexp=''
 installbin=''
+bincompat3=''
+d_bincompat3=''
 byteorder=''
 cc=''
 gccversion=''
@@ -282,19 +319,33 @@ d_flexfnam=''
 d_flock=''
 d_fork=''
 d_fsetpos=''
+d_ftime=''
+d_gettimeod=''
 d_Gconvert=''
 d_getgrps=''
+d_gethbyaddr=''
+d_gethbyname=''
 d_gethent=''
 aphostname=''
 d_gethname=''
 d_phostname=''
 d_uname=''
 d_getlogin=''
+d_getnbyaddr=''
+d_getnbyname=''
+d_getpgid=''
 d_getpgrp2=''
+d_bsdgetpgrp=''
 d_getpgrp=''
 d_getppid=''
 d_getprior=''
+d_getpbyname=''
+d_getpbynumber=''
+d_getsbyname=''
+d_getsbyport=''
+d_gnulibc=''
 d_htonl=''
+d_inetaton=''
 d_isascii=''
 d_killpg=''
 d_link=''
@@ -324,6 +375,9 @@ d_pause=''
 d_pipe=''
 d_poll=''
 d_portable=''
+d_pthread_yield=''
+d_sched_yield=''
+d_pthreads_created_joinable=''
 d_readdir=''
 d_rewinddir=''
 d_seekdir=''
@@ -333,6 +387,7 @@ d_rename=''
 d_rmdir=''
 d_safebcpy=''
 d_safemcpy=''
+d_sanemcmp=''
 d_select=''
 d_sem=''
 d_semctl=''
@@ -340,11 +395,13 @@ d_semget=''
 d_semop=''
 d_setegid=''
 d_seteuid=''
+d_setgrps=''
+d_sethent=''
 d_setlinebuf=''
 d_setlocale=''
 d_setpgid=''
 d_setpgrp2=''
-d_bsdpgrp=''
+d_bsdsetpgrp=''
 d_setpgrp=''
 d_setprior=''
 d_setregid=''
@@ -354,6 +411,8 @@ d_setreuid=''
 d_setrgid=''
 d_setruid=''
 d_setsid=''
+d_sfio=''
+usesfio=''
 d_shm=''
 d_shmat=''
 d_shmatprototype=''
@@ -361,6 +420,8 @@ shmattype=''
 d_shmctl=''
 d_shmdt=''
 d_shmget=''
+d_sigaction=''
+d_sigsetjmp=''
 d_oldsock=''
 d_socket=''
 d_sockpair=''
@@ -374,6 +435,7 @@ d_stdstdio=''
 stdio_base=''
 stdio_bufsiz=''
 stdio_cnt=''
+stdio_filbuf=''
 stdio_ptr=''
 d_index=''
 d_strchr=''
@@ -383,6 +445,9 @@ d_strerrm=''
 d_strerror=''
 d_sysernlst=''
 d_syserrlst=''
+d_strtod=''
+d_strtol=''
+d_strtoul=''
 d_strxfrm=''
 d_symlink=''
 d_syscall=''
@@ -411,12 +476,11 @@ d_wctomb=''
 dlext=''
 cccdlflags=''
 ccdlflags=''
-d_shrplib=''
 dlsrc=''
 ld=''
 lddlflags=''
-shrpdir=''
 usedl=''
+doublesize=''
 fpostype=''
 gidtype=''
 groupstype=''
@@ -442,6 +506,7 @@ i_malloc=''
 i_math=''
 i_memory=''
 i_ndbm=''
+i_netdb=''
 i_neterrno=''
 i_niin=''
 i_sysin=''
@@ -452,6 +517,7 @@ d_pwcomment=''
 d_pwexpire=''
 d_pwquota=''
 i_pwd=''
+i_sfio=''
 i_stddef=''
 i_stdlib=''
 i_string=''
@@ -465,10 +531,13 @@ i_sysioctl=''
 i_syssockio=''
 i_sysndir=''
 i_sysparam=''
+i_sysresrc=''
 i_sysselct=''
 i_sysstat=''
 i_systimes=''
 i_systypes=''
+i_sysun=''
+i_syswait=''
 i_sgtty=''
 i_termio=''
 i_termios=''
@@ -478,12 +547,18 @@ i_time=''
 timeincl=''
 i_unistd=''
 i_utime=''
+i_values=''
 i_stdarg=''
 i_varargs=''
 i_varhdr=''
 i_vfork=''
 intsize=''
+longsize=''
+shortsize=''
 libc=''
+libperl=''
+shrpenv=''
+useshrplib=''
 glibpth=''
 libpth=''
 loclibpth=''
@@ -492,6 +567,7 @@ xlibpth=''
 libs=''
 lns=''
 lseektype=''
+make_set_make=''
 d_mymalloc=''
 freetype=''
 mallocobj=''
@@ -522,40 +598,51 @@ d_eofnblk=''
 eagain=''
 o_nonblock=''
 rd_nodata=''
+netdb_hlen_type=''
+netdb_host_type=''
+netdb_name_type=''
+netdb_net_type=''
 groupcat=''
 hostcat=''
 passcat=''
-d_oldarchlib=''
-oldarchlib=''
-oldarchlibexp=''
 orderlib=''
 ranlib=''
 package=''
 spackage=''
+pager=''
 patchlevel=''
+subversion=''
 perladmin=''
 perlpath=''
+pidtype=''
 prefix=''
 prefixexp=''
 installprivlib=''
 privlib=''
 privlibexp=''
 prototype=''
+ptrsize=''
 randbits=''
 installscript=''
 scriptdir=''
 scriptdirexp=''
 selecttype=''
+sh=''
 sig_name=''
+sig_name_init=''
 sig_num=''
 installsitearch=''
 sitearch=''
 sitearchexp=''
+installsitelib=''
+sitelib=''
+sitelibexp=''
 sizetype=''
 so=''
 sharpbang=''
 shsharp=''
 spitshell=''
+src=''
 ssizetype=''
 startperl=''
 startsh=''
@@ -563,8 +650,12 @@ stdchar=''
 sysman=''
 uidtype=''
 nm_opt=''
+nm_so_opt=''
 runnm=''
 usenm=''
+useperlio=''
+d_oldpthreads=''
+usethreads=''
 incpath=''
 mips=''
 mips_type=''
@@ -652,19 +743,7 @@ al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
 al="$al xenix z8000"
 
-groupstype=''
 i_whoami=''
-: default library list
-libswanted=''
-: set useposix=false in your hint file to disable the POSIX extension.
-useposix=true
-: Possible local include directories to search.
-locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
-locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
-:
-: no include file wanted by default
-inclwanted=''
-
 : change the next line if compiling for Xenix/286 on Xenix/386
 xlibpth='/usr/lib/386 /lib/386'
 
@@ -673,20 +752,42 @@ loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
 
 : general looking path for locating libraries
-glibpth="/lib/pa1.1 /usr/shlib /usr/lib/large /lib /usr/lib"
-glibpth="$glibpth $xlibpth /lib/large /usr/lib/small /lib/small"
-glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/shlib"
+glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
+glibpth="$glibpth /lib /usr/lib $xlibpth"
+glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
+glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
 
 : Private path used by Configure to find libraries.  Its value
 : is prepended to libpth. This variable takes care of special
 : machines, like the mips.  Usually, it should be empty.
 plibpth=''
 
+: default library list
+libswanted=''
 : full support for void wanted by default
 defvoidused=15
 
+: Possible local include directories to search.
+: Set locincpth to "" in a hint file to defeat local include searches.
+locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
+locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
+:
+: no include file wanted by default
+inclwanted=''
+
+: Trailing extension.  Override this in a hint file, if needed.
+_exe=''
+: Extra object files, if any, needed on this platform.
+archobjs=''
+groupstype=''
+: set useposix=false in your hint file to disable the POSIX extension.
+useposix=true
+: set useopcode=false in your hint file to disable the Opcode extension.
+useopcode=true
+: set usethreads on the Configure command line to enable threads.
 : List of libraries we want.
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl'
+: If anyone needs -lnet, put it in a hint file.
+libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
 libswanted="$libswanted ucb bsd BSD PW x"
 : We probably want to search /usr/shlib before most other libraries.
@@ -696,51 +797,106 @@ glibpth="/usr/shlib $glibpth"
 : Do not use vfork unless overridden by a hint file.
 usevfork=false
 
-: script used to extract .SH files with variable substitutions
-cat >extract <<'EOS'
-CONFIG=true
-echo "Doing variable substitutions on .SH files..."
-if test -f MANIFEST; then
-       shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
-       : Pick up possible extension manifests.
-       for dir in ext/* ; do
-               if test -f $dir/MANIFEST; then
-                       xxx=`awk '{print $1}' < $dir/MANIFEST | 
-                               sed -n "/\.SH$/ s@^@$dir/@p"`
-                       shlist="$shlist $xxx"
+: Find the basic shell for Bourne shell scripts
+case "$sh" in
+'')
+       case "$SYSTYPE" in
+       *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
+       *) xxx='/bin/sh';;
+       esac
+       if test -f "$xxx"; then
+               sh="$xxx"
+       else
+               : Build up a list and do a single loop so we can 'break' out.
+               pth=`echo $PATH | sed -e "s/$p_/ /g"`
+               for xxx in sh bash ksh pdksh ash; do
+                       for p in $pth; do
+                               try="$try ${p}/${xxx}"
+                       done
+               done
+               for xxx in $try; do
+                       if test -f "$xxx"; then
+                               sh="$xxx";
+                               break
+                       elif test -f "$xxx.exe"; then
+                               sh="$xxx";
+                               break
+                       fi
+               done
+       fi
+       ;;
+esac
+
+case "$sh" in
+'')    cat <<EOM >&2
+$me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
+
+Usually it's in /bin/sh.  How did you even get this far?
+Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and 
+we'll try to straighten this all out.
+EOM
+       exit 1
+       ;;
+esac
+
+: see if sh knows # comments
+if `$sh -c '#' >/dev/null 2>&1`; then
+       shsharp=true
+       spitshell=cat
+       xcat=/bin/cat
+       test -f $xcat || xcat=/usr/bin/cat
+       echo "#!$xcat" >try
+       $eunicefix try
+       chmod +x try
+       ./try > today
+       if test -s today; then
+               sharpbang='#!'
+       else
+               echo "#! $xcat" > try
+               $eunicefix try
+               chmod +x try
+               ./try > today
+               if test -s today; then
+                       sharpbang='#! '
+               else
+                       sharpbang=': use '
                fi
-       done
-       set x $shlist
+       fi
 else
-       echo "(Looking for .SH files under the current directory.)"
-       set x `find . -name "*.SH" -print`
+       echo " "
+       echo "Your $sh doesn't grok # comments--I will strip them later on."
+       shsharp=false
+       cd ..
+       echo "exec grep -v '^[  ]*#'" >spitshell
+       chmod +x spitshell
+       $eunicefix spitshell
+       spitshell=`pwd`/spitshell
+       cd UU
+       echo "I presume that if # doesn't work, #! won't work either!"
+       sharpbang=': use '
 fi
-shift
-case $# in
-0) set x *.SH; shift;;
+rm -f try today
+
+: figure out how to guarantee sh startup
+case "$startsh" in
+'') startsh=${sharpbang}${sh} ;;
+*)
 esac
-if test ! -f $1; then
-       shift
-fi
-for file in $*; do
-       case "$file" in
-       */*)
-               dir=`expr X$file : 'X\(.*\)/'`
-               file=`expr X$file : 'X.*/\(.*\)'`
-               (cd $dir && . ./$file)
-               ;;
-       *)
-               . ./$file
-               ;;
-       esac
-done
-if test -f config_h.SH; then
-       if test ! -f config.h; then
-       : oops, they left it out of MANIFEST, probably, so do it anyway.
-       . ./config_h.SH
-       fi
+cat >try <<EOSS
+$startsh
+set abc
+test "$?abc" != 1
+EOSS
+
+chmod +x try
+$eunicefix try
+if ./try; then
+       : echo "Yup, it does."
+else
+       echo "Hmm... '$startsh' does not guarantee sh startup..."
+       echo "You may have to fix up the shell scripts to make sure $sh runs them."
 fi
-EOS
+rm -f try
 
 : produce awk script to parse command line options
 cat >options.awk <<'EOF'
@@ -806,6 +962,10 @@ extractsh=''
 override=''
 knowitall=''
 rm -f optdef.sh
+cat >optdef.sh <<EOS
+$startsh
+EOS
+
 
 : option parsing
 while test $# -gt 0; do
@@ -825,11 +985,11 @@ while test $# -gt 0; do
                shift;;
        -h) shift; error=true;;
        -r) shift; reuseval=true;;
-       -s) shift; silent=true;;
+       -s) shift; silent=true; realsilent=true;;
        -E) shift; alldone=exit;;
        -K) shift; knowitall=true;;
        -O) shift; override=true;;
-       -S) shift; extractsh=true;;
+       -S) shift; silent=true; extractsh=true;;
        -D)
                shift
                case "$1" in
@@ -855,7 +1015,7 @@ while test $# -gt 0; do
                esac
                shift
                ;;
-       -V) echo "$me generated by metaconfig 3.0 PL58." >&2
+       -V) echo "$me generated by metaconfig 3.0 PL70." >&2
                exit 0;;
        --) break;;
        -*) echo "$me: unknown option $1" >&2; shift; error=true;;
@@ -866,7 +1026,7 @@ done
 case "$error" in
 true)
        cat >&2 <<EOM
-Usage: $me [-dehrEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
+Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
                  [-U symbol] [-U symbol=]
   -d : use defaults for all answers.
   -e : go on without questioning past the production of config.sh.
@@ -890,6 +1050,17 @@ EOM
        ;;
 esac
 
+: Sanity checks
+case "$fastread$alldone" in
+yescont|yesexit) ;;
+*)
+       if test ! -t 0; then
+               echo "Say 'sh Configure', not 'sh <Configure'"
+               exit 1
+       fi
+       ;;
+esac
+
 exec 4>&1
 case "$silent" in
 true) exec 1>/dev/null;;
@@ -899,26 +1070,6 @@ esac
 touch optdef.sh
 . ./optdef.sh
 
-case "$extractsh" in
-true)
-       case "$config_sh" in
-       '') config_sh='config.sh'; config='./config.sh';;
-       /*) config="$config_sh";;
-       *) config="./$config_sh";;
-       esac
-       echo " "
-       echo "Fetching answers from $config_sh..."
-       cd ..
-       . $config
-       test "$override" && . ./optdef.sh
-       echo " "
-       . ./UU/extract
-       rm -rf UU
-       echo "Done."
-       exit 0
-       ;;
-esac
-
 : set package name
 package=perl5
 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
@@ -928,13 +1079,6 @@ ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
 esac
 
-: Eunice requires " " instead of "", can you believe it
-echo " "
-: Here we go...
-echo "Beginning of configuration questions for $package."
-
-trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
-
 : Some greps do not return status, grrr.
 echo "grimblepritz" >grimble
 if grep blurfldyick grimble >/dev/null 2>&1 ; then
@@ -956,6 +1100,152 @@ EOSS
 chmod +x contains
 esac
 
+: Find the path to the source tree
+case "$src" in
+'') case "$0" in
+    */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
+    *)   src='.';;
+    esac;;
+esac
+case "$src" in
+'')    src=/
+       rsrc=/
+       ;;
+/*) rsrc="$src";;
+*) rsrc="../$src";;
+esac
+if test -f $rsrc/Configure && \
+       $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
+then
+   : found it, so we are ok.
+else
+       rsrc=''
+       for src in . .. ../.. ../../.. ../../../..; do
+               if test -f ../$src/Configure && \
+                       $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
+               then
+                       rsrc=../$src
+                       break
+               fi
+       done
+fi
+case "$rsrc" in
+'')
+       cat <<EOM >&4
+
+Sorry, I can't seem to locate the source dir for $package.  Please start
+Configure with an explicit path -- i.e. /some/path/Configure.
+
+EOM
+       exit 1
+       ;;
+../.)  rsrc='..';;
+*)
+       echo " "
+       echo "Sources for $package found in \"$src\"." >&4
+       ;;
+esac
+
+: script used to extract .SH files with variable substitutions
+cat >extract <<'EOS'
+CONFIG=true
+echo "Doing variable substitutions on .SH files..."
+if test -f $src/MANIFEST; then
+       set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH'`
+else
+       echo "(Looking for .SH files under the source directory.)"
+       set x `(cd $src; find . -name "*.SH" -print)`
+fi
+shift
+case $# in
+0) set x `(cd $src; echo *.SH)`; shift;;
+esac
+if test ! -f $src/$1; then
+       shift
+fi
+mkdir_p='
+name=$1;
+create="";
+while test $name; do
+       if test ! -d "$name"; then
+               create="$name $create";
+               name=`echo $name | sed -e "s|^[^/]*$||"`;
+               name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
+       else
+               name="";
+       fi;
+done;
+for file in $create; do
+       mkdir $file;
+done
+'
+for file in $*; do
+       case "$src" in
+       ".")
+               case "$file" in
+               */*)
+                       dir=`expr X$file : 'X\(.*\)/'`
+                       file=`expr X$file : 'X.*/\(.*\)'`
+                       (cd $dir && . ./$file)
+                       ;;
+               *)
+                       . ./$file
+                       ;;
+               esac
+               ;;
+       *)
+               case "$file" in
+               */*)
+                       dir=`expr X$file : 'X\(.*\)/'`
+                       file=`expr X$file : 'X.*/\(.*\)'`
+                       (set x $dir; shift; eval $mkdir_p)
+                       sh <$src/$dir/$file
+                       ;;
+               *)
+                       sh <$src/$file
+                       ;;
+               esac
+               ;;
+       esac
+done
+if test -f $src/config_h.SH; then
+       if test ! -f config.h; then
+       : oops, they left it out of MANIFEST, probably, so do it anyway.
+       . $src/config_h.SH
+       fi
+fi
+EOS
+
+: extract files and exit if asked to do so
+case "$extractsh" in
+true)
+       case "$realsilent" in
+       true) ;;
+       *) exec 1>&4;;
+       esac
+       case "$config_sh" in
+       '') config_sh='config.sh';;
+       esac
+       echo " "
+       echo "Fetching answers from $config_sh..."
+       cd ..
+       . $config_sh
+       test "$override" && . ./optdef.sh
+       echo " "
+       . UU/extract
+       rm -rf UU
+       echo "Done."
+       exit 0
+       ;;
+esac
+
+: Eunice requires " " instead of "", can you believe it
+echo " "
+: Here we go...
+echo "Beginning of configuration questions for $package."
+
+trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
+
 : first determine how to suppress newline on echo command
 echo " "
 echo "Checking echo to see how to suppress newlines..."
@@ -977,12 +1267,13 @@ rm -f .echotmp
 
 : Now test for existence of everything in MANIFEST
 echo " "
-if test -f ../MANIFEST; then
+if test -f $rsrc/MANIFEST; then
        echo "First let's make sure your kit is complete.  Checking..." >&4
-       awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50
+       awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
        rm -f missing
+       tmppwd=`pwd`
        for filelist in x??; do
-               (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing)
+               (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
        done
        if test -s missing; then
                cat missing >&4
@@ -993,7 +1284,7 @@ THIS PACKAGE SEEMS TO BE INCOMPLETE.
 You have the option of continuing the configuration process, despite the
 distinct possibility that your kit is damaged, by typing 'y'es.  If you
 do, don't blame me if something goes wrong.  I advise you to type 'n'o
-and contact the author (lwall@netlabs.com).
+and contact the author (doughera@lafcol.lafayette.edu).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -1009,7 +1300,7 @@ EOM
                        ;;
                esac
        else
-               echo "Looks good..." >&4
+               echo "Looks good..."
        fi
 else
        echo "There is no MANIFEST file.  I hope your kit is complete !"
@@ -1039,6 +1330,7 @@ esac"
 
 : now set up to do reads with possible shell escape and default assignment
 cat <<EOSC >myread
+$startsh
 xxxm=\$dflt
 $myecho
 ans='!'
@@ -1061,37 +1353,37 @@ while expr "X\$ans" : "X!" >/dev/null; do
        read answ
        set x \$xxxm
        shift
-       aok=''; eval "ans=\"\$answ\"" && aok=y
+       aok=''; eval "ans=\\"\$answ\\"" && aok=y
        case  "\$answ" in
-       "\$ans")
-               case "\$ans" in
-               \\&*)
-                       set x \`expr "X\$ans" : "X&\(.*\)\$"\`
-                       shift
-                       case "\$1" in
+       "!")
+               sh 1>&4
+               echo " "
+               $myecho
+               ;;
+       !*)
+               set x \`expr "X\$ans" : "X!\(.*\)\$"\`
+               shift
+               sh 1>&4 -c "\$*"
+               echo " "
+               $myecho
+               ;;
+       "\$ans")
+               case "\$ans" in
+               \\&*)
+                       set x \`expr "X\$ans" : "X&\(.*\)\$"\`
+                       shift
+                       case "\$1" in
                        -d)
                                fastread=yes
-                               echo "(OK, I'll run with -d after this question.)"
+                               echo "(OK, I'll run with -d after this question.)" >&4
                                ;;
                        -*)
-                               echo "*** Sorry, \$1 not supported yet."
+                               echo "*** Sorry, \$1 not supported yet." >&4
                                ;;
                        esac
                        $myecho
                        ans=!
                        ;;
-               "!")
-                       sh 1>&4
-                       echo " "
-                       $myecho
-                       ;;
-               !*)
-                       set x \`expr "X\$ans" : "X!\(.*\)\$"\`
-                       shift
-                       sh 1>&4 -c "\$*"
-                       echo " "
-                       $myecho
-                       ;;
                esac;;
        *)
                case "\$aok" in
@@ -1126,7 +1418,7 @@ EOSC
 test -d ../.config || mkdir ../.config
 cat >../.config/README <<EOF
 This directory created by Configure to save information that should
-persist across sessions.
+persist across sessions for $package.
 
 You may safely delete it if you wish.
 EOF
@@ -1134,7 +1426,10 @@ EOF
 : general instructions
 needman=true
 firsttime=true
-user=`( (logname) 2>/dev/null || whoami) 2>&1`
+user=`(logname) 2>/dev/null`
+case "$user" in
+'') user=`whoami 2>&1`;;
+esac
 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
        firsttime=false
        echo " "
@@ -1148,7 +1443,7 @@ if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
 fi
 if $needman; then
        cat <<EOH
+
 This installation shell script will examine your system and ask you questions
 to determine how the perl5 package should be installed. If you get
 stuck on a question, you may use a ! shell escape to start a subshell or
@@ -1180,7 +1475,7 @@ If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
 the questions and use the computed defaults (or the previous answers if there
 was already a config.sh file). Type 'Configure -h' for a list of options.
 You may also start interactively and then answer '& -d' at any prompt to turn
-on the non-interactive behaviour for the remaining of the execution.
+on the non-interactive behaviour for the remainder of the execution.
 
 EOH
        . ./myread
@@ -1190,7 +1485,7 @@ Much effort has been expended to ensure that this shell script will run on any
 Unix system.  If despite that it blows up on yours, your best bet is to edit
 Configure and run it again.  If you can't run Configure for some reason,
 you'll have to generate a config.sh file by hand.  Whatever problems you
-have, let me (lwall@netlabs.com) know how I blew it.
+have, let me (doughera@lafcol.lafayette.edu) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1211,74 +1506,6 @@ EOH
        esac
 fi
 
-: see if sh knows # comments
-echo " "
-echo "Checking your sh to see if it knows about # comments..." >&4
-if `sh -c '#' >/dev/null 2>&1`; then
-       echo "Your sh handles # comments correctly."
-       shsharp=true
-       spitshell=cat
-       echo " "
-       echo "Okay, let's see if #! works on this system..."
-       xcat=/bin/cat
-       test -f $xcat || xcat=/usr/bin/cat
-       echo "#!$xcat" >try
-       $eunicefix try
-       chmod +x try
-       ./try > today
-       if test -s today; then
-               echo "It does."
-               sharpbang='#!'
-       else
-               echo "#! $xcat" > try
-               $eunicefix try
-               chmod +x try
-               ./try > today
-               if test -s today; then
-                       echo "It does."
-                       sharpbang='#! '
-               else
-                       echo "It's just a comment."
-                       sharpbang=': use '
-               fi
-       fi
-else
-       echo "Your sh doesn't grok # comments--I will strip them later on."
-       shsharp=false
-       cd ..
-       echo "exec grep -v '^[  ]*#'" >spitshell
-       chmod +x spitshell
-       $eunicefix spitshell
-       spitshell=`pwd`/spitshell
-       cd UU
-       echo "I presume that if # doesn't work, #! won't work either!"
-       sharpbang=': use '
-fi
-rm -f try today
-
-: figure out how to guarantee sh startup
-echo " "
-echo "Checking out how to guarantee sh startup..." >&4
-case "$SYSTYPE" in
-*bsd*|sys5*) startsh=$sharpbang"/$SYSTYPE/bin/sh";;
-*) startsh=$sharpbang'/bin/sh';;
-esac
-echo "Let's see if '$startsh' works..."
-cat >try <<EOSS
-$startsh
-set abc
-test "$?abc" != 1
-EOSS
-
-chmod +x try
-$eunicefix try
-if ./try; then
-       echo "Yup, it does."
-else
-echo "Nope.  You may have to fix up the shell scripts to make sure sh runs them."
-fi
-rm -f try
-
 : find out where common programs are
 echo " "
 echo "Locating common programs..." >&4
@@ -1303,7 +1530,7 @@ for dir in \$*; do
        for thisthing in \$dir/\$thing; do
                : just loop through to pick last item
        done
-       if test -f \$thisthing -a -r \$thisthing; then
+       if test -f \$thisthing; then
                echo \$thisthing
                exit 0
        elif test -f \$dir/\$thing.exe; then
@@ -1328,34 +1555,55 @@ echo
 expr
 find
 grep
-ln
 ls
+make
 mkdir
 rm
 sed
 sort
-tail
 touch
 tr
 uniq
 "
 trylist="
 Mcc
+ar
 byacc
 cpp
 csh
 date
 egrep
+gzip
+less
 line
+ln
+more
+nm
 nroff
 perl
+pg
+sendmail
+tee
 test
 uname
+zip
 "
 pth=`echo $PATH | sed -e "s/$p_/ /g"`
 pth="$pth /lib /usr/lib"
 for file in $loclist; do
-       xxx=`./loc $file $file $pth`
+       eval xxx=\$$file
+       case "$xxx" in
+       /*|?:[\\/]*)
+               if test -f "$xxx"; then
+                       : ok
+               else
+                       echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
+                       xxx=`./loc $file $file $pth`
+               fi
+               ;;
+       '') xxx=`./loc $file $file $pth`;;
+       *) xxx=`./loc $xxx $xxx $pth`;;
+       esac
        eval $file=$xxx
        eval _$file=$xxx
        case "$xxx" in
@@ -1366,8 +1614,8 @@ for file in $loclist; do
                echo $file is in $xxx.
                ;;
        *)
-               echo "I don't know where '$file' is, and my life depends on it."
-               echo "Go find a public domain implementation or fix your PATH setting!"
+               echo "I don't know where '$file' is, and my life depends on it." >&4
+               echo "Go find a public domain implementation or fix your PATH setting!" >&4
                exit 1
                ;;
        esac
@@ -1376,7 +1624,19 @@ echo " "
 echo "Don't worry if any of the following aren't found..."
 say=offhand
 for file in $trylist; do
-       xxx=`./loc $file $file $pth`
+       eval xxx=\$$file
+       case "$xxx" in
+       /*|?:[\\/]*)
+               if test -f "$xxx"; then
+                       : ok
+               else
+                       echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
+                       xxx=`./loc $file $file $pth`
+               fi
+               ;;
+       '') xxx=`./loc $file $file $pth`;;
+       *) xxx=`./loc $xxx $xxx $pth`;;
+       esac
        eval $file=$xxx
        eval _$file=$xxx
        case "$xxx" in
@@ -1398,6 +1658,12 @@ egrep)
        egrep=$grep
        ;;
 esac
+case "$ln" in
+ln)
+       echo "Substituting cp for ln."
+       ln=$cp
+       ;;
+esac
 case "$test" in
 test)
        echo "Hopefully test is built into your sh."
@@ -1514,10 +1780,16 @@ if test -f config.sh; then
        *)  echo "Fetching default answers from your old config.sh file..." >&4
                tmp_n="$n"
                tmp_c="$c"
+               tmp_sh="$sh"
                . ./config.sh
                cp config.sh UU
                n="$tmp_n"
                c="$tmp_c"
+               : Older versions did not always set $sh.  Catch re-use of such
+               : an old config.sh.
+               case "$sh" in
+               '') sh="$tmp_sh" ;;
+               esac
                hint=previous
                ;;
        esac
@@ -1525,19 +1797,22 @@ fi
 if test ! -f config.sh; then
        $cat <<EOM
 
-First time through, eh?  I have some defaults handy for the following systems:
+First time through, eh?  I have some defaults handy for some systems
+that need some extra help getting the Configure answers right:
 
 EOM
-       cd hints; ls -C *.sh | $sed 's/\.sh/   /g' >&4
+       (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
        dflt=''
        : Half the following guesses are probably wrong... If you have better
-       : tests or hints, please send them to lwall@netlabs.com
+       : tests or hints, please send them to doughera@lafcol.lafayette.edu
        : The metaconfig authors would also appreciate a copy...
        $test -f /irix && osname=irix
        $test -f /xenix && osname=sco_xenix
        $test -f /dynix && osname=dynix
        $test -f /dnix && osname=dnix
-       $test -f /unicos && osname=unicos && osvers=`$uname -r`
+       $test -f /lynx.os && osname=lynxos
+       $test -f /unicos && osname=unicos && osvers=`$uname -r`
+       $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
        $test -f /bin/mips && /bin/mips && osname=mips
        $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
                $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
@@ -1545,12 +1820,12 @@ EOM
        $test -f /etc/saf/_sactab && osname=svr4
        $test -d /usr/include/minix && osname=minix
        if $test -d /MachTen; then
-               osname=machten 
+               osname=machten
                if $test -x /sbin/version; then
-                       osvers=`/sbin/version | $awk '{print $2}' | 
+                       osvers=`/sbin/version | $awk '{print $2}' |
                        $sed -e 's/[A-Za-z]$//'`
                elif $test -x /usr/etc/version; then
-                       osvers=`/usr/etc/version | $awk '{print $2}' | 
+                       osvers=`/usr/etc/version | $awk '{print $2}' |
                        $sed -e 's/[A-Za-z]$//'`
                else
                        osvers="$2.$3"
@@ -1569,7 +1844,6 @@ EOM
                        esac;;
                [23]100) osname=mips ;;
                next*) osname=next ;;
-               news*) osname=news ;;
                i386*)
                        if $test -f /etc/kconfig; then
                                osname=isc
@@ -1595,6 +1869,9 @@ EOM
                        *) osvers=$tmp;;
                        esac
                        ;;
+               *dc.osx) osname=dcosx
+                       osvers="$3"
+                       ;;
                dnix) osname=dnix
                        osvers="$3"
                        ;;
@@ -1604,6 +1881,9 @@ EOM
                dgux) osname=dgux 
                        osvers="$3"
                        ;;
+               dynixptx*) osname=dynixptx
+                       osvers="$3"
+                       ;;
                freebsd) osname=freebsd 
                        osvers="$3" ;;
                genix) osname=genix ;;
@@ -1615,7 +1895,7 @@ EOM
                        *)      osvers="$3" ;;
                        esac
                        ;;
-               irix) osname=irix
+               irix*) osname=irix
                        case "$3" in
                        4*) osvers=4 ;;
                        5*) osvers=5 ;;
@@ -1624,16 +1904,25 @@ EOM
                        ;;
                linux) osname=linux
                        case "$3" in
-                       1*) osvers=1 ;;
                        *)      osvers="$3" ;;
                        esac
                        ;;
                netbsd*) osname=netbsd 
                        osvers="$3"
                        ;;
+               news-os) osvers="$3"
+                       case "$3" in
+                       4*) osname=newsos4 ;;
+                       *) osname=newsos ;;
+                       esac
+                       ;;
                bsd386) osname=bsd386
                        osvers=`$uname -r`
                        ;;
+               powerux | power_ux | powermax_os | powermaxos | \
+               powerunix | power_unix) osname=powerux
+                       osvers="$3"
+                       ;;
                next*) osname=next ;;
                solaris) osname=solaris
                        case "$3" in
@@ -1660,10 +1949,10 @@ EOM
                ultrix) osname=ultrix
                        osvers="$3"
                        ;;
-               osf1)   case "$5" in
+               osf1|mls+)      case "$5" in
                                alpha)
                                        osname=dec_osf
-                                       osvers=`echo "$3" | sed 's/^[vt]//'`
+                                       osvers=`echo "$3" | sed 's/^[xvt]//'`
                                        ;;
                        hp*)    osname=hp_osf1  ;;
                        mips)   osname=mips_osf1 ;;
@@ -1672,10 +1961,13 @@ EOM
                uts) osname=uts 
                        osvers="$3"
                        ;;
+               qnx) osname=qnx
+                       osvers="$4"
+                       ;;
                $2) case "$osname" in
                        *isc*) ;;
                        *freebsd*) ;;
-                       svr*)
+                       svr*)
                                : svr4.x or possibly later
                                case "svr$3" in 
                                ${osname}*)
@@ -1728,16 +2020,20 @@ EOM
                        ;;
                esac
        else
-               if test -f /vmunix -a -f news_os.sh; then
-                       (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
-                       if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
+               if test -f /vmunix -a -f $src/hints/news_os.sh; then
+                       (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
+                       if $contains news-os UU/kernel.what >/dev/null 2>&1; then
                                osname=news_os
                        fi
-                       $rm -f ../UU/kernel.what
+                       $rm -f UU/kernel.what
                elif test -d c:/.; then
                        set X $myuname
                        osname=os2
                        osvers="$5"
+                       if test -n "$DJDIR"; then
+                               osname=dos
+                               osvers=djgpp
+                       fi
                fi
        fi
        
@@ -1756,17 +2052,17 @@ EOM
                *)  case "$osvers" in
                        '') dflt=$file
                                ;;
-                       *)  if $test -f $file.sh ; then
+                       *)  if $test -f $src/hints/$file.sh ; then
                                        dflt=$file
-                               elif $test -f $xfile.sh ; then
+                               elif $test -f $src/hints/$xfile.sh ; then
                                        dflt=$xfile
-                               elif $test -f $xxfile.sh ; then
+                               elif $test -f $src/hints/$xxfile.sh ; then
                                        dflt=$xxfile
-                               elif $test -f $xxxfile.sh ; then
+                               elif $test -f $src/hints/$xxxfile.sh ; then
                                        dflt=$xxxfile
-                               elif $test -f $xxxxfile.sh ; then
+                               elif $test -f $src/hints/$xxxxfile.sh ; then
                                        dflt=$xxxxfile
-                               elif $test -f "${osname}.sh" ; then
+                               elif $test -f "$src/hints/${osname}.sh" ; then
                                        dflt="${osname}"
                                else
                                        dflt=none
@@ -1775,25 +2071,46 @@ EOM
                        esac
                        ;;
                esac
+               if $test -f Policy.sh ; then
+                       case "$dflt" in
+                       *Policy*) ;;
+                       none) dflt="Policy" ;;
+                       *) dflt="Policy $dflt" ;;
+                       esac
+               fi
                ;;
        *)
                dflt=`echo $hintfile | $sed 's/\.sh$//'`
                ;;
        esac
 
+       if $test -f Policy.sh ; then
+               $cat <<EOM
+
+There's also a Policy hint file available, which should make the
+site-specific (policy) questions easier to answer.
+EOM
+
+       fi
+
        $cat <<EOM
 
 You may give one or more space-separated answers, or "none" if appropriate.
-If your OS version has no hints, DO NOT give a wrong version -- say "none".
+A well-behaved OS will have no hints, so answering "none" or just "Policy"
+is a good thing.  DO NOT give a wrong version.
 
 EOM
+
        rp="Which of these apply, if any?"
-       . ../UU/myread
+       . UU/myread
        tans=$ans
        for file in $tans; do
-               if $test -f $file.sh; then
-                       . ./$file.sh
-                       $cat $file.sh >> ../UU/config.sh
+               if $test X$file = XPolicy -a -f Policy.sh; then
+                       . Policy.sh
+                       $cat Policy.sh >> UU/config.sh
+               elif $test -f $src/hints/$file.sh; then
+                       . $src/hints/$file.sh
+                       $cat $src/hints/$file.sh >> UU/config.sh
                elif $test X$tans = X -o X$tans = Xnone ; then
                        : nothing
                else
@@ -1801,11 +2118,11 @@ EOM
                        echo "$file.sh does not exist"
                        dflt=$file
                        rp="hint to use instead?"
-                       . ../UU/myread
+                       . UU/myread
                        for file in $ans; do
-                               if $test -f "$file.sh"; then
-                                       . ./$file.sh
-                                       $cat $file.sh >> ../UU/config.sh
+                               if $test -f "$src/hints/$file.sh"; then
+                                       . $src/hints/$file.sh
+                                       $cat $src/hints/$file.sh >> UU/config.sh
                                elif $test X$ans = X -o X$ans = Xnone ; then
                                        : nothing
                                else
@@ -1817,13 +2134,11 @@ EOM
 
        hint=recommended
        : Remember our hint file for later.
-       if $test -f "$file.sh" ; then
+       if $test -f "$src/hints/$file.sh" ; then
                hintfile="$file"
        else
                hintfile=''
        fi
-
-       cd ..
 fi
 cd UU
 ;;
@@ -1834,6 +2149,7 @@ cd UU
        tmp_c="$c"
        cd ..
        cp $config_sh config.sh 2>/dev/null
+       chmod +w config.sh
        . ./config.sh
        cd UU
        cp ../config.sh .
@@ -1873,13 +2189,94 @@ case "$ans" in
 none)  osname='' ;;
 *) osname=`echo "$ans" | $sed -e 's/[  ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
 esac
+echo " "
+case "$osvers" in
+       ''|' ')
+               case "$hintfile" in
+               ''|' '|none) dflt=none ;;
+               *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
+                       dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
+                       case "$dflt" in
+                       ''|' ') dflt=none ;;
+                       esac
+                       ;;
+               esac
+               ;;
+       *) dflt="$osvers" ;;
+esac
+rp="Operating system version?"
+. ./myread
+case "$ans" in
+none)  osvers='' ;;
+*) osvers="$ans" ;;
+esac
+
 : who configured the system
-cf_time=`$date 2>&1`
-(logname > .temp) >/dev/null 2>&1
-$test -s .temp || (whoami > .temp) >/dev/null 2>&1
-$test -s .temp || echo unknown > .temp
-cf_by=`$cat .temp`
-$rm -f .temp
+cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
+cf_by=`(logname) 2>/dev/null`
+case "$cf_by" in
+"")
+       cf_by=`(whoami) 2>/dev/null`
+       case "$cf_by" in
+       "") cf_by=unknown ;;
+       esac ;;
+esac
+
+: set up the script used to warn in case of inconsistency
+cat <<EOS >whoa
+$startsh
+EOS
+cat <<'EOSC' >>whoa
+dflt=y
+echo " "
+echo "*** WHOA THERE!!! ***" >&4
+echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
+rp="    Keep the $hint value?"
+. ./myread
+case "$ans" in
+y) td=$was; tu=$was;;
+esac
+EOSC
+
+: function used to set $1 to $val
+setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
+case "$val$was" in
+$define$undef) . ./whoa; eval "$var=\$td";;
+$undef$define) . ./whoa; eval "$var=\$tu";;
+*) eval "$var=$val";;
+esac'
+
+cat <<EOM
+
+Perl can be built to take advantage of threads, on some systems.
+To do so, Configure must be run with -Dusethreads.
+(See README.threads for details.)
+EOM
+case "$usethreads" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Build a threading Perl?'
+. ./myread
+case "$ans" in
+y|Y)   val="$define" ;;     
+*)      val="$undef" ;;
+esac
+set usethreads
+eval $setvar 
+: Look for a hint-file generated 'call-back-unit'.  Now that the
+: user has specified the compiler, we may need to set or change some
+: other defaults.
+if $test -f usethreads.cbu; then
+    . ./usethreads.cbu
+fi
+case "$d_oldpthreads" in
+'')    : Configure tests would be welcome here.  For now, assume undef.
+       val="$undef" ;;
+*)     val="$d_oldpthreads" ;;
+esac
+set d_oldpthreads
+eval $setvar
 
 : determine the architecture name
 echo " "
@@ -1887,7 +2284,8 @@ if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
        tarch=`arch`"-$osname"
 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
        if uname -m > tmparch 2>&1 ; then
-               tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
+               tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
+                       -e 's/$/'"-$osname/" tmparch`
        else
                tarch="$osname"
        fi
@@ -1908,17 +2306,36 @@ case "$archname" in
 esac
 rp='What is your architecture name'
 . ./myread
-archname="$ans"
+case "$usethreads" in
+$define)  echo "Threads selected." >&4
+          case "$ans" in
+          *-thread) echo "...and architecture name already ends in -thread." >&4
+                    archname="$ans"
+                    ;;
+          *)        archname="$ans-thread"
+                    echo "...setting architecture name to $archname." >&4
+                    ;;
+          esac
+          ;;
+*)        archname="$ans" ;;
+esac
 myarchname="$tarch"
-
 : is AFS running?
 echo " "
-if test -d /afs; then
+case "$afs" in
+$define|true)  afs=true ;;
+$undef|false)  afs=false ;;
+*)     if test -d /afs; then
+               afs=true
+       else
+               afs=false
+       fi
+       ;;
+esac
+if $afs; then
        echo "AFS may be running... I'll be extra cautious then..." >&4
-       afs=true
 else
        echo "AFS does not seem to be running..." >&4
-       afs=false
 fi
 
 : decide how portable to be.  Allow command line overrides.
@@ -1968,7 +2385,10 @@ chmod +x filexp
 $eunicefix filexp
 
 : now set up to get a file name
-cat <<'EOSC' >getfile
+cat <<EOS >getfile
+$startsh
+EOS
+cat <<'EOSC' >>getfile
 tilde=''
 fullpath=''
 already=''
@@ -2282,12 +2702,21 @@ baserev=5.0
 : get the patchlevel
 echo " "
 echo "Getting the current patchlevel..." >&4
-if $test -r ../patchlevel.h;then
-       patchlevel=`awk '/PATCHLEVEL/ {print $3}' < ../patchlevel.h`
+if $test -r $rsrc/patchlevel.h;then
+       patchlevel=`awk '/PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
+       subversion=`awk '/SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
 else
        patchlevel=0
+       subversion=0
 fi
-echo "(You have $package $baserev PL$patchlevel.)"
+$echo $n "(You have $package" $c
+case "$package" in
+"*$baserev")   ;;
+*)             $echo $n " $baserev" $c ;;
+esac
+$echo $n " patchlevel $patchlevel" $c
+test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
+echo ".)"
 
 : set the prefixup variable, to restore leading tilda escape
 prefixup='case "$prefixexp" in
@@ -2300,18 +2729,27 @@ set archlib archlib
 eval $prefixit
 case "$archlib" in
 '')
-       case "$privlib" in
-       '')
-               dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
-               set dflt
-               eval $prefixup
-               ;;
-       *)      version=`echo $baserev $patchlevel | $awk '{print $1 + $2/1000.0}'`
-               dflt="$privlib/$archname/$version"
-               ;;
-       esac
+    case "$privlib" in
+    '')        dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+       set dflt
+       eval $prefixup
+       ;;
+    *) if test 0 -eq "$subversion"; then
+           version=`LC_ALL=C; export LC_ALL; \
+                    echo $baserev $patchlevel | \
+                    $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
+       else
+           version=`LC_ALL=C; export LC_ALL; \
+                    echo $baserev $patchlevel $subversion | \
+                    $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
+       fi
+       dflt="$privlib/$archname/$version"
        ;;
-*) dflt="$archlib";;
+    esac
+    ;;
+*)
+    dflt="$archlib"
+    ;;
 esac
 cat <<EOM
 
@@ -2330,9 +2768,10 @@ archlibexp="$ansexp"
 if $afs; then
        $cat <<EOM
 
-Since you are running AFS, I need to distinguish the directory in which
-private files reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
+Since you are running AFS, I need to distinguish the directory in
+which architecture-dependent library files reside from the directory
+in which they are installed (and from which they are presumably copied
+to the former directory by occult means).
 
 EOM
        case "$installarchlib" in
@@ -2352,106 +2791,206 @@ else
        d_archlib="$define"
 fi
 
-: determine where site specific architecture-dependent libraries go.
-
-set dflt sitearch lib/site_perl/$archname
-eval $prefixit
-$cat <<EOM
-
-The installation process will also create a directory for
-architecture-dependent site-specific extensions and modules.
-
-EOM
-fn=nd~+
-rp='Pathname for the site-specific architecture-dependent library files?'
-. ./getfile
-if $test "X$sitearchexp" != "X$ansexp"; then
-       installsitearch=''
-fi
-sitearch="$ans"
-sitearchexp="$ansexp"
-if $afs; then
-       $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in which
-private files reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
-
-EOM
-       case "$installsitearch" in
-       '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installsitearch";;
-       esac
-       fn=de~
-       rp='Where will private files be installed?'
-       . ./getfile
-       installsitearch="$ans"
-else
-       installsitearch="$sitearchexp"
-fi
-
-: set up the script used to warn in case of inconsistency
-cat <<'EOSC' >whoa
-dflt=y
+: make some quick guesses about what we are up against
 echo " "
-echo "*** WHOA THERE!!! ***" >&4
-echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
-rp="    Keep the $hint value?"
-. ./myread
-case "$ans" in
-y) td=$was; tu=$was;;
-esac
-EOSC
-
-: function used to set $1 to $val
-setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
-case "$val$was" in
-$define$undef) . ./whoa; eval "$var=\$td";;
-$undef$define) . ./whoa; eval "$var=\$tu";;
-*) eval "$var=$val";;
-esac'
-
-: determine where old public architecture dependent libraries might be
-case "$oldarchlib" in
-'')    case "$privlib" in
-       '') ;;
-       *)      dflt="$privlib/$archname"
-               ;;
-       esac
-       ;;
-*)     dflt="$oldarchlib" 
-       ;;
-esac
-if $test ! -d "$dflt/auto"; then
-       dflt=none
-fi
-cat <<EOM
+$echo $n "Hmm...  $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+echo exit 1 >os2
+d_bsd="$undef"
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+       echo "Looks kind of like an OSF/1 system, but we'll see..."
+       echo exit 0 >osf1
+elif test `echo abc | tr a-z A-Z` = Abc ; then
+       xxx=`./loc addbib blurfl $pth`
+       if $test -f $xxx; then
+       echo "Looks kind of like a USG system with BSD features, but we'll see..."
+               echo exit 0 >bsd
+               echo exit 0 >usg
+       else
+               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+                       echo "Looks kind of like an extended USG system, but we'll see..."
+               else
+                       echo "Looks kind of like a USG system, but we'll see..."
+               fi
+               echo exit 0 >usg
+       fi
+elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
+       echo "Looks kind of like a BSD system, but we'll see..."
+       d_bsd="$define"
+       echo exit 0 >bsd
+else
+       echo "Looks kind of like a Version 7 system, but we'll see..."
+       echo exit 0 >v7
+fi
+case "$eunicefix" in
+*unixtovms*)
+       $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+       echo exit 0 >eunice
+       d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
+       ;;
+*)
+       echo " "
+       echo "Congratulations.  You aren't running Eunice."
+       d_eunice="$undef"
+       ;;
+esac
+: Detect OS2.  The p_ variable is set above in the Head.U unit.
+case "$p_" in
+:) ;;
+*)
+       $cat <<'EOI'
+I have the feeling something is not exactly right, however...don't tell me...
+lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
+EOI
+       echo exit 0 >os2
+       ;;
+esac
+if test -f /xenix; then
+       echo "Actually, this looks more like a XENIX system..."
+       echo exit 0 >xenix
+       d_xenix="$define"
+else
+       echo " "
+       echo "It's not Xenix..."
+       d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+       echo "Actually, this looks more like a VENIX system..."
+       echo exit 0 >venix
+else
+       echo " "
+       if ./xenix; then
+               : null
+       else
+               echo "Nor is it Venix..."
+       fi
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix os2
+$eunicefix bsd usg v7 osf1 eunice xenix venix os2
+$rm -f foo
 
-In 5.001, Perl stored architecutre-dependent library files in a library
-with a name such as $privlib/$archname, 
-and this directory contained files from the standard extensions and 
-files from any additional extensions you might have added.  Starting 
-with version 5.002, all the architecture-dependent standard extensions 
-will go into $archlib, 
-while locally-added extensions will go into
-$sitearch.
+: see if setuid scripts can be secure
+$cat <<EOM
+
+Some kernels have a bug that prevents setuid #! scripts from being
+secure.  Some sites have disabled setuid #! scripts because of this.
 
-If you wish Perl to continue to search the old architecture-dependent
-library for your local extensions, give the path to that directory.
-If you do not wish to use your old architecture-dependent library
-files, answer 'none'.
+First let's decide if your kernel supports secure setuid #! scripts.
+(If setuid #! scripts would be secure but have been disabled anyway,
+don't say that they are secure if asked.)
 
 EOM
-fn=dn~
-rp='Directory for your old 5.001 architecture-dependent libraries?'
-. ./getfile
-oldarchlib="$ans"
-oldarchlibexp="$ansexp"
-case "$oldarchlib" in
-''|' ') val="$undef" ;;
-*) val="$define" ;;
+
+val="$undef"
+if $test -d /dev/fd; then
+       echo "#!$ls" >reflect
+       chmod +x,u+s reflect
+       ./reflect >flect 2>&1
+       if $contains "/dev/fd" flect >/dev/null; then
+               echo "Congratulations, your kernel has secure setuid scripts!" >&4
+               val="$define"
+       else
+               $cat <<EOM
+If you are not sure if they are secure, I can check but I'll need a
+username and password different from the one you are using right now.
+If you don't have such a username or don't want me to test, simply
+enter 'none'.
+
+EOM
+               rp='Other username to test security of setuid scripts with?'
+               dflt='none'
+               . ./myread
+               case "$ans" in
+               n|none)
+                       case "$d_suidsafe" in
+                       '')     echo "I'll assume setuid scripts are *not* secure." >&4
+                               dflt=n;;
+                       "$undef")
+                               echo "Well, the $hint value is *not* secure." >&4
+                               dflt=n;;
+                       *)      echo "Well, the $hint value *is* secure." >&4
+                               dflt=y;;
+                       esac
+                       ;;
+               *)
+                       $rm -f reflect flect
+                       echo "#!$ls" >reflect
+                       chmod +x,u+s reflect
+                       echo >flect
+                       chmod a+w flect
+                       echo '"su" will (probably) prompt you for '"$ans's password."
+                       su $ans -c './reflect >flect'
+                       if $contains "/dev/fd" flect >/dev/null; then
+                               echo "Okay, it looks like setuid scripts are secure." >&4
+                               dflt=y
+                       else
+                               echo "I don't think setuid scripts are secure." >&4
+                               dflt=n
+                       fi
+                       ;;
+               esac
+               rp='Does your kernel have *secure* setuid scripts?'
+               . ./myread
+               case "$ans" in
+               [yY]*)  val="$define";;
+               *)      val="$undef";;
+               esac
+       fi
+else
+       echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
+       echo "(That's for file descriptors, not floppy disks.)"
+       val="$undef"
+fi
+set d_suidsafe
+eval $setvar
+
+$rm -f reflect flect
+
+: now see if they want to do setuid emulation
+echo " "
+val="$undef"
+case "$d_suidsafe" in
+"$define")
+       val="$undef"
+       echo "No need to emulate SUID scripts since they are secure here." >& 4
+       ;;
+*)
+       $cat <<EOM
+Some systems have disabled setuid scripts, especially systems where
+setuid scripts cannot be secure.  On systems where setuid scripts have
+been disabled, the setuid/setgid bits on scripts are currently
+useless.  It is possible for $package to detect those bits and emulate
+setuid/setgid in a secure fashion.  This emulation will only work if
+setuid scripts have been disabled in your kernel.
+
+EOM
+       case "$d_dosuid" in
+       "$define") dflt=y ;;
+       *) dflt=n ;;
+       esac
+       rp="Do you want to do setuid/setgid emulation?"
+       . ./myread
+       case "$ans" in
+       [yY]*)  val="$define";;
+       *)      val="$undef";;
+       esac
+       ;;
 esac
-set d_oldarchlib
+set d_dosuid
 eval $setvar
 
 : determine where public executables go
@@ -2486,6 +3025,39 @@ else
        installbin="$binexp"
 fi
 
+
+: Binary compatibility with 5.003 is not possible with 5.004_50 and later.
+if test $patchlevel -gt 4 -o $subversion -ge 50; then
+    d_bincompat3=$undef
+else
+       $cat <<EOM
+
+Perl 5.004 can be compiled for binary compatibility with 5.003.
+If you decide to do so, you will be able to continue using any
+extensions that were compiled for Perl 5.003.  However, binary
+compatibility forces Perl to expose some of its internal symbols
+in the same way that 5.003 did.  So you may have symbol conflicts
+if you embed a binary-compatible Perl in other programs.
+
+EOM
+       case "$d_bincompat3" in
+       "$undef") dflt=n ;;
+       *) dflt=y ;;
+       esac
+       rp='Binary compatibility with Perl 5.003?'
+       . ./myread
+       case "$ans" in
+       y*) val="$define" ;;
+       *)  val="$undef" ;;
+       esac
+       set d_bincompat3
+       eval $setvar
+       case "$d_bincompat3" in
+       "$define") bincompat3=y ;;
+       *) bincompat3=n ;;
+       esac
+fi
+
 : determine where manual pages are on this system
 echo " "
 case "$sysman" in
@@ -2520,23 +3092,20 @@ nroff)
 esac
 echo "If you don't want the manual sources installed, answer 'none'."
 case "$man1dir" in
+' ') dflt=none
+       ;;
 '')
-       lookpath="$prefixexp/man/man1 $prefixexp/man/u_man/man1"
-       lookpath="$lookpath $prefixexp/man/l_man/man1"
-       lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl"
-       lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
-       lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
-       lookpath="$lookpath /usr/man/man.L"
-       man1dir=`./loc . $prefixexp/man/man1 $lookpath`
-       if $test -d "$man1dir"; then
-               dflt="$man1dir"
-       else
-               dflt="$sysman"
-       fi
+       lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
+       lookpath="$lookpath $prefixexp/man/p_man/man1"
+       lookpath="$lookpath $prefixexp/man/u_man/man1"
+       lookpath="$lookpath $prefixexp/man/man.1"
+       case "$sysman" in
+       */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
+       *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
+       esac
        set dflt
        eval $prefixup
        ;;
-' ') dflt=none;;
 *)  dflt="$man1dir"
        ;;
 esac
@@ -2544,7 +3113,7 @@ echo " "
 fn=dn+~
 rp="Where do the main $spackage manual pages (source) go?"
 . ./getfile
-if test "X$man1direxp" != "X$ansexp"; then
+if $test "X$man1direxp" != "X$ansexp"; then
        installman1dir=''
 fi
 man1dir="$ans"
@@ -2581,18 +3150,22 @@ case "$man1dir" in
        ;;
 *)
        rp="What suffix should be used for the main $spackage man pages?"
-       case "$man1dir" in
-       *1)  dflt=1 ;;
-       *1p) dflt=1p ;;
-       *1pm) dflt=1pm ;;
-       *l) dflt=l;;
-       *n) dflt=n;;
-       *o) dflt=o;;
-       *p) dflt=p;;
-       *C) dflt=C;;
-       *L) dflt=L;;
-       *L1) dflt=L1;;
-       *) dflt=1;;
+       case "$man1ext" in
+       '')     case "$man1dir" in
+               *1)  dflt=1 ;;
+               *1p) dflt=1p ;;
+               *1pm) dflt=1pm ;;
+               *l) dflt=l;;
+               *n) dflt=n;;
+               *o) dflt=o;;
+               *p) dflt=p;;
+               *C) dflt=C;;
+               *L) dflt=L;;
+               *L1) dflt=L1;;
+               *) dflt=1;;
+               esac
+               ;;
+       *)      dflt="$man1ext";;
        esac
        . ./myread
        man1ext="$ans"
@@ -2654,7 +3227,6 @@ case "$nroff" in
 nroff)
        $cat <<'EOM'
 However, you don't have nroff, so they're probably useless to you.
-You can use the supplied perldoc script instead.
 EOM
        case "$man3dir" in
        '') man3dir="none";;
@@ -2665,7 +3237,6 @@ case "$d_flexfnam" in
 undef)
        $cat <<'EOM'
 However, your system can't handle the long file names like File::Basename.3. 
-You can use the supplied perldoc script instead.
 EOM
        case "$man3dir" in
        '') man3dir="none";;
@@ -2673,14 +3244,11 @@ EOM
 esac
 
 echo "If you don't want the manual sources installed, answer 'none'."
-: We dont use /usr/local/man/man3 because some man programs will
-: only show the /usr/local/man/man3 contents, and not the system ones,
-: thus man less will show the perl module less.pm, but not the system
-: less command.  We might also conflict with TCL man pages.
-: However, something like /opt/perl/man/man3 is fine.
+prog=`echo $package | $sed 's/-*[0-9.]*$//'`
 case "$man3dir" in
 '')    case "$prefix" in 
-       *perl*) dflt=`echo $man1dir | $sed 's/man1/man3/g'` ;;
+       *$prog*) dflt=`echo $man1dir | 
+                       $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
        *)      dflt="$privlib/man/man3" ;;
        esac
        ;;
@@ -2690,7 +3258,7 @@ esac
 echo " "
 
 fn=dn+~
-rp="Where do the $spackage library man pages (source) go?"
+rp="Where do the $package library man pages (source) go?"
 . ./getfile
 if test "X$man3direxp" != "X$ansexp"; then
        installman3dir=''
@@ -2729,19 +3297,23 @@ case "$man3dir" in
        man3ext='0'
        ;;
 *)
-       rp="What suffix should be used for the $spackage library man pages?"
-       case "$man3dir" in
-       *3)  dflt=3 ;;
-       *3p) dflt=3p ;;
-       *3pm) dflt=3pm ;;
-       *l) dflt=l;;
-       *n) dflt=n;;
-       *o) dflt=o;;
-       *p) dflt=p;;
-       *C) dflt=C;;
-       *L) dflt=L;;
-       *L3) dflt=L3;;
-       *) dflt=3;;
+       rp="What suffix should be used for the $package library man pages?"
+       case "$man3ext" in
+       '')     case "$man3dir" in
+               *3)  dflt=3 ;;
+               *3p) dflt=3p ;;
+               *3pm) dflt=3pm ;;
+               *l) dflt=l;;
+               *n) dflt=n;;
+               *o) dflt=o;;
+               *p) dflt=p;;
+               *C) dflt=C;;
+               *L) dflt=L;;
+               *L3) dflt=L3;;
+               *) dflt=3;;
+               esac
+               ;;
+       *)      dflt="$man3ext";;
        esac
        . ./myread
        man3ext="$ans"
@@ -2801,45 +3373,101 @@ else
        installscript="$scriptdirexp"
 fi
 
-: determine perl absolute location
-case "$perlpath" in
-'')    perlpath=$binexp/perl ;;
+: determine where site specific libraries go.
+set sitelib sitelib
+eval $prefixit
+case "$sitelib" in
+'')
+       prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+       dflt="$privlib/site_$prog" ;;
+*)     dflt="$sitelib" ;;
 esac
+$cat <<EOM
 
-: figure out how to guarantee perl startup
-case "$startperl" in
-'')
-       case "$sharpbang" in
-       *!)
-               $cat <<EOH
+The installation process will also create a directory for
+site-specific extensions and modules.  Some users find it convenient
+to place all local files in this directory rather than in the main
+distribution directory.
 
-I can use the #! construct to start perl on your system. This will
-make startup of perl scripts faster, but may cause problems if you
-want to share those scripts and perl is not in a standard place
-($perlpath) on all your platforms. The alternative is to force
-a shell by starting the script with a single ':' character.
+EOM
+fn=d~+
+rp='Pathname for the site-specific library files?'
+. ./getfile
+if $test "X$sitelibexp" != "X$ansexp"; then
+       installsitelib=''
+fi
+sitelib="$ans"
+sitelibexp="$ansexp"
+if $afs; then
+       $cat <<EOM
 
-EOH
-               dflt=y
-               rp='Shall I use #! to start up perl?'
-               . ./myread
-               case "$ans" in
-               y*|Y*) startperl="#!$perlpath";;
-               *) startperl=": # use perl";;
-               esac
-               ;;
-       *) startperl=": # use perl"
-               ;;
+Since you are running AFS, I need to distinguish the directory in
+which site-specific files reside from the directory in which they are
+installed (and from which they are presumably copied to the former
+directory by occult means).
+
+EOM
+       case "$installsitelib" in
+       '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installsitelib";;
        esac
-       ;;
+       fn=de~
+       rp='Where will site-specific files be installed?'
+       . ./getfile
+       installsitelib="$ans"
+else
+       installsitelib="$sitelibexp"
+fi
+
+: determine where site specific architecture-dependent libraries go.
+xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
+: xxx is usuually lib/site_perl/archname.
+set sitearch sitearch none
+eval $prefixit
+case "$sitearch" in
+'')    dflt="$sitelib/$archname" ;;
+*)     dflt="$sitearch" ;;
 esac
-echo "I'll use $startperl to start perl scripts."
+$cat <<EOM
 
-: see what memory models we can support
-case "$models" in
-'')
-       $cat >pdp11.c <<'EOP'
-main() {
+The installation process will also create a directory for
+architecture-dependent site-specific extensions and modules.
+
+EOM
+fn=nd~+
+rp='Pathname for the site-specific architecture-dependent library files?'
+. ./getfile
+if $test "X$sitearchexp" != "X$ansexp"; then
+       installsitearch=''
+fi
+sitearch="$ans"
+sitearchexp="$ansexp"
+if $afs; then
+       $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in
+which site-specific architecture-dependent library files reside from
+the directory in which they are installed (and from which they are
+presumably copied to the former directory by occult means).
+
+EOM
+       case "$installsitearch" in
+       '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installsitearch";;
+       esac
+       fn=de~
+       rp='Where will site-specific architecture-dependent files be installed?'
+       . ./getfile
+       installsitearch="$ans"
+else
+       installsitearch="$sitearchexp"
+fi
+
+: see what memory models we can support
+case "$models" in
+'')
+       $cat >pdp11.c <<'EOP'
+main() {
 #ifdef pdp11
        exit(0);
 #else
@@ -2847,8 +3475,8 @@ main() {
 #endif
 }
 EOP
-       cc -o pdp11 pdp11.c >/dev/null 2>&1
-       if ./pdp11 2>/dev/null; then
+       ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
+       if $test -f pdp11 && ./pdp11 2>/dev/null; then
                dflt='unsplit split'
        else
                tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
@@ -2882,6 +3510,8 @@ put the appropriate flags later when it asks you for other cc and ld flags.
 Venix systems may wish to put "none" and let the compiler figure things out.
 (In the following question multiple model names should be space separated.)
 
+The default for most systems is "none".
+
 EOM
 rp="Which memory models are supported?"
 . ./myread
@@ -2977,86 +3607,7 @@ none)
        echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
        ;;
 esac
-
-: make some quick guesses about what we are up against
-echo " "
-$echo $n "Hmm...  $c"
-echo exit 1 >bsd
-echo exit 1 >usg
-echo exit 1 >v7
-echo exit 1 >osf1
-echo exit 1 >eunice
-echo exit 1 >xenix
-echo exit 1 >venix
-d_bsd="$undef"
-$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
-if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
-then
-       echo "Looks kind of like an OSF/1 system, but we'll see..."
-       echo exit 0 >osf1
-elif test `echo abc | tr a-z A-Z` = Abc ; then
-       xxx=`./loc addbib blurfl $pth`
-       if $test -f $xxx; then
-       echo "Looks kind of like a USG system with BSD features, but we'll see..."
-               echo exit 0 >bsd
-               echo exit 0 >usg
-       else
-               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
-                       echo "Looks kind of like an extended USG system, but we'll see..."
-               else
-                       echo "Looks kind of like a USG system, but we'll see..."
-               fi
-               echo exit 0 >usg
-       fi
-elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
-       echo "Looks kind of like a BSD system, but we'll see..."
-       d_bsd="$define"
-       echo exit 0 >bsd
-else
-       echo "Looks kind of like a Version 7 system, but we'll see..."
-       echo exit 0 >v7
-fi
-case "$eunicefix" in
-*unixtovms*)
-       $cat <<'EOI'
-There is, however, a strange, musty smell in the air that reminds me of
-something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
-EOI
-       echo exit 0 >eunice
-       d_eunice="$define"
-: it so happens the Eunice I know will not run shell scripts in Unix format
-       ;;
-*)
-       echo " "
-       echo "Congratulations.  You aren't running Eunice."
-       d_eunice="$undef"
-       ;;
-esac
-if test -f /xenix; then
-       echo "Actually, this looks more like a XENIX system..."
-       echo exit 0 >xenix
-       d_xenix="$define"
-else
-       echo " "
-       echo "It's not Xenix..."
-       d_xenix="$undef"
-fi
-chmod +x xenix
-$eunicefix xenix
-if test -f /venix; then
-       echo "Actually, this looks more like a VENIX system..."
-       echo exit 0 >venix
-else
-       echo " "
-       if ./xenix; then
-               : null
-       else
-               echo "Nor is it Venix..."
-       fi
-fi
-chmod +x bsd usg v7 osf1 eunice xenix venix
-$eunicefix bsd usg v7 osf1 eunice xenix venix
-$rm -f foo
+$rm -f pdp11.* pdp11
 
 : see if we need a special compiler
 echo " "
@@ -3079,8 +3630,9 @@ if ./usg; then
                esac;;
        *)  dflt="$cc";;
        esac
-       $cat <<'EOM'
-On some systems the default C compiler will not resolve multiple global
+       case "$dflt" in
+       *M*)    $cat <<'EOM'
+On some older systems the default C compiler will not resolve multiple global
 references that happen to have the same name.  On some such systems the "Mcc"
 command may be used to force these to be resolved.  On other systems a "cc -M"
 command is required.  (Note that the -M flag on other systems indicates a
@@ -3088,7 +3640,9 @@ memory model to use!) If you have the Gnu C compiler, you might wish to use
 that instead.
 
 EOM
-       rp="What command will force resolution on this system?"
+       ;;
+       esac
+       rp="Use which C compiler?"
        . ./myread
        cc="$ans"
 else
@@ -3100,6 +3654,12 @@ else
        . ./myread
        cc="$ans"
 fi
+: Look for a hint-file generated 'call-back-unit'.  Now that the
+: user has specified the compiler, we may need to set or change some
+: other defaults.
+if $test -f cc.cbu; then
+    . ./cc.cbu
+fi
 echo " "
 echo "Checking for GNU cc in disguise and/or its version number..." >&4
 $cat >gccvers.c <<EOM
@@ -3168,13 +3728,13 @@ else
 fi
 chmod +x mips
 $eunicefix mips
-echo " "
 case "$usrinc" in
 '') ;;
 *) dflt="$usrinc";;
 esac
 case "$xxx_prompt" in
 y)     fn=d/
+       echo " "
        rp='Where are the include files you want to use?'
        . ./getfile
        usrinc="$ans"
@@ -3183,69 +3743,263 @@ y)     fn=d/
        ;;
 esac
 
-: see how we invoke the C preprocessor
-echo " "
-echo "Now, how can we feed standard input to your C preprocessor..." >&4
-cat <<'EOT' >testcpp.c
-#define ABC abc
-#define XYZ xyz
-ABC.XYZ
-EOT
-cd ..
-echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
-chmod 755 cppstdin
-wrapper=`pwd`/cppstdin
-ok='false'
-cd UU
+: Set private lib path
+case "$plibpth" in
+'') if ./mips; then
+               plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+       fi;;
+esac
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$loclibpth $plibpth $glibpth";;
+*) dlist="$libpth";;
+esac
 
-if $test "X$cppstdin" != "X" && \
-       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-then
-       echo "You used to use $cppstdin $cppminus so we'll use that again."
-       case "$cpprun" in
-       '') echo "But let's see if we can live without a wrapper..." ;;
-       *)
-               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
-                       ok='true'
-               else
-                       echo "(However, $cpprun $cpplast does not work, let's see...)"
-               fi
-               ;;
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
+do
+    if $test -d $xxx; then
+               case " $libpth " in
+               *" $xxx "*) ;;
+               *) libpth="$libpth $xxx";;
+               esac
+    fi
+done
+$cat <<'EOM'
+
+Some systems have incompatible or broken versions of libraries.  Among
+the directories listed in the question below, please remove any you
+know not to be holding relevant libraries, and add any that are needed.
+Say "none" for none.
+
+EOM
+case "$libpth" in
+'') dflt='none';;
+*)
+       set X $libpth
+       shift
+       dflt=${1+"$@"}
+       ;;
+esac
+rp="Directories to use for library searches?"
+. ./myread
+case "$ans" in
+none) libpth=' ';;
+*) libpth="$ans";;
+esac
+
+: compute shared library extension
+case "$so" in
+'')
+       if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
+               dflt='sl'
+       else
+               dflt='so'
+       fi
+       ;;
+*) dflt="$so";;
+esac
+$cat <<EOM
+
+On some systems, shared libraries may be available.  Answer 'none' if
+you want to suppress searching of shared libraries for the remaining
+of this configuration.
+
+EOM
+rp='What is the file extension used for shared libraries?'
+. ./myread
+so="$ans"
+
+: Define several unixisms.
+: Hints files or command line option can be used to override them.
+: The convoluted testing is in case hints files set either the old
+: or the new name.
+case "$_exe" in
+'')    case "$exe_ext" in
+    '')        ;;
+       *)      _exe="$exe_ext" ;;
        esac
-else
-       case "$cppstdin" in
-       '') ;;
-       *)
-               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
-               ;;
+       ;;
+esac
+case "$_a" in
+'')    case "$lib_ext" in
+    '')        _a='.a';;
+       *)      _a="$lib_ext" ;;
        esac
-fi
+       ;;
+esac
+case "$_o" in
+'') case "$obj_ext" in
+       '')     _o='.o';;
+       *)      _o="$obj_ext";;
+       esac
+       ;;
+esac
+case "$p_" in
+'') case "$path_sep" in
+       '')     p_=':';;
+       *)      p_="$path_sep";;
+       esac
+       ;;
+esac
+exe_ext=$_exe
+lib_ext=$_a
+obj_ext=$_o
+path_sep=$p_
 
-if $ok; then
-       : nothing
-elif echo 'Maybe "'"$cc"' -E" will work...'; \
-       $cc -E <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
-       $cc -E - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='-';
-elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
-       $cc -P <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yipee, that works!"
-       x_cpp="$cc -P"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+: Which makefile gets called first.  This is used by make depend.
+case "$firstmakefile" in
+'') firstmakefile='makefile';;
+esac
+
+: Looking for optional libraries
+echo " "
+echo "Checking for optional libraries..." >&4
+case "$libs" in
+' '|'') dflt='';;
+*) dflt="$libs";;
+esac
+case "$libswanted" in
+'') libswanted='c_s';;
+esac
+for thislib in $libswanted; do
+       
+       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib (shared)."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
+               echo "Found -l$thislib (shared)."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l${thislib}_s."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l${thislib}_s";;
+               esac
+       elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       else
+               echo "No -l$thislib."
+       fi
+done
+set X $dflt
+shift
+dflt="$*"
+case "$libs" in
+'') dflt="$dflt";;
+*) dflt="$libs";;
+esac
+case "$dflt" in
+' '|'') dflt='none';;
+esac
+
+$cat <<EOM
+Some versions of Unix support shared libraries, which make executables smaller
+but make load time slightly longer.
+
+On some systems, mostly System V Release 3's, the shared library is included
+by putting the option "-lc_s" as the last thing on the cc command line when
+linking.  Other systems use shared libraries by default.  There may be other
+libraries needed to compile $package on your machine as well.  If your system
+needs the "-lc_s" option, include it here.  Include any other special libraries
+here as well.  Say "none" for none.
+EOM
+
+echo " "
+rp="Any additional libraries?"
+. ./myread
+case "$ans" in
+none) libs=' ';;
+*) libs="$ans";;
+esac
+
+: see how we invoke the C preprocessor
+echo " "
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+chmod 755 cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
+
+if $test "X$cppstdin" != "X" && \
+       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+       echo "You used to use $cppstdin $cppminus so we'll use that again."
+       case "$cpprun" in
+       '') echo "But let's see if we can live without a wrapper..." ;;
+       *)
+               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+                       ok='true'
+               else
+                       echo "(However, $cpprun $cpplast does not work, let's see...)"
+               fi
+               ;;
+       esac
+else
+       case "$cppstdin" in
+       '') ;;
+       *)
+               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+               ;;
+       esac
+fi
+
+if $ok; then
+       : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+       $cc -E <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+       $cc -E - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+       $cc -P <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yipee, that works!"
+       x_cpp="$cc -P"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
        $cc -P - <testcpp.c >testcpp.out 2>&1; \
        $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
        echo "At long last!"
@@ -3321,61 +4075,15 @@ case "$cppstdin" in
 esac
 $rm -f testcpp.c testcpp.out
 
-: Set private lib path
-case "$plibpth" in
-'') if ./mips; then
-               plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
-       fi;;
-esac
-case "$libpth" in
-' ') dlist='';;
-'') dlist="$loclibpth $plibpth $glibpth";;
-*) dlist="$libpth";;
-esac
-
-: Now check and see which directories actually exist, avoiding duplicates
-libpth=''
-for xxx in $dlist
-do
-    if $test -d $xxx; then
-               case " $libpth " in
-               *" $xxx "*) ;;
-               *) libpth="$libpth $xxx";;
-               esac
-    fi
-done
-$cat <<'EOM'
-
-Some systems have incompatible or broken versions of libraries.  Among
-the directories listed in the question below, please remove any you
-know not to be holding relevant libraries, and add any that are needed.
-Say "none" for none.
-
-EOM
-case "$libpth" in
-'') dflt='none';;
-*)
-       set X $libpth
-       shift
-       dflt=${1+"$@"}
-       ;;
-esac
-rp="Directories to use for library searches?"
-. ./myread
-case "$ans" in
-none) libpth=' ';;
-*) libpth="$ans";;
-esac
-
 : determine optimize, if desired, or use for debug flag also
 case "$optimize" in
-' ') dflt='none';;
+' '|$undef) dflt='none';;
 '') dflt='-O';;
 *) dflt="$optimize";;
 esac
 $cat <<EOH
 
-Some C compilers have problems with their optimizers, by default, $package
+Some C compilers have problems with their optimizers.  By default, $package
 compiles with the -O flag to use the optimizer.  Alternately, you might want
 to use the symbolic debugger, which uses the -g flag (on traditional Unix
 systems).  Either flag can be specified here.  To use neither flag, specify
@@ -3390,8 +4098,10 @@ case "$optimize" in
 esac
 
 dflt=''
-case "$ccflags" in
-'')    
+: We will not override a previous value, but we might want to
+: augment a hint file
+case "$hint" in
+none|recommended)
        case "$gccversion" in
        1*) dflt='-fpcc-struct-return' ;;
        esac
@@ -3443,24 +4153,22 @@ if ./osf1; then
 else
        set signal.h LANGUAGE_C; eval $inctest
 fi
-set signal.h NO_PROTOTYPE; eval $inctest
-set signal.h _NO_PROTO; eval $inctest
 
-case "$dflt" in
-'') dflt=none;;
-esac
-case "$ccflags" in
-'') ;;
+case "$hint" in
+none|recommended) dflt="$ccflags $dflt" ;;
 *) dflt="$ccflags";;
 esac
+
+case "$dflt" in
+''|' ') dflt=none;;
+esac
 $cat <<EOH
 
 Your C compiler may want other flags.  For this question you should include
 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
 but you should NOT include libraries or ld flags like -lwhatever.  If you
 want $package to honor its debug switch, you should include -DDEBUGGING here.
-Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
--DHIDEMYMALLOC or -DCRIPPLED_CC.
+Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
 
 To use no flags, specify the word "none".
 
@@ -3504,9 +4212,9 @@ EOM
                -*) ftry="$flag";;
                *) ftry="$previous $flag";;
                esac
-               if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
+               if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
                        >cpp1.out 2>/dev/null && \
-                       $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
+                       $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
                        >cpp2.out 2>/dev/null && \
                        $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
                        $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
@@ -3528,7 +4236,6 @@ EOM
 esac
 
 : flags used in final linking phase
-
 case "$ldflags" in
 '') if ./venix; then
                dflt='-i -z'
@@ -3547,7 +4254,7 @@ for thislibdir in $libpth; do
        case " $loclibpth " in
        *" $thislibdir "*)
                case "$dflt " in 
-               "-L$thislibdir ") ;;
+               *"-L$thislibdir "*) ;;
                *)  dflt="$dflt -L$thislibdir" ;;
                esac
                ;;
@@ -3583,7 +4290,7 @@ rmlist="$rmlist pdp11"
 : coherency check
 echo " "
 echo "Checking your choice of C compiler and flags for coherency..." >&4
-set X $cc $optimize $ccflags $ldflags try.c -o try
+set X $cc $optimize $ccflags $ldflags -o try try.c $libs
 shift
 $cat >try.msg <<EOM
 I've tried to compile and run a simple program with:
@@ -3596,12 +4303,29 @@ and I got the following output:
 EOM
 $cat > try.c <<'EOF'
 #include <stdio.h>
-main() { exit(0); }
+main() { printf("Ok\n"); exit(0); }
 EOF
 dflt=y
-if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then
+if sh -c "$cc $optimize $ccflags $ldflags -o try try.c $libs" >>try.msg 2>&1; then
        if sh -c './try' >>try.msg 2>&1; then
-               dflt=n
+               xxx=`./try`
+               case "$xxx" in
+               "Ok") dflt=n ;;
+               *)      echo 'The program compiled OK, but produced no output.' >> try.msg
+                       case " $libs " in
+                       *" -lsfio "*)
+                               cat >> try.msg <<'EOQS'
+If $libs contains -lsfio, and sfio is mis-configured, then it
+sometimes (apparently) runs and exits with a 0 status, but with no
+output!  It may have to do with sfio's use of _exit vs. exit.
+
+EOQS
+                               rp="You have a big problem.  Shall I abort Configure"
+                               dflt=y
+                               ;;
+                       esac
+                       ;;
+               esac
        else
                echo "The program compiled OK, but exited with status $?." >>try.msg
                rp="You have a problem.  Shall I abort Configure"
@@ -3614,7 +4338,7 @@ else
 fi
 case "$dflt" in
 y)
-       $cat try.msg
+       $cat try.msg >&4
        case "$knowitall" in
        '')
                echo "(The supplied flags might be incorrect with this C compiler.)"
@@ -3634,145 +4358,75 @@ n) echo "OK, that should do.";;
 esac
 $rm -f try try.* core
 
-: compute shared library extension
-case "$so" in
+: define a shorthand compile call
+compile='
+mc_file=$1;
+shift;
+$cc $optimize $ccflags $ldflags -o ${mc_file}$_exe $* ${mc_file}.c $libs > /dev/null 2>&1;'
+
+echo " "
+echo "Checking for GNU C Library..." >&4
+cat >gnulibc.c <<EOM
+int
+main()
+{
+       return __libc_main();
+}
+EOM
+set gnulibc
+if eval $compile && \
+  ./gnulibc | $contains '^GNU C Library' >/dev/null 2>&1; then
+       val="$define"
+       echo "You are using the GNU C Library"
+else
+       val="$undef"
+       echo "You are not using the GNU C Library"
+fi
+$rm -f gnulibc*
+set d_gnulibc
+eval $setvar
+
+: see if nm is to be used to determine whether a symbol is defined or not
+case "$usenm" in
 '')
-       if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
-               dflt='sl'
-       else
-               dflt='so'
-       fi
+       case "$d_gnulibc" in
+       $define)
+               dflt=n
+               ;;
+       *)
+               dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
+               if $test $dflt -gt 20; then
+                       dflt=y
+               else
+                       dflt=n
+               fi
+               ;;
+       esac
+       ;;
+*)
+       case "$usenm" in
+       true) dflt=y;;
+       *) dflt=n;;
+       esac
        ;;
-*) dflt="$so";;
 esac
 $cat <<EOM
 
-On some systems, shared libraries may be available.  Answer 'none' if
-you want to suppress searching of shared libraries for the remaining
-of this configuration.
+I can use '$nm' to extract the symbols from your C libraries. This is a time
+consuming task which may generate huge output on the disk (up to 3 megabytes)
+but that should make the symbols extraction faster. The alternative is to skip
+the 'nm' extraction part and to compile a small test program instead to
+determine whether each symbol is present. If you have a fast C compiler and/or
+if your 'nm' output cannot be parsed, this may be the best solution.
+You shouldn't let me use 'nm' if you have the GNU C Library.
 
 EOM
-rp='What is the file extension used for shared libraries?'
+rp="Shall I use $nm to extract C symbols from the libraries?"
 . ./myread
-so="$ans"
-
-: Looking for optional libraries
-echo " "
-echo "Checking for optional libraries..." >&4
-case "$libs" in
-' '|'') dflt='';;
-*) dflt="$libs";;
-esac
-case "$libswanted" in
-'') libswanted='c_s';;
-esac
-for thislib in $libswanted; do
-       
-       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib (shared)."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
-               echo "Found -l$thislib (shared)."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l${thislib}_s."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l${thislib}_s";;
-               esac
-       elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       else
-               echo "No -l$thislib."
-       fi
-done
-set X $dflt
-shift
-dflt="$*"
-case "$libs" in
-'') dflt="$dflt";;
-*) dflt="$libs";;
-esac
-case "$dflt" in
-' '|'') dflt='none';;
-esac
-
-$cat <<EOM
-Some versions of Unix support shared libraries, which make executables smaller
-but make load time slightly longer.
-
-On some systems, mostly newer Unix System V's, the shared library is included
-by putting the option "-lc_s" as the last thing on the cc command line when
-linking.  Other systems use shared libraries by default.  There may be other
-libraries needed to compile $package on your machine as well.  If your system
-needs the "-lc_s" option, include it here.  Include any other special libraries
-here as well.  Say "none" for none.
-EOM
-
-echo " "
-rp="Any additional libraries?"
-. ./myread
-case "$ans" in
-none) libs=' ';;
-*) libs="$ans";;
-esac
-
-: see if nm is to be used to determine whether a symbol is defined or not
-case "$usenm" in
-'')
-       dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
-       if $test $dflt -gt 20; then
-               dflt=y
-       else
-               dflt=n
-       fi
-       ;;
-*)
-       case "$usenm" in
-       true) dflt=y;;
-       *) dflt=n;;
-       esac
-       ;;
-esac
-$cat <<EOM
-
-I can use 'nm' to extract the symbols from your C libraries. This is a time
-consuming task which may generate huge output on the disk (up to 3 megabytes)
-but that should make the symbols extraction faster. The alternative is to skip
-the 'nm' extraction part and to compile a small test program instead to
-determine whether each symbol is present. If you have a fast C compiler and/or
-if your 'nm' output cannot be parsed, this may be the best solution.
-
-EOM
-rp='Shall I use nm to extract C symbols from the libraries?'
-. ./myread
-case "$ans" in
-n|N) usenm=false;;
-*) usenm=true;;
-esac
+case "$ans" in
+n|N) usenm=false;;
+*) usenm=true;;
+esac
 
 runnm=$usenm
 case "$reuseval" in
@@ -3782,16 +4436,31 @@ esac
 : nm options which may be necessary
 case "$nm_opt" in
 '') if $test -f /mach_boot; then
-               nm_opt=''
+               nm_opt=''       # Mach
        elif $test -d /usr/ccs/lib; then
-               nm_opt='-p'
+               nm_opt='-p'     # Solaris (and SunOS?)
        elif $test -f /dgux; then
-               nm_opt='-p'
+               nm_opt='-p'     # DG-UX
+       elif $test -f /lib64/rld; then
+               nm_opt='-p'     # 64-bit Irix
        else
                nm_opt=''
        fi;;
 esac
 
+: nm options which may be necessary for shared libraries but illegal
+: for archive libraries.  Thank you, Linux.
+case "$nm_so_opt" in
+'')    case "$myuname" in
+       *linux*)
+               if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
+                       nm_so_opt='--dynamic'
+               fi
+               ;;
+       esac
+       ;;
+esac
+
 case "$runnm" in
 true)
 : get list of predefined functions in a handy place
@@ -3799,7 +4468,7 @@ echo " "
 case "$libc" in
 '') libc=unknown
        case "$libs" in
-       *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
+       *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
        esac
        ;;
 esac
@@ -3817,13 +4486,15 @@ case "$libs" in
                        :
                elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
                        :
-               elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
+               elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
                        :
                elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
                        :
                elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
                        :
-               elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
+               elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
                        :
                else
                        try=''
@@ -3838,21 +4509,23 @@ esac
 xxx=normal
 case "$libc" in
 unknown)
-       set /usr/ccs/lib/libc.$so
-       $test -r $1 || set /usr/lib/libc.$so
-       $test -r $1 || set /usr/shlib/libc.$so
-       $test -r $1 || \
-               set `echo blurfl; echo /usr/lib/libc.$so.[0-9]* | \
-               tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e '
-                       h
-                       s/[0-9][0-9]*/0000&/g
-                       s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
-                       G
-                       s/\n/ /' | \
-                sort | $sed -e 's/^.* //'`
-       eval set \$$#
-       $test -r $1 || set /lib/libc.$so
-       $test -r $1 || set /lib/libsys_s.a
+       set /lib/libc.$so
+       for xxx in $libpth; do
+               $test -r $1 || set $xxx/libc.$so
+               : The messy sed command sorts on library version numbers.
+               $test -r $1 || \
+                       set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
+                       tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e '
+                               h
+                               s/[0-9][0-9]*/0000&/g
+                               s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
+                               G
+                               s/\n/ /' | \
+                        sort | $sed -e 's/^.* //'`
+               eval set \$$#
+       done
+       $test -r $1 || set /usr/ccs/lib/libc.$so
+       $test -r $1 || set /lib/libsys_s$_a
        ;;
 *)
        set blurfl
@@ -3871,25 +4544,25 @@ elif $test -r /lib/libc && $test -r /lib/clib; then
        fi
 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
        echo "Your C library seems to be in $libc, as you said before."
-elif $test -r $incpath/usr/lib/libc.a; then
-       libc=$incpath/usr/lib/libc.a;
+elif $test -r $incpath/usr/lib/libc$_a; then
+       libc=$incpath/usr/lib/libc$_a;
        echo "Your C library seems to be in $libc.  That's fine."
-elif $test -r /lib/libc.a; then
-       libc=/lib/libc.a;
+elif $test -r /lib/libc$_a; then
+       libc=/lib/libc$_a;
        echo "Your C library seems to be in $libc.  You're normal."
 else
-       if tans=`./loc libc.a blurfl/dyick $libpth`; $test -r "$tans"; then
+       if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
                :
        elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
                libnames="$libnames "`./loc clib blurfl/dyick $libpth`
        elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
                :
-       elif tans=`./loc Slibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
+       elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
                :
-       elif tans=`./loc Mlibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
+       elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
                :
        else
-               tans=`./loc Llibc.a blurfl/dyick $xlibpth`
+               tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
        fi
        if $test -r "$tans"; then
                echo "Your C library seems to be in $tans, of all places."
@@ -3937,13 +4610,19 @@ $sed 's/^/      /' libnames >&4
 echo " "
 $echo $n "This may take a while...$c" >&4
 
-nm $nm_opt $* 2>/dev/null >libc.tmp
+for file in $*; do
+       case $file in
+       *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
+       *) $nm $nm_opt $file 2>/dev/null;;
+       esac
+done >libc.tmp
+
 $echo $n ".$c"
 $grep fprintf libc.tmp > libc.ptf
 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
 xxx='[ADTSIW]'
-if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx //p'";\
+if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
@@ -3980,6 +4659,10 @@ elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
+elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
+       eval $xscan;\
+       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+               eval $xrun
 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
@@ -3988,8 +4671,12 @@ elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
+elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
+       eval $xscan;\
+       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+               eval $xrun
 else
-       nm -p $* 2>/dev/null >libc.tmp
+       $nm -p $* 2>/dev/null >libc.tmp
        $grep fprintf libc.tmp > libc.ptf
        if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
                eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
@@ -3998,22 +4685,22 @@ else
                eval $xrun
        else
                echo " "
-               echo "nm didn't seem to work right. Trying ar instead..." >&4
+               echo "$nm didn't seem to work right. Trying ar instead..." >&4
                com=''
                if ar t $libc > libc.tmp; then
                        for thisname in $libnames; do
                                ar t $thisname >>libc.tmp
                        done
-                       $sed -e 's/\.o$//' < libc.tmp > libc.list
+                       $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
                        echo "Ok." >&4
                else
                        echo "ar didn't seem to work right." >&4
                        echo "Maybe this is a Cray...trying bld instead..." >&4
-                       if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list
+                       if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
                        then
                                for thisname in $libnames; do
                                        bld t $libnames | \
-                                       $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
+                                       $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
                                        ar t $thisname >>libc.tmp
                                done
                                echo "Ok." >&4
@@ -4034,6 +4721,100 @@ fi
 esac
 $rm -f libnames libpath
 
+: determine filename position in cpp output
+echo " "
+echo "Computing filename position in cpp output for #include directives..." >&4
+echo '#include <stdio.h>' > foo.c
+$cat >fieldn <<EOF
+$startsh
+$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
+$grep '^[      ]*#.*stdio\.h' | \
+while read cline; do
+       pos=1
+       set \$cline
+       while $test \$# -gt 0; do
+               if $test -r \`echo \$1 | $tr -d '"'\`; then
+                       echo "\$pos"
+                       exit 0
+               fi
+               shift
+               pos=\`expr \$pos + 1\`
+       done
+done
+EOF
+chmod +x fieldn
+fieldn=`./fieldn`
+$rm -f foo.c fieldn
+case $fieldn in
+'') pos='???';;
+1) pos=first;;
+2) pos=second;;
+3) pos=third;;
+*) pos="${fieldn}th";;
+esac
+echo "Your cpp writes the filename in the $pos field of the line."
+
+: locate header file
+$cat >findhdr <<EOF
+$startsh
+wanted=\$1
+name=''
+if test -f $usrinc/\$wanted; then
+       echo "$usrinc/\$wanted"
+       exit 0
+fi
+awkprg='{ print \$$fieldn }'
+echo "#include <\$wanted>" > foo\$\$.c
+$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
+$grep "^[      ]*#.*\$wanted" | \
+while read cline; do
+       name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
+       case "\$name" in
+       */\$wanted) echo "\$name"; exit 0;;
+       *) name='';;
+       esac;
+done;
+$rm -f foo\$\$.c;
+case "\$name" in
+'') exit 1;;
+esac
+EOF
+chmod +x findhdr
+
+: define an alternate in-header-list? function
+inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
+cont=true; xxf="echo \"<\$1> found.\" >&4";
+case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
+*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
+esac;
+case $# in 4) instead=instead;; *) instead="at last";; esac;
+while $test "$cont"; do
+       xxx=`./findhdr $1`
+       var=$2; eval "was=\$$2";
+       if $test "$xxx" && $test -r "$xxx";
+       then eval $xxf;
+       eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
+               cont="";
+       else eval $xxnf;
+       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
+       set $yyy; shift; shift; yyy=$@;
+       case $# in 0) cont="";;
+       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
+               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
+       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
+               xxnf="echo \"there is no <\$1>, ...\" >&4";;
+       esac;
+done;
+while $test "$yyy";
+do set $yyy; var=$2; eval "was=\$$2";
+       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
+       set $yyy; shift; shift; yyy=$@;
+done'
+
+: see if dld is available
+set dld.h i_dld
+eval $inhdr
+
 : is a C symbol defined?
 csym='tlook=$1;
 case "$3" in
@@ -4056,7 +4837,7 @@ yes)
                fi;;
        *)
                echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
-               if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
+               if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
                then tval=true;
                else tval=false;
                fi;
@@ -4097,965 +4878,1595 @@ yes)
        esac;;
 esac'
 
-: Check how to convert floats to strings.
+: see if dlopen exists
+xxx_runnm="$runnm"
+runnm=false
+set dlopen d_dlopen
+eval $inlibc
+runnm="$xxx_runnm"
+
+: determine which dynamic loading, if any, to compile in
 echo " "
-echo "Checking for an efficient way to convert floats to strings."
-$cat >try.c <<'EOP'
-#ifdef TRY_gconvert
-#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
-#endif
-#ifdef TRY_gcvt
-#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-#endif
-#ifdef TRY_sprintf
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-#endif
-main() { 
-       char buf[64]; 
-       Gconvert(1.0, 8, 0, buf); 
-       if (buf[0] != '1' || buf[1] != '\0')
-               exit(1);
-       Gconvert(0.0, 8, 0, buf); 
-       if (buf[0] != '0' || buf[1] != '\0')
-               exit(1);
-       Gconvert(-1.0, 8, 0, buf); 
-       if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0')
-               exit(1);
-       exit(0);
-}
-EOP
-case "$d_Gconvert" in
-gconvert*) xxx_list='gconvert gcvt sprintf' ;;
-gcvt*) xxx_list='gcvt gconvert sprintf' ;;
-sprintf*) xxx_list='sprintf gconvert gcvt' ;;
-*) xxx_list='gconvert gcvt sprintf' ;;
+dldir="ext/DynaLoader"
+case "$usedl" in
+$define|y|true)
+       dflt='y'
+       usedl="$define"
+       ;;
+$undef|n|false)
+       dflt='n'
+       usedl="$undef"
+       ;;
+*) 
+       dflt='n'
+       case "$d_dlopen" in
+           $define) dflt='y' ;;
+       esac
+       case "$i_dld" in
+           $define) dflt='y' ;;
+       esac
+       : Does a dl_xxx.xs file exist for this operating system
+       $test -f ../$dldir/dl_${osname}.xs && dflt='y'
+       ;;
 esac
-
-for xxx_convert in $xxx_list; do
-       echo "Trying $xxx_convert"
-       $rm -f try try.o
-       if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
-               try.c $libs > /dev/null 2>&1 ; then
-               echo "$xxx_convert" found. >&4
-               if ./try; then
-                       echo "Good, $xxx_convert drops a trailing decimal point."
-                       echo "I'll use $xxx_convert to convert floats into a string." >&4
-                       break;
+rp="Do you wish to use dynamic loading?"
+. ./myread
+usedl="$ans"
+case "$ans" in
+y*) usedl="$define"
+       case "$dlsrc" in
+       '')
+               if $test -f ../$dldir/dl_${osname}.xs ; then
+                       dflt="$dldir/dl_${osname}.xs"
+               elif $test "$d_dlopen" = "$define" ; then
+                       dflt="$dldir/dl_dlopen.xs"
+               elif $test "$i_dld" = "$define" ; then
+                       dflt="$dldir/dl_dld.xs"
                else
-                       echo "But $xxx_convert keeps a trailing decimal point".
+                       dflt=''
                fi
-       else
-               echo "$xxx_convert NOT found." >&4
-       fi
-done
-               
-case "$xxx_convert" in
-gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
-gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
-*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
-esac
+               ;;
+       *)      dflt="$dldir/$dlsrc"
+               ;;
+       esac
+    echo "The following dynamic loading files are available:"
+       : Can not go over to $dldir because getfile has path hard-coded in.
+    cd ..; ls -C $dldir/dl*.xs; cd UU
+    rp="Source file to use for dynamic loading"
+    fn="fne"
+    . ./getfile
+       usedl="$define"
+       : emulate basename
+       dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
 
-: Initialize h_fcntl
-h_fcntl=false
+    $cat << EOM
 
-: Initialize h_sysfile
-h_sysfile=false
+Some systems may require passing special flags to $cc -c to
+compile modules that will be used to create a shared library.
+To use no flags, say "none".
 
-: determine filename position in cpp output
-echo " "
-echo "Computing filename position in cpp output for #include directives..." >&4
-echo '#include <stdio.h>' > foo.c
-$cat >fieldn <<EOF
-$startsh
-$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
-$grep '^[      ]*#.*stdio\.h' | \
-while read cline; do
-       pos=1
-       set \$cline
-       while $test \$# -gt 0; do
-               if $test -r \`echo \$1 | $tr -d '"'\`; then
-                       echo "\$pos"
-                       exit 0
-               fi
-               shift
-               pos=\`expr \$pos + 1\`
-       done
-done
-EOF
-chmod +x fieldn
-fieldn=`./fieldn`
-$rm -f foo.c fieldn
-case $fieldn in
-'') pos='???';;
-1) pos=first;;
-2) pos=second;;
-3) pos=third;;
-*) pos="${fieldn}th";;
-esac
-echo "Your cpp writes the filename in the $pos field of the line."
+EOM
+    case "$cccdlflags" in
+    '')        case "$gccversion" in
+               '') case "$osname" in
+                       hpux)   dflt='+z' ;;
+                       next)   dflt='none' ;;
+                       irix*)  dflt='-KPIC' ;;
+                       svr4*|esix*|solaris)
+                               case "$ccflags" in
+                                       *-DDEBUGGING*)  dflt='-KPIC' ;;
+                                       *)      dflt='-Kpic' ;;
+                               esac 
+                               ;;
+                       sunos)  dflt='-pic' ;;
+                       *)      dflt='none' ;;
+                   esac
+                       ;;
+               *)  case "$osname" in
+                       svr4*|esix*|solaris)
+                               case "$ccflags" in
+                                       *-DDEBUGGING*)  dflt='-fPIC' ;;
+                                       *)      dflt='-fpic' ;;
+                               esac 
+                               ;;
+                       *)      dflt='-fpic' ;;
+                   esac ;;
+           esac ;;
+    *) dflt="$cccdlflags" ;;
+    esac
+    rp="Any special flags to pass to $cc -c to compile shared library modules?"
+    . ./myread
+    case "$ans" in
+    none) cccdlflags=' ' ;;
+    *) cccdlflags="$ans" ;;
+    esac
 
-: locate header file
-$cat >findhdr <<EOF
-$startsh
-wanted=\$1
-name=''
-if test -f $usrinc/\$wanted; then
-       echo "$usrinc/\$wanted"
-       exit 0
-fi
-awkprg='{ print \$$fieldn }'
-echo "#include <\$wanted>" > foo\$\$.c
-$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
-$grep "^[      ]*#.*\$wanted" | \
-while read cline; do
-       name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
-       case "\$name" in
-       */\$wanted) echo "\$name"; exit 0;;
-       *) name='';;
-       esac;
-done;
-$rm -f foo\$\$.c;
-case "\$name" in
-'') exit 1;;
-esac
-EOF
-chmod +x findhdr
+    cat << EOM
 
-: access call always available on UNIX
-set access d_access
-eval $inlibc
+Some systems use ld to create libraries that can be dynamically loaded,
+while other systems (such as those using ELF) use $cc.
 
-: locate the flags for 'access()'
-case "$d_access" in
-"$define")
-       echo " "
-       $cat >access.c <<'EOCP'
-#include <sys/types.h>
-#ifdef I_FCNTL
+EOM
+       case "$ld" in
+       '')     $cat >try.c <<'EOM'
+/* Test for whether ELF binaries are produced */
 #include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-#include <sys/file.h>
-#endif
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
+#include <stdlib.h>
 main() {
-       exit(R_OK);
-}
-EOCP
-       : check sys/file.h first, no particular reason here
-       if $test `./findhdr sys/file.h` && \
-               $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then
-               h_sysfile=true;
-               echo "<sys/file.h> defines the *_OK access constants." >&4
-       elif $test `./findhdr fcntl.h` && \
-               $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
-               h_fcntl=true;
-               echo "<fcntl.h> defines the *_OK access constants." >&4
-       elif $test `./findhdr unistd.h` && \
-               $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
-               echo "<unistd.h> defines the *_OK access constants." >&4
+       char b[4];
+       int i = open("a.out",O_RDONLY);
+       if(i == -1) 
+               exit(1); /* fail */
+       if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
+               exit(0); /* succeed (yes, it's ELF) */
        else
-               echo "I can't find the four *_OK access constants--I'll use mine." >&4
-       fi
-       ;;
-esac
-$rm -f access*
+               exit(1); /* fail */
+}
+EOM
+               if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
+                       cat <<EOM
+You appear to have ELF support.  I'll use $cc to build dynamic libraries.
+EOM
+                       dflt="$cc"
+               else
+                       echo "I'll use ld to build dynamic libraries."
+                       dflt='ld'
+               fi
+               rm -f try.c a.out
+               ;;
+       *)      dflt="$ld"
+               ;;
+       esac
 
-: see if alarm exists
-set alarm d_alarm
-eval $inlibc
+    rp="What command should be used to create dynamic libraries?"
+    . ./myread
+       ld="$ans"
 
-: Look for GNU-cc style attribute checking
-echo " "
-echo "Checking whether your compiler can handle __attribute__ ..." >&4
-$cat >attrib.c <<'EOCP'
-#include <stdio.h>
-void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
-EOCP
-if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
-               echo "Your C compiler doesn't fully support __attribute__."
-               val="$undef"
-       else
-               echo "Your C compiler supports __attribute__."
-               val="$define"
-       fi
-else
-       echo "Your C compiler doesn't seem to understand __attribute__ at all."
-       val="$undef"
-fi
-set d_attribut
-eval $setvar
-$rm -f attrib*
+    cat << EOM
 
-: see if bcmp exists
-set bcmp d_bcmp
-eval $inlibc
+Some systems may require passing special flags to $ld to create a
+library that can be dynamically loaded.  If your ld flags include
+-L/other/path options to locate libraries outside your loader's normal
+search path, you may need to specify those -L options here as well.  To
+use no flags, say "none".
 
-: see if bcopy exists
-set bcopy d_bcopy
-eval $inlibc
-
-: see if setpgrp exists
-set setpgrp d_setpgrp
-eval $inlibc
+EOM
+    case "$lddlflags" in
+    '') case "$osname" in
+                       hpux)  dflt='-b' ;;
+                       linux|irix*)    dflt='-shared' ;;
+                       next)  dflt='none' ;;
+                       solaris) dflt='-G' ;;
+                       sunos) dflt='-assert nodefinitions' ;;
+                       svr4*|esix*) dflt="-G $ldflags" ;;
+               *)     dflt='none' ;;
+                       esac
+                       ;;
+    *) dflt="$lddlflags" ;;
+    esac
 
-: see which flavor of setpgrp is in use
-case "$d_setpgrp" in
-"$define")
-       echo " "
-       $cat >set.c <<EOP
-main()
-{
-       if (getuid() == 0) {
-               printf("(I see you are running Configure as super-user...)\n");
-               setuid(1);
-       }
-       if (-1 == setpgrp(1, 1))
-               exit(1);
-       exit(0);
-}
-EOP
-       if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
-               ./set 2>/dev/null
-               case $? in
-               0) echo "You have to use setpgrp() instead of setpgrp(pid, pgrp)." >&4
-                       val="$undef";;
-               *) echo "You have to use setpgrp(pid, pgrp) instead of setpgrp()." >&4
-                       val="$define";;
+: Try to guess additional flags to pick up local libraries.
+for thisflag in $ldflags; do
+       case "$thisflag" in
+       -L*)
+               case " $dflt " in
+               *" $thisflag "*) ;;
+               *) dflt="$dflt $thisflag" ;;
                esac
-       else
-               if ./usg; then
-                       xxx="USG one, i.e. you use setpgrp()."
-                       val="$undef"
-               else
-                       xxx="BSD one, i.e. you use setpgrp(pid, pgrp)."
-                       val="$define"
-               fi
-               echo "Assuming your setpgrp is a $xxx" >&4
-       fi
-       ;;
-*) val="$undef";;
+               ;;
+       esac
+done
+
+case "$dflt" in
+'') dflt='none' ;;
 esac
-set d_bsdpgrp
-eval $setvar
-$rm -f set set.c
 
-: see if bzero exists
-set bzero d_bzero
-eval $inlibc
+    rp="Any special flags to pass to $ld to create a dynamically loaded library?"
+    . ./myread
+    case "$ans" in
+    none) lddlflags=' ' ;;
+    *) lddlflags="$ans" ;;
+    esac
 
-: check for length of integer
-echo " "
-case "$intsize" in
-'')
-       echo "Checking to see how big your integers are..." >&4
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       printf("%d\n", sizeof(int));
-       exit(0);
-}
-EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
-               intsize=`./try`
-               echo "Your integers are $intsize bytes long."
-       else
-               dflt='4'
-               echo "(I can't seem to compile the test program.  Guessing...)"
-               rp="What is the size of an integer (in bytes)?"
-               . ./myread
-               intsize="$ans"
-       fi
+       cat <<EOM
+
+Some systems may require passing special flags to $cc to indicate that
+the resulting executable will use dynamic linking.  To use no flags,
+say "none".
+
+EOM
+    case "$ccdlflags" in
+    '') case "$osname" in
+               hpux)   dflt='-Wl,-E' ;;
+               linux)  dflt='-rdynamic' ;;
+               next)   dflt='none' ;;
+               sunos)  dflt='none' ;;
+               *)      dflt='none' ;;
+           esac ;;
+    *)  dflt="$ccdlflags" ;;
+    esac
+    rp="Any special flags to pass to $cc to use dynamic loading?"
+    . ./myread
+    case "$ans" in
+    none) ccdlflags=' ' ;;
+    *) ccdlflags="$ans" ;;
+    esac
+    ;;
+*)  usedl="$undef"
+       ld='ld'
+    dlsrc='dl_none.xs'
+    lddlflags=''
+    ccdlflags=''
+    ;;
+esac
+
+also=''
+case "$usedl" in
+$undef)
+       # No dynamic loading being used, so don't bother even to prompt.
+       useshrplib='false'
+       ;;
+*)     case "$useshrplib" in
+       '')     case "$osname" in
+               svr4*|dgux|dynixptx|esix|powerux)
+                       dflt=y
+                       also='Building a shared libperl is required for dynamic loading to work on your system.'
+                       ;;
+               next*)
+                       case "$osvers" in
+                       4*)     dflt=y
+                               also='Building a shared libperl is needed for MAB support.'
+                               ;;
+                       *)      dflt=n
+                               ;;
+                       esac
+                       ;;
+               sunos)
+                       dflt=n
+                       also='Building a shared libperl will definitely not work on SunOS 4.'
+                       ;;
+               *)      dflt=n
+                       ;;
+               esac
+               ;;
+       $define|true|[Yy]*)
+               dflt=y
+               ;;
+       *)      dflt=n
+               ;;
+       esac
+       $cat << EOM
+
+The perl executable is normally obtained by linking perlmain.c with
+libperl${_a}, any static extensions (usually just DynaLoader), and
+any other libraries needed on this system (such as -lm, etc.).  Since
+your system supports dynamic loading, it is probably possible to build
+a shared libperl.$so.  If you will have more than one executable linked
+to libperl.$so, this will significantly reduce the size of each
+executable, but it may have a noticeable affect on performance.  The
+default is probably sensible for your system.
+$also
+
+EOM
+       rp="Build a shared libperl.$so (y/n)"
+       . ./myread
+       case "$ans" in
+       true|$define|[Yy]*)
+               useshrplib='true'
+               # Why does next4 have to be so different?
+               case "${osname}${osvers}" in
+               next4*) xxx='DYLD_LIBRARY_PATH' ;;
+               *)              xxx='LD_LIBRARY_PATH' ;;
+               esac
+               $cat <<EOM  | $tee -a ../config.msg >&4
+
+To build perl, you must add the current working directory to your
+$xxx environment variable before running make.  You can do
+this with
+   $xxx=\`pwd\`; export $xxx
+for Bourne-style shells, or
+   setenv $xxx \`pwd\`
+for Csh-style shells.  You *MUST* do this before running make.
+
+EOM
+               ;;
+       *)      useshrplib='false' ;;
+       esac
        ;;
 esac
-$rm -f try.c try
 
-: see if signal is declared as pointer to function returning int or void
-echo " "
-xxx=`./findhdr signal.h`
-$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
-if $contains 'int.*\*[         ]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-elif $contains 'void.*\*[      ]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have void (*signal())() instead of int." >&4
-       val="$define"
-elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-else
-       case "$d_voidsig" in
+case "$useshrplib" in
+true)
+       case "$libperl" in
        '')
-       echo "I can't determine whether signal handler returns void or int..." >&4
-               dflt=void
-               rp="What type does your signal handler return?"
-               . ./myread
-               case "$ans" in
-               v*) val="$define";;
-               *) val="$undef";;
-               esac;;
-       "$define")
-               echo "As you already told me, signal handler returns void." >&4;;
-       *)
-               echo "As you already told me, signal handler returns int." >&4;;
+               # Figure out a good name for libperl.so.  Since it gets stored in
+               # a version-specific architecture-dependent library, the version
+               # number isn't really that important, except for making cc/ld happy.
+               #
+               # A name such as libperl.so.3.1
+               majmin="libperl.$so.$patchlevel.$subversion"
+               # A name such as libperl.so.301
+               majonly=`echo $patchlevel $subversion |
+                       $awk '{printf "%d%02d", $1, $2}'`
+               majonly=libperl.$so.$majonly
+               # I'd prefer to keep the os-specific stuff here to a minimum, and
+               # rely on figuring it out from the naming of libc.
+               case "${osname}${osvers}" in
+               next4*)
+                       dflt=libperl.5.$so
+                       # XXX How handle the --version stuff for MAB?
+                       ;;
+               linux*)  # ld won't link with a bare -lperl otherwise.
+                       dflt=libperl.$so
+                       ;;
+               *)      # Try to guess based on whether libc has major.minor.
+                       case "$libc" in
+                       *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
+                       *libc.$so.[0-9]*) dflt=$majonly ;;
+                       *)      dflt=libperl.$so ;;
+                       esac
+                       ;;
+               esac
+               ;;
+       *)      dflt=$libperl
+               ;;
        esac
-fi
-set d_voidsig
-eval $setvar
-case "$d_voidsig" in
-"$define") signal_t="void";;
-*) signal_t="int";;
-esac
-$rm -f $$.tmp
+       cat << EOM
 
-: check for ability to cast large floats to 32-bit ints.
-echo " "
-echo 'Checking whether your C compiler can cast large floats to int32.' >&4
-if $test "$intsize" -eq 4; then
-       xxx=int
-else
-       xxx=long
-fi
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <signal.h>
-$signal_t blech() { exit(3); }
-main()
-{
-       $xxx i32;
-       double f;
-       int result = 0;
-       signal(SIGFPE, blech);
+I need to select a good name for the shared libperl.  If your system uses
+library names with major and minor numbers, then you might want something
+like $majmin.  Alternatively, if your system uses a single version
+number for shared libraries, then you might want to use $majonly.
+Or, your system might be quite happy with a simple libperl.$so.
 
-       f = (double) 0x7fffffff;
-       f = 10 * f;
-       i32  = ($xxx) f;
+Since the shared libperl will get installed into a version-specific
+architecture-dependent directory, the version number of the shared perl
+library probably isn't important, so the default should be o.k.
 
-       if (i32 != ($xxx) f)
-               result |= 1;
-       exit(result);
-}
-EOCP
-if $cc -o try $ccflags try.c >/dev/null 2>&1; then
-       ./try
-       yyy=$?
-else
-       echo "(I can't seem to compile the test program--assuming it can't)"
-       yyy=1
-fi
-case "$yyy" in
-0)     val="$define"
-       echo "Yup, it can."
+EOM
+       rp='What name do you want to give to the shared libperl?'
+       . ./myread
+       libperl=$ans
+       echo "Ok, I'll use $libperl"
        ;;
-*)     val="$undef"
-       echo "Nope, it can't."
+*)
+       libperl="libperl${_a}"
        ;;
 esac
-set d_casti32
-eval $setvar
-$rm -f try try.*
 
-: check for ability to cast negative floats to unsigned
-echo " "
-echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <signal.h>
-$signal_t blech() { exit(7); }
-$signal_t blech_in_list() { exit(4); }
-unsigned long dummy_long(p) unsigned long p; { return p; }
-unsigned int dummy_int(p) unsigned int p; { return p; }
-unsigned short dummy_short(p) unsigned short p; { return p; }
-main()
-{
-       double f = -123.;
-       unsigned long along;
-       unsigned int aint;
-       unsigned short ashort;
-       int result = 0;
+# Detect old use of shrpdir via undocumented Configure -Dshrpdir
+case "$shrpdir" in
+'') ;;
+*)     $cat >&4 <<EOM
+WARNING:  Use of the shrpdir variable for the installation location of
+the shared $libperl is not supported.  It was never documented and
+will not work in this version.  Let me (doughera@lafcol.lafayette.edu)
+know of any problems this may cause.
 
-       signal(SIGFPE, blech);
-       along = (unsigned long)f;
-       aint = (unsigned int)f;
-       ashort = (unsigned short)f;
-       if (along != (unsigned long)-123)
-               result |= 1;
-       if (aint != (unsigned int)-123)
-               result |= 1;
-       if (ashort != (unsigned short)-123)
-               result |= 1;
-       f = (double)0x40000000;
-       f = f + f;
-       along = 0;
-       along = (unsigned long)f;
-       if (along != 0x80000000)
-               result |= 2;
-       f -= 1.;
-       along = 0;
-       along = (unsigned long)f;
-       if (along != 0x7fffffff)
-               result |= 1;
-       f += 2.;
-       along = 0;
-       along = (unsigned long)f;
-       if (along != 0x80000001)
-               result |= 2;
-       if (result)
-               exit(result);
-       signal(SIGFPE, blech_in_list);
-       f = 123.;
-       along = dummy_long((unsigned long)f);
-       aint = dummy_int((unsigned int)f);
-       ashort = dummy_short((unsigned short)f);
-       if (along != (unsigned long)123)
-               result |= 4;
-       if (aint != (unsigned int)123)
-               result |= 4;
-       if (ashort != (unsigned short)123)
-               result |= 4;
-       exit(result);
-
-}
-EOCP
-if $cc -o try $ccflags try.c >/dev/null 2>&1; then
-       ./try
-       castflags=$?
-else
-       echo "(I can't seem to compile the test program--assuming it can't)"
-       castflags=7
-fi
-case "$castflags" in
-0)     val="$define"
-       echo "Yup, it can."
-       ;;
-*)     val="$undef"
-       echo "Nope, it can't."
+EOM
+       case "$shrpdir" in
+       "$archlibexp/CORE")
+               $cat >&4 <<EOM
+But your current setting of $shrpdir is
+the default anyway, so it's harmless.
+EOM
+               ;;
+       *)
+               $cat >&4 <<EOM
+Further, your current attempted setting of $shrpdir
+conflicts with the value of $archlibexp/CORE
+that installperl will use.
+EOM
+               ;;
+       esac
        ;;
 esac
-set d_castneg
-eval $setvar
-$rm -f try.*
-
-: see if vprintf exists
-echo " "
-if set vprintf val -f d_vprintf; eval $csym; $val; then
-       echo 'vprintf() found.' >&4
-       val="$define"
-       $cat >vprintf.c <<'EOF'
-#include <varargs.h>
 
-main() { xxx("foo"); }
+# How will the perl executable find the installed shared $libperl?
+# Add $xxx to ccdlflags.
+# If we can't figure out a command-line option, use $shrpenv to
+# set env LD_RUN_PATH.  The main perl makefile uses this.
+shrpdir=$archlibexp/CORE
+xxx=''
+tmp_shrpenv=''
+if "$useshrplib"; then
+    case "$osname" in 
+       aix)
+               # We'll set it in Makefile.SH...
+               ;;
+       solaris|netbsd)
+               xxx="-R $shrpdir"
+               ;;
+       freebsd)
+               xxx="-Wl,-R$shrpdir"
+               ;;
+       linux|irix*|dec_osf)
+               xxx="-Wl,-rpath,$shrpdir"
+               ;;
+       next)
+               # next doesn't like the default...
+               ;;
+       *)
+               tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
+               ;;
+       esac
+       case "$xxx" in
+       '') ;;
+       *)      
+               # Only add $xxx if it isn't already in ccdlflags.
+               case " $ccdlflags " in
+               *" $xxx "*)     ;;
+               *)      ccdlflags="$ccdlflags $xxx"
+                       cat <<EOM >&4
 
-xxx(va_alist)
-va_dcl
-{
-       va_list args;
-       char buf[10];
+Adding $xxx to the flags
+passed to $ld so that the perl executable will find the 
+installed shared $libperl.
 
-       va_start(args);
-       exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
-}
-EOF
-       if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
-               echo "Your vsprintf() returns (int)." >&4
-               val2="$undef"
-       else
-               echo "Your vsprintf() returns (char*)." >&4
-               val2="$define"
-       fi
-else
-       echo 'vprintf() NOT found.' >&4
-               val="$undef"
-               val2="$undef"
+EOM
+                       ;;
+               esac
+               ;;
+       esac
 fi
-set d_vprintf
-eval $setvar
-val=$val2
-set d_charvspr
-eval $setvar
-
-: see if chown exists
-set chown d_chown
-eval $inlibc
-
-: see if chroot exists
-set chroot d_chroot
-eval $inlibc
-
-: see if chsize exists
-set chsize d_chsize
-eval $inlibc
+# Respect a hint or command-line value.
+case "$shrpenv" in
+'') shrpenv="$tmp_shrpenv" ;;
+esac
 
-: check for const keyword
-echo " "
-echo 'Checking to see if your C compiler knows about "const"...' >&4
-$cat >const.c <<'EOCP'
-typedef struct spug { int drokk; } spug;
-main()
-{
-       const char *foo;
-       const spug y;
-}
-EOCP
-if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
-       val="$define"
-       echo "Yup, it does."
-else
-       val="$undef"
-       echo "Nope, it doesn't."
+: see if we have to deal with yellow pages, now NIS.
+if $test -d /usr/etc/yp || $test -d /etc/yp; then
+       if $test -f /usr/etc/nibindd; then
+               echo " "
+               echo "I'm fairly confident you're on a NeXT."
+               echo " "
+               rp='Do you get the hosts file via NetInfo?'
+               dflt=y
+               case "$hostcat" in
+               nidump*) ;;
+               '') ;;
+               *) dflt=n;;
+               esac
+               . ./myread
+               case "$ans" in
+               y*) hostcat='nidump hosts .';;
+               *)      case "$hostcat" in
+                       nidump*) hostcat='';;
+                       esac
+                       ;;
+               esac
+       fi
+       case "$hostcat" in
+       nidump*) ;;
+       *)
+               case "$hostcat" in
+               *ypcat*) dflt=y;;
+               '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+                               dflt=y
+                       else
+                               dflt=n
+                       fi;;
+               *) dflt=n;;
+               esac
+               echo " "
+               rp='Are you getting the hosts file via yellow pages?'
+               . ./myread
+               case "$ans" in
+               y*) hostcat='ypcat hosts';;
+               *) hostcat='cat /etc/hosts';;
+               esac
+               ;;
+       esac
 fi
-set d_const
-eval $setvar
+case "$hostcat" in
+'') hostcat='cat /etc/hosts';;
+esac
+case "$groupcat" in
+'') groupcat='cat /etc/group';;
+esac
+case "$passcat" in
+'') passcat='cat /etc/passwd';;
+esac
 
-: see if crypt exists
+: now get the host name
 echo " "
-if set crypt val -f d_crypt; eval $csym; $val; then
-       echo 'crypt() found.' >&4
-       val="$define"
-       cryptlib=''
-else
-       cryptlib=`./loc Slibcrypt.a "" $xlibpth`
-       if $test -z "$cryptlib"; then
-               cryptlib=`./loc Mlibcrypt.a "" $xlibpth`
-       else
-               cryptlib=-lcrypt
-       fi
-       if $test -z "$cryptlib"; then
-               cryptlib=`./loc Llibcrypt.a "" $xlibpth`
-       else
-               cryptlib=-lcrypt
+echo "Figuring out host name..." >&4
+case "$myhostname" in
+'') cont=true
+       echo 'Maybe "hostname" will work...'
+       if tans=`sh -c hostname 2>&1` ; then
+               myhostname=$tans
+               phostname=hostname
+               cont=''
        fi
-       if $test -z "$cryptlib"; then
-               cryptlib=`./loc libcrypt.a "" $libpth`
-       else
-               cryptlib=-lcrypt
+       ;;
+*) cont='';;
+esac
+if $test "$cont"; then
+       if ./xenix; then
+               echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
+               if tans=`cat /etc/systemid 2>&1` ; then
+                       myhostname=$tans
+                       phostname='cat /etc/systemid'
+                       echo "Whadyaknow.  Xenix always was a bit strange..."
+                       cont=''
+               fi
+       elif $test -r /etc/systemid; then
+               echo "(What is a non-Xenix system doing with /etc/systemid?)"
        fi
-       if $test -z "$cryptlib"; then
-               echo 'crypt() NOT found.' >&4
-               val="$undef"
+fi
+if $test "$cont"; then
+       echo 'No, maybe "uuname -l" will work...'
+       if tans=`sh -c 'uuname -l' 2>&1` ; then
+               myhostname=$tans
+               phostname='uuname -l'
        else
-               val="$define"
+               echo 'Strange.  Maybe "uname -n" will work...'
+               if tans=`sh -c 'uname -n' 2>&1` ; then
+                       myhostname=$tans
+                       phostname='uname -n'
+               else
+                       echo 'Oh well, maybe I can mine it out of whoami.h...'
+                       if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
+                               myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
+                               phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
+                       else
+                               case "$myhostname" in
+                               '') echo "Does this machine have an identity crisis or something?"
+                                       phostname='';;
+                               *)
+                                       echo "Well, you said $myhostname before..."
+                                       phostname='echo $myhostname';;
+                               esac
+                       fi
+               fi
        fi
 fi
-set d_crypt
-eval $setvar
-
-: get csh whereabouts
-case "$csh" in
-'csh') val="$undef" ;;
-*) val="$define" ;;
-esac
-set d_csh
-eval $setvar
-full_csh=$csh
-
-: see if cuserid exists
-set cuserid d_cuserid
-eval $inlibc
-
-: define an alternate in-header-list? function
-inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
-cont=true; xxf="echo \"<\$1> found.\" >&4";
-case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
-*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
-esac;
-case $# in 4) instead=instead;; *) instead="at last";; esac;
-while $test "$cont"; do
-       xxx=`./findhdr $1`
-       var=$2; eval "was=\$$2";
-       if $test "$xxx" && $test -r "$xxx";
-       then eval $xxf;
-       eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
-               cont="";
-       else eval $xxnf;
-       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
-       set $yyy; shift; shift; yyy=$@;
-       case $# in 0) cont="";;
-       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
-               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
-       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
-               xxnf="echo \"there is no <\$1>, ...\" >&4";;
-       esac;
-done;
-while $test "$yyy";
-do set $yyy; var=$2; eval "was=\$$2";
-       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
-       set $yyy; shift; shift; yyy=$@;
-done'
-
-: see if this is a limits.h system
-set limits.h i_limits
-eval $inhdr
-
-: see if this is a float.h system
-set float.h i_float
-eval $inhdr
+: you do not want to know about this
+set $myhostname
+myhostname=$1
 
-: See if number of significant digits in a double precision number is known
-echo " "
-$cat >dbl_dig.c <<EOM
-#$i_limits I_LIMITS
-#$i_float I_FLOAT
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifdef DBL_DIG
-printf("Contains DBL_DIG");
-#endif
-EOM
-$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
-if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
-       echo "DBL_DIG found." >&4
-       val="$define"
-else
-       echo "DBL_DIG NOT found." >&4
-       val="$undef"
+: verify guess
+if $test "$myhostname" ; then
+       dflt=y
+       rp='Your host name appears to be "'$myhostname'".'" Right?"
+       . ./myread
+       case "$ans" in
+       y*) ;;
+       *) myhostname='';;
+       esac
 fi
-$rm -f dbl_dig.?
-set d_dbl_dig
-eval $setvar
 
-: see if difftime exists
-set difftime d_difftime
-eval $inlibc
+: bad guess or no guess
+while $test "X$myhostname" = X ; do
+       dflt=''
+       rp="Please type the (one word) name of your host:"
+       . ./myread
+       myhostname="$ans"
+done
 
-: see if this is a dirent system
-echo " "
-if xinc=`./findhdr dirent.h`; $test "$xinc"; then
-       val="$define"
-       echo "<dirent.h> found." >&4
-else
-       val="$undef"
-       if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
-               echo "<sys/dir.h> found." >&4
-               echo " "
-       else
-               xinc=`./findhdr sys/ndir.h`
-       fi
-       echo "<dirent.h> NOT found." >&4
-fi
-set i_dirent
-eval $setvar
+: translate upper to lower if necessary
+case "$myhostname" in
+*[A-Z]*)
+       echo "(Normalizing case in your host name)"
+       myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
+       ;;
+esac
 
-: Look for type of directory structure.
+case "$myhostname" in
+*.*)
+       dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
+       myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
+       echo "(Trimming domain name from host name--host name is now $myhostname)"
+       ;;
+*) case "$mydomain" in
+       '')
+               {
+                       test "X$hostcat" = "Xypcat hosts" &&
+                       ypmatch "$myhostname" hosts 2>/dev/null |\
+                               $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
+                       $test -s hosts
+               } || {
+                       $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
+                                       /[       ]$myhostname[  . ]/p" > hosts
+               }
+               tmp_re="[       . ]"
+               $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
+                            END { print sum }" hosts` = x1 || tmp_re="[         ]"
+               dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
+                       hosts | $sort | $uniq | \
+                       $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
+               case `$echo X$dflt` in
+               X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
+                       dflt=.
+                       ;;
+               X.) echo "(You do not have fully-qualified names in /etc/hosts)"
+                       ;;
+               esac
+               case "$dflt" in
+               .)
+                       tans=`./loc resolv.conf X /etc /usr/etc`
+                       if $test -f "$tans"; then
+                               echo "(Attempting domain name extraction from $tans)"
+                               dflt=.`$sed -n -e 's/   / /g' \
+                                 -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
+                                 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+                               case "$dflt" in
+                               .) dflt=.`$sed -n -e 's/        / /g' \
+                                    -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
+                                    | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+                                       ;;
+                               esac
+                       fi
+                       ;;
+               esac
+               case "$dflt" in
+               .) echo "(No help from resolv.conf either -- attempting clever guess)"
+                       dflt=.`sh -c domainname 2>/dev/null`
+                       case "$dflt" in
+                       '') dflt='.';;
+                       .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
+                       esac
+                       ;;
+               esac
+               case "$dflt" in
+               .) echo "(Lost all hope -- silly guess then)"
+                       dflt='.uucp'
+                       ;;
+               esac
+               $rm -f hosts
+               ;;
+       *) dflt="$mydomain";;
+       esac;;
+esac
 echo " "
-$cppstdin $cppflags $cppminus < "$xinc" > try.c
+rp="What is your domain name?"
+. ./myread
+tans="$ans"
+case "$ans" in
+'') ;;
+.*) ;;
+*) tans=".$tans";;
+esac
+mydomain="$tans"
 
-case "$direntrytype" in
-''|' ')
-       case "$i_dirent" in
-       $define) guess1='struct dirent' ;;
-       *) guess1='struct direct'  ;;
-       esac
-       ;;
-*)     guess1="$direntrytype"
+: translate upper to lower if necessary
+case "$mydomain" in
+*[A-Z]*)
+       echo "(Normalizing case in your domain name)"
+       mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
        ;;
 esac
 
-case "$guess1" in
-'struct dirent') guess2='struct direct' ;;
-*) guess2='struct dirent' ;;
+: a little sanity check here
+case "$phostname" in
+'') ;;
+*)
+       case `$phostname | ./tr '[A-Z]' '[a-z]'` in
+       $myhostname$mydomain|$myhostname) ;;
+       *)
+               case "$phostname" in
+               sed*)
+                       echo "(That doesn't agree with your whoami.h file, by the way.)"
+                       ;;
+               *)
+                       echo "(That doesn't agree with your $phostname command, by the way.)"
+                       ;;
+               esac
+       ;;
+       esac
+       ;;
 esac
-               
-if $contains "$guess1" try.c >/dev/null 2>&1; then
-       direntrytype="$guess1"
-       echo "Your directory entries are $direntrytype." >&4
-elif $contains "$guess2" try.c >/dev/null 2>&1; then
-       direntrytype="$guess2"
-       echo "Your directory entries seem to be $direntrytype." >&4
-else
-       echo "I don't recognize your system's directory entries." >&4
-       rp="What type is used for directory entries on this system?"
-       dflt="$guess1"
-       . ./myread
-       direntrytype="$ans"
-fi
-$rm -f try.c
-
 
-: see if the directory entry stores field length
-echo " "
-$cppstdin $cppflags $cppminus < "$xinc" > try.c
-if $contains 'd_namlen' try.c >/dev/null 2>&1; then
-       echo "Good, your directory entry keeps length information in d_namlen." >&4
-       val="$define"
-else
-       echo "Your directory entry does not know about the d_namlen field." >&4
-       val="$undef"
-fi
-set d_dirnamlen
-eval $setvar
-$rm -f try.c
-
-: see if dlerror exists
-xxx_runnm="$runnm"
-runnm=false
-set dlerror d_dlerror
-eval $inlibc
-runnm="$xxx_runnm"
+$cat <<EOM
 
-: see if dld is available
-set dld.h i_dld
-eval $inhdr
+I need to get your e-mail address in Internet format if possible, i.e.
+something like user@host.domain. Please answer accurately since I have
+no easy means to double check it. The default value provided below
+is most probably close to the reality but may not be valid from outside
+your organization...
 
-: see if dlopen exists
-xxx_runnm="$runnm"
-runnm=false
-set dlopen d_dlopen
-eval $inlibc
-runnm="$xxx_runnm"
-
-: determine which dynamic loading, if any, to compile in
-echo " "
-dldir="ext/DynaLoader"
-case "$usedl" in
-$define|y|true)
-       dflt='y'
-       usedl="$define"
-       ;;
-$undef|n|false)
-       dflt='n'
-       usedl="$undef"
-       ;;
-*) 
-       dflt='n'
-       case "$d_dlopen" in
-           $define) dflt='y' ;;
-       esac
-       case "$i_dld" in
-           $define) dflt='y' ;;
+EOM
+cont=x
+while test "$cont"; do
+       case "$cf_email" in
+       '') dflt="$cf_by@$myhostname$mydomain";;
+       *) dflt="$cf_email";;
        esac
-       : Does a dl_xxx.xs file exist for this operating system
-       $test -f ../$dldir/dl_${osname}.xs && dflt='y'
-       ;;
-esac
-rp="Do you wish to use dynamic loading?"
-. ./myread
-usedl="$ans"
-case "$ans" in
-y*) usedl="$define"
-       case "$dlsrc" in
-       '')
-               if $test -f ../$dldir/dl_${osname}.xs ; then
-                       dflt="$dldir/dl_${osname}.xs"
-               elif $test "$d_dlopen" = "$define" ; then
-                       dflt="$dldir/dl_dlopen.xs"
-               elif $test "$i_dld" = "$define" ; then
-                       dflt="$dldir/dl_dld.xs"
-               else
-                       dflt=''
-               fi
-               ;;
-       *)      dflt="$dldir/$dlsrc"
+       rp='What is your e-mail address?'
+       . ./myread
+       cf_email="$ans"
+       case "$cf_email" in
+       *@*.*) cont='' ;;
+       *)
+               rp='Address does not look like an Internet one.  Use it anyway?'
+               case "$fastread" in
+               yes) dflt=y ;;
+               *) dflt=n ;;
+               esac
+               . ./myread
+               case "$ans" in
+               y*) cont='' ;;
+               *) echo " " ;;
+               esac
                ;;
        esac
-    echo "The following dynamic loading files are available:"
-       : Can not go over to $dldir because getfile has path hard-coded in.
-    cd ..; ls -C $dldir/dl*.xs; cd UU
-    rp="Source file to use for dynamic loading"
-    fn="fne"
-    . ./getfile
-       usedl="$define"
-       : emulate basename
-       dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
+done
 
-    $cat << EOM
+$cat <<EOM
 
-Some systems may require passing special flags to $cc -c to
-compile modules that will be used to create a shared library.
-To use no flags, say "none".
+If you or somebody else will be maintaining perl at your site, please
+fill in the correct e-mail address here so that they may be contacted
+if necessary. Currently, the "perlbug" program included with perl
+will send mail to this address in addition to perlbug@perl.com. You may
+enter "none" for no administrator.
 
 EOM
-    case "$cccdlflags" in
-    '')        case "$gccversion" in
-               '') case "$osname" in
-                       hpux)   dflt='+z' ;;
-                       next)   dflt='none' ;;
-                       solaris|svr4*|esix*) dflt='-Kpic' ;;
-                       sunos)  dflt='-pic' ;;
-                       *)      dflt='none' ;;
-                   esac ;;
-               *)      dflt='-fpic' ;;
-           esac ;;
-    *) dflt="$cccdlflags" ;;
-    esac
-    rp="Any special flags to pass to $cc -c to compile shared library modules?"
-    . ./myread
-    case "$ans" in
-    none) cccdlflags=' ' ;;
-    *) cccdlflags="$ans" ;;
-    esac
+case "$perladmin" in
+'') dflt="$cf_email";;
+*) dflt="$perladmin";;
+esac
+rp='Perl administrator e-mail address'
+. ./myread
+perladmin="$ans"
 
-    cat << EOM
+: figure out how to guarantee perl startup
+case "$startperl" in
+'')
+       case "$sharpbang" in
+       *!)
+               $cat <<EOH
 
-Some systems use ld to create libraries that can be dynamically loaded,
-while other systems (such as those using ELF) use $cc.
+I can use the #! construct to start perl on your system. This will
+make startup of perl scripts faster, but may cause problems if you
+want to share those scripts and perl is not in a standard place
+($binexp/perl) on all your platforms. The alternative is to force
+a shell by starting the script with a single ':' character.
+
+EOH
+               dflt="$binexp/perl"
+               rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
+               . ./myread
+               case "$ans" in
+               none)   startperl=": # use perl";;
+               *)      startperl="#!$ans"
+                       if $test 30 -lt `echo "$ans" | wc -c`; then
+                               $cat >&4 <<EOM
+
+WARNING:  Some systems limit the #! command to 32 characters.
+If you experience difficulty running Perl scripts with #!, try
+installing Perl in a directory with a shorter pathname.
 
 EOM
-       case "$ld" in
-       '')     $cat >try.c <<'EOM'
-/* Test for whether ELF binaries are produced */
-#include <fcntl.h>
-#include <stdlib.h>
-main() {
-       char b[4];
-       int i = open("a.out",O_RDONLY);
-       if(i == -1) 
-               exit(1); /* fail */
-       if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
-               exit(0); /* succeed (yes, it's ELF) */
-       else
-               exit(1); /* fail */
-}
-EOM
-               if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
-                       cat <<EOM
-You appear to have ELF support.  I'll use $cc to build dynamic libraries.
-EOM
-                       dflt="$cc"
-               else
-                       echo "I'll use ld to build dynamic libraries."
-                       dflt='ld'
-               fi
-               rm -f try.c a.out
+                       fi ;;
+               esac
                ;;
-       *)      dflt="$ld"
+       *) startperl=": # use perl"
                ;;
        esac
+       ;;
+esac
+echo "I'll use $startperl to start perl scripts."
 
-    rp="What command should be used to create dynamic libraries?"
-    . ./myread
-       ld="$ans"
-
-    cat << EOM
-
-Some systems may require passing special flags to $ld to create a
-library that can be dynamically loaded.  If your ld flags include
--L/other/path options to locate libraries outside your loader's normal
-search path, you may need to specify those -L options here as well.  To
-use no flags, say "none".
+: figure best path for perl in scripts
+case "$perlpath" in
+'')
+       perlpath="$binexp/perl"
+       case "$startperl" in
+       *!*) ;;
+       *)
+               $cat <<EOH
 
-EOM
-    case "$lddlflags" in
-    '') case "$osname" in
-                       hpux)  dflt='-b' ;;
-                       linux)  dflt='-shared' ;;
-                       next)  dflt='none' ;;
-                       solaris) dflt='-G' ;;
-                       sunos) dflt='-assert nodefinitions' ;;
-                       svr4*|esix*) dflt="-G $ldflags" ;;
-               *)     dflt='none' ;;
-                       esac
-                       ;;
-    *) dflt="$lddlflags" ;;
-    esac
+I will use the "eval 'exec'" idiom to start Perl on your system.
+I can use the full path of your Perl binary for this purpose, but
+doing so may cause problems if you want to share those scripts and
+Perl is not always in a standard place ($binexp/perl).
 
-: Try to guess additional flags to pick up local libraries.
-for thisflag in $ldflags; do
-       case "$thisflag" in
-       -L*)
-               case " $dflt " in
-               *" $thisflag "*) ;;
-               *) dflt="$dflt $thisflag" ;;
-               esac
+EOH
+               dflt="$binexp/perl"
+               rp="What path shall I use in \"eval 'exec'\"?"
+               . ./myread
+               perlpath="$ans"
                ;;
        esac
-done
+       ;;
+esac
+case "$startperl" in
+*!*)   ;;
+*)     echo "I'll use $perlpath in \"eval 'exec'\"" ;;
+esac
 
-case "$dflt" in
-'') dflt='none' ;;
+cat <<EOM
+
+Previous version of $package used the standard IO mechanisms as defined
+in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
+mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
+the default.  This abstraction layer can use AT&T's sfio (if you already
+have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
+problems with some extension modules.  Using PerlIO with stdio is safe,
+but it is slower than plain stdio and therefore is not the default.
+
+If this doesn't make any sense to you, just accept the default 'n'.
+EOM
+case "$useperlio" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Use the experimental PerlIO abstraction layer?'
+. ./myread
+case "$ans" in
+y|Y) 
+       val="$define"
+       ;;     
+*)      
+       echo "Ok, doing things the stdio way"
+       val="$undef"
+       ;;
 esac
+set useperlio
+eval $setvar 
 
-    rp="Any special flags to pass to $ld to create a dynamically loaded library?"
-    . ./myread
-    case "$ans" in
-    none) lddlflags=' ' ;;
-    *) lddlflags="$ans" ;;
-    esac
+: Check how to convert floats to strings.
+echo " "
+echo "Checking for an efficient way to convert floats to strings."
+$cat >try.c <<'EOP'
+#ifdef TRY_gconvert
+#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
+char *myname = "gconvert";
+#endif
+#ifdef TRY_gcvt
+#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
+char *myname = "gcvt";
+#endif
+#ifdef TRY_sprintf
+#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
+char *myname = "sprintf";
+#endif
 
-       cat <<EOM
+#include <stdio.h>
 
-Some systems may require passing special flags to $cc to indicate that
-the resulting executable will use dynamic linking.  To use no flags,
-say "none".
+int
+checkit(expect, got)
+char *expect;
+char *got;
+{
+    if (strcmp(expect, got)) {
+               printf("%s oddity:  Expected %s, got %s\n",
+                       myname, expect, got);
+               exit(1);
+       }
+}
 
-EOM
-    case "$ccdlflags" in
-    '') case "$osname" in
-               hpux)   dflt='-Wl,-E' ;;
-               linux)  dflt='-rdynamic' ;;
-               next)   dflt='none' ;;
-               sunos)  dflt='none' ;;
-               *)      dflt='none' ;;
-           esac ;;
-    *)  dflt="$ccdlflags" ;;
-    esac
-    rp="Any special flags to pass to $cc to use dynamic loading?"
-    . ./myread
-    case "$ans" in
-    none) ccdlflags=' ' ;;
-    *) ccdlflags="$ans" ;;
-    esac
-    ;;
-*)  usedl="$undef"
-       ld='ld'
-    dlsrc='dl_none.xs'
-    lddlflags=''
-    ccdlflags=''
-    ;;
+int
+main()
+{ 
+       char buf[64]; 
+       buf[63] = '\0';
+
+       /* This must be 1st test on (which?) platform */
+       /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
+       Gconvert(0.1, 8, 0, buf);
+       checkit("0.1", buf);
+
+       Gconvert(1.0, 8, 0, buf); 
+       checkit("1", buf);
+
+       Gconvert(0.0, 8, 0, buf); 
+       checkit("0", buf);
+
+       Gconvert(-1.0, 8, 0, buf); 
+       checkit("-1", buf);
+
+       /* Some Linux gcvt's give 1.e+5 here. */
+       Gconvert(100000.0, 8, 0, buf); 
+       checkit("100000", buf);
+       
+       /* Some Linux gcvt's give -1.e+5 here. */
+       Gconvert(-100000.0, 8, 0, buf); 
+       checkit("-100000", buf);
+
+       exit(0);
+}
+EOP
+case "$d_Gconvert" in
+gconvert*) xxx_list='gconvert gcvt sprintf' ;;
+gcvt*) xxx_list='gcvt gconvert sprintf' ;;
+sprintf*) xxx_list='sprintf gconvert gcvt' ;;
+*) xxx_list='gconvert gcvt sprintf' ;;
+esac
+
+for xxx_convert in $xxx_list; do
+       echo "Trying $xxx_convert"
+       $rm -f try try$_o
+       set try -DTRY_$xxx_convert
+       if eval $compile; then
+               echo "$xxx_convert" found. >&4
+               if ./try; then
+                       echo "I'll use $xxx_convert to convert floats into a string." >&4
+                       break;
+               else
+                       echo "...But $xxx_convert didn't work as I expected."
+               fi
+       else
+               echo "$xxx_convert NOT found." >&4
+       fi
+done
+               
+case "$xxx_convert" in
+gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
+gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
+*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
+esac
+
+: Initialize h_fcntl
+h_fcntl=false
+
+: Initialize h_sysfile
+h_sysfile=false
+
+: access call always available on UNIX
+set access d_access
+eval $inlibc
+
+: locate the flags for 'access()'
+case "$d_access" in
+"$define")
+       echo " "
+       $cat >access.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+main() {
+       exit(R_OK);
+}
+EOCP
+       : check sys/file.h first, no particular reason here
+       if $test `./findhdr sys/file.h` && \
+               $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
+               h_sysfile=true;
+               echo "<sys/file.h> defines the *_OK access constants." >&4
+       elif $test `./findhdr fcntl.h` && \
+               $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
+               h_fcntl=true;
+               echo "<fcntl.h> defines the *_OK access constants." >&4
+       elif $test `./findhdr unistd.h` && \
+               $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
+               echo "<unistd.h> defines the *_OK access constants." >&4
+       else
+               echo "I can't find the four *_OK access constants--I'll use mine." >&4
+       fi
+       ;;
+esac
+$rm -f access*
+
+: see if alarm exists
+set alarm d_alarm
+eval $inlibc
+
+: Look for GNU-cc style attribute checking
+echo " "
+echo "Checking whether your compiler can handle __attribute__ ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+               echo "Your C compiler doesn't fully support __attribute__."
+               val="$undef"
+       else
+               echo "Your C compiler supports __attribute__."
+               val="$define"
+       fi
+else
+       echo "Your C compiler doesn't seem to understand __attribute__ at all."
+       val="$undef"
+fi
+set d_attribut
+eval $setvar
+$rm -f attrib*
+
+: see if bcmp exists
+set bcmp d_bcmp
+eval $inlibc
+
+: see if bcopy exists
+set bcopy d_bcopy
+eval $inlibc
+
+: see if this is a unistd.h system
+set unistd.h i_unistd
+eval $inhdr
+
+: see if getpgrp exists
+set getpgrp d_getpgrp
+eval $inlibc
+
+case "$d_getpgrp" in
+"$define")
+       echo " "
+       echo "Checking to see which flavor of getpgrp is in use..."
+       $cat >set.c <<EOP
+#$i_unistd I_UNISTD
+#include <sys/types.h>
+#ifdef I_UNISTD
+#  include <unistd.h>
+#endif
+main()
+{
+       if (getuid() == 0) {
+               printf("(I see you are running Configure as super-user...)\n");
+               setuid(1);
+       }
+#ifdef TRY_BSD_PGRP
+       if (getpgrp(1) == 0)
+               exit(0);
+#else
+       if (getpgrp() > 0)
+               exit(0);
+#endif
+       exit(1);
+}
+EOP
+       if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
+               val="$define"
+       elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
+               val="$undef"
+       else
+               echo "I can't seem to compile and run the test program."
+               if ./usg; then
+                       xxx="a USG one, i.e. you use getpgrp()."
+               else
+                       # SVR4 systems can appear rather BSD-ish.
+                       case "$i_unistd" in
+                       $undef)
+                               xxx="a BSD one, i.e. you use getpgrp(pid)."
+                               val="$define"
+                               ;;
+                       $define)
+                               xxx="probably a USG one, i.e. you use getpgrp()."
+                               val="$undef"
+                               ;;
+                       esac
+               fi
+               echo "Assuming your getpgrp is $xxx" >&4
+       fi
+       ;;
+*) val="$undef";;
+esac
+set d_bsdgetpgrp
+eval $setvar
+$rm -f set set.c
+
+: see if setpgrp exists
+set setpgrp d_setpgrp
+eval $inlibc
+
+case "$d_setpgrp" in
+"$define")
+       echo " "
+       echo "Checking to see which flavor of setpgrp is in use..."
+       $cat >set.c <<EOP
+#$i_unistd I_UNISTD
+#include <sys/types.h>
+#ifdef I_UNISTD
+#  include <unistd.h>
+#endif
+main()
+{
+       if (getuid() == 0) {
+               printf("(I see you are running Configure as super-user...)\n");
+               setuid(1);
+       }
+#ifdef TRY_BSD_PGRP
+       if (-1 == setpgrp(1, 1))
+               exit(0);
+#else
+       if (setpgrp() != -1)
+               exit(0);
+#endif
+       exit(1);
+}
+EOP
+       if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
+               val="$define"
+       elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
+               val="$undef"
+       else
+               echo "(I can't seem to compile and run the test program.)"
+               if ./usg; then
+                       xxx="a USG one, i.e. you use setpgrp()."
+               else
+                       # SVR4 systems can appear rather BSD-ish.
+                       case "$i_unistd" in
+                       $undef)
+                               xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
+                               val="$define"
+                               ;;
+                       $define)
+                               xxx="probably a USG one, i.e. you use setpgrp()."
+                               val="$undef"
+                               ;;
+                       esac
+               fi
+               echo "Assuming your setpgrp is $xxx" >&4
+       fi
+       ;;
+*) val="$undef";;
+esac
+set d_bsdsetpgrp
+eval $setvar
+$rm -f set set.c
+: see if bzero exists
+set bzero d_bzero
+eval $inlibc
+
+: check for lengths of integral types
+echo " "
+case "$intsize" in
+'')
+       echo "Checking to see how big your integers are..." >&4
+       $cat >intsize.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("intsize=%d;\n", sizeof(int));
+       printf("longsize=%d;\n", sizeof(long));
+       printf("shortsize=%d;\n", sizeof(short));
+       exit(0);
+}
+EOCP
+       set intsize
+       if eval $compile && ./intsize > /dev/null; then
+               eval `./intsize`
+               echo "Your integers are $intsize bytes long."
+               echo "Your long integers are $longsize bytes long."
+               echo "Your short integers are $shortsize bytes long."
+       else
+               $cat >&4 <<EOM
+!
+Help! I can't compile and run the intsize test program: please enlighten me!
+(This is probably a misconfiguration in your system or libraries, and
+you really ought to fix it.  Still, I'll try anyway.)
+!
+EOM
+               dflt=4
+               rp="What is the size of an integer (in bytes)?"
+               . ./myread
+               intsize="$ans"
+               dflt=$intsize
+               rp="What is the size of a long integer (in bytes)?"
+               . ./myread
+               longsize="$ans"
+               dflt=2
+               rp="What is the size of a short integer (in bytes)?"
+               . ./myread
+               shortsize="$ans"
+       fi
+       ;;
+esac
+$rm -f intsize intsize.*
+
+: see if signal is declared as pointer to function returning int or void
+echo " "
+xxx=`./findhdr signal.h`
+$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
+if $contains 'int.*\*[         ]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
+elif $contains 'void.*\*[      ]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have void (*signal())()." >&4
+       val="$define"
+elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
+elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have void (*signal())()." >&4
+       val="$define"
+else
+       case "$d_voidsig" in
+       '')
+       echo "I can't determine whether signal handler returns void or int..." >&4
+               dflt=void
+               rp="What type does your signal handler return?"
+               . ./myread
+               case "$ans" in
+               v*) val="$define";;
+               *) val="$undef";;
+               esac;;
+       "$define")
+               echo "As you already told me, signal handler returns void." >&4
+               val="$define"
+               ;;
+       *)      echo "As you already told me, signal handler returns int." >&4
+               val="$undef"
+               ;;
+       esac
+fi
+set d_voidsig
+eval $setvar
+case "$d_voidsig" in
+"$define") signal_t="void";;
+*) signal_t="int";;
+esac
+$rm -f $$.tmp
+
+: check for ability to cast large floats to 32-bit ints.
+echo " "
+echo 'Checking whether your C compiler can cast large floats to int32.' >&4
+if $test "$intsize" -eq 4; then
+       xxx=int
+else
+       xxx=long
+fi
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(3); }
+main()
+{
+       $xxx i32;
+       double f;
+       int result = 0;
+       signal(SIGFPE, blech);
+
+       f = (double) 0x7fffffff;
+       f = 10 * f;
+       i32  = ($xxx) f;
+
+       if (i32 != ($xxx) f)
+               result |= 1;
+       exit(result);
+}
+EOCP
+set try
+if eval $compile; then
+       ./try
+       yyy=$?
+else
+       echo "(I can't seem to compile the test program--assuming it can't)"
+       yyy=1
+fi
+case "$yyy" in
+0)     val="$define"
+       echo "Yup, it can."
+       ;;
+*)     val="$undef"
+       echo "Nope, it can't."
+       ;;
+esac
+set d_casti32
+eval $setvar
+$rm -f try try.*
+
+: check for ability to cast negative floats to unsigned
+echo " "
+echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(7); }
+$signal_t blech_in_list() { exit(4); }
+unsigned long dummy_long(p) unsigned long p; { return p; }
+unsigned int dummy_int(p) unsigned int p; { return p; }
+unsigned short dummy_short(p) unsigned short p; { return p; }
+main()
+{
+       double f = -123.;
+       unsigned long along;
+       unsigned int aint;
+       unsigned short ashort;
+       int result = 0;
+
+       signal(SIGFPE, blech);
+       along = (unsigned long)f;
+       aint = (unsigned int)f;
+       ashort = (unsigned short)f;
+       if (along != (unsigned long)-123)
+               result |= 1;
+       if (aint != (unsigned int)-123)
+               result |= 1;
+       if (ashort != (unsigned short)-123)
+               result |= 1;
+       f = (double)0x40000000;
+       f = f + f;
+       along = 0;
+       along = (unsigned long)f;
+       if (along != 0x80000000)
+               result |= 2;
+       f -= 1.;
+       along = 0;
+       along = (unsigned long)f;
+       if (along != 0x7fffffff)
+               result |= 1;
+       f += 2.;
+       along = 0;
+       along = (unsigned long)f;
+       if (along != 0x80000001)
+               result |= 2;
+       if (result)
+               exit(result);
+       signal(SIGFPE, blech_in_list);
+       f = 123.;
+       along = dummy_long((unsigned long)f);
+       aint = dummy_int((unsigned int)f);
+       ashort = dummy_short((unsigned short)f);
+       if (along != (unsigned long)123)
+               result |= 4;
+       if (aint != (unsigned int)123)
+               result |= 4;
+       if (ashort != (unsigned short)123)
+               result |= 4;
+       exit(result);
+
+}
+EOCP
+set try
+if eval $compile; then
+       ./try
+       castflags=$?
+else
+       echo "(I can't seem to compile the test program--assuming it can't)"
+       castflags=7
+fi
+case "$castflags" in
+0)     val="$define"
+       echo "Yup, it can."
+       ;;
+*)     val="$undef"
+       echo "Nope, it can't."
+       ;;
+esac
+set d_castneg
+eval $setvar
+$rm -f try.*
+
+: see if vprintf exists
+echo " "
+if set vprintf val -f d_vprintf; eval $csym; $val; then
+       echo 'vprintf() found.' >&4
+       val="$define"
+       $cat >vprintf.c <<'EOF'
+#include <varargs.h>
+
+main() { xxx("foo"); }
+
+xxx(va_alist)
+va_dcl
+{
+       va_list args;
+       char buf[10];
+
+       va_start(args);
+       exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
+}
+EOF
+       set vprintf
+       if eval $compile && ./vprintf; then
+               echo "Your vsprintf() returns (int)." >&4
+               val2="$undef"
+       else
+               echo "Your vsprintf() returns (char*)." >&4
+               val2="$define"
+       fi
+else
+       echo 'vprintf() NOT found.' >&4
+               val="$undef"
+               val2="$undef"
+fi
+set d_vprintf
+eval $setvar
+val=$val2
+set d_charvspr
+eval $setvar
+
+: see if chown exists
+set chown d_chown
+eval $inlibc
+
+: see if chroot exists
+set chroot d_chroot
+eval $inlibc
+
+: see if chsize exists
+set chsize d_chsize
+eval $inlibc
+
+: check for const keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "const"...' >&4
+$cat >const.c <<'EOCP'
+typedef struct spug { int drokk; } spug;
+main()
+{
+       const char *foo;
+       const spug y;
+}
+EOCP
+if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
+       val="$define"
+       echo "Yup, it does."
+else
+       val="$undef"
+       echo "Nope, it doesn't."
+fi
+set d_const
+eval $setvar
+
+: see if crypt exists
+echo " "
+if set crypt val -f d_crypt; eval $csym; $val; then
+       echo 'crypt() found.' >&4
+       val="$define"
+       cryptlib=''
+else
+       cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
+       if $test -z "$cryptlib"; then
+               cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
+       else
+               cryptlib=-lcrypt
+       fi
+       if $test -z "$cryptlib"; then
+               cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
+       else
+               cryptlib=-lcrypt
+       fi
+       if $test -z "$cryptlib"; then
+               cryptlib=`./loc libcrypt$_a "" $libpth`
+       else
+               cryptlib=-lcrypt
+       fi
+       if $test -z "$cryptlib"; then
+               echo 'crypt() NOT found.' >&4
+               val="$undef"
+       else
+               val="$define"
+       fi
+fi
+set d_crypt
+eval $setvar
+
+: get csh whereabouts
+case "$csh" in
+'csh') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_csh
+eval $setvar
+: Respect a hint or command line value for full_csh.
+case "$full_csh" in
+'') full_csh=$csh ;;
 esac
 
-val="$undef"
-case "$osname" in
-esix*|svr4*)
-    case "$usedl" in
-    $define)
-       $cat <<EOM
+: see if cuserid exists
+set cuserid d_cuserid
+eval $inlibc
+
+: see if this is a limits.h system
+set limits.h i_limits
+eval $inhdr
 
-System V Release 4 systems can support dynamic loading
-only if libperl is created as a shared library.
+: see if this is a float.h system
+set float.h i_float
+eval $inhdr
 
+: See if number of significant digits in a double precision number is known
+echo " "
+$cat >dbl_dig.c <<EOM
+#$i_limits I_LIMITS
+#$i_float I_FLOAT
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+#ifdef I_FLOAT
+#include <float.h>
+#endif
+#ifdef DBL_DIG
+printf("Contains DBL_DIG");
+#endif
 EOM
+$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
+if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
+       echo "DBL_DIG found." >&4
        val="$define"
-       ;;
-    esac ;;
-esac
-set d_shrplib; eval $setvar
-case "$d_shrplib" in
-$define)
-    cat <<EOM >&4
+else
+       echo "DBL_DIG NOT found." >&4
+       val="$undef"
+fi
+$rm -f dbl_dig.?
+set d_dbl_dig
+eval $setvar
 
-Be sure to add the perl source directory to the LD_LIBRARY_PATH
-environment variable before running make:
-    LD_LIBRARY_PATH=`cd ..;pwd`; export LD_LIBRARY_PATH
-or
-    setenv LD_LIBRARY_PATH `cd ..;pwd`
+: see if difftime exists
+set difftime d_difftime
+eval $inlibc
 
-EOM
-;;
-esac
-case "$d_shrplib" in
-$define)
-       case "$shrpdir" in
-       "")     dflt="$archlib/CORE";;
-       *)      dflt="$shrpdir";;
+: see if this is a dirent system
+echo " "
+if xinc=`./findhdr dirent.h`; $test "$xinc"; then
+       val="$define"
+       echo "<dirent.h> found." >&4
+else
+       val="$undef"
+       if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
+               echo "<sys/dir.h> found." >&4
+               echo " "
+       else
+               xinc=`./findhdr sys/ndir.h`
+       fi
+       echo "<dirent.h> NOT found." >&4
+fi
+set i_dirent
+eval $setvar
+
+: Look for type of directory structure.
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+
+case "$direntrytype" in
+''|' ')
+       case "$i_dirent" in
+       $define) guess1='struct dirent' ;;
+       *) guess1='struct direct'  ;;
        esac
-       rp="What directory should we install the shared libperl into?"
-       fn="d~"
-       . ./getfile
-       shrpdir="$ans"
        ;;
-*)     shrpdir='none'
+*)     guess1="$direntrytype"
        ;;
 esac
 
+case "$guess1" in
+'struct dirent') guess2='struct direct' ;;
+*) guess2='struct dirent' ;;
+esac
+               
+if $contains "$guess1" try.c >/dev/null 2>&1; then
+       direntrytype="$guess1"
+       echo "Your directory entries are $direntrytype." >&4
+elif $contains "$guess2" try.c >/dev/null 2>&1; then
+       direntrytype="$guess2"
+       echo "Your directory entries seem to be $direntrytype." >&4
+else
+       echo "I don't recognize your system's directory entries." >&4
+       rp="What type is used for directory entries on this system?"
+       dflt="$guess1"
+       . ./myread
+       direntrytype="$ans"
+fi
+$rm -f try.c
+
+
+: see if the directory entry stores field length
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+if $contains 'd_namlen' try.c >/dev/null 2>&1; then
+       echo "Good, your directory entry keeps length information in d_namlen." >&4
+       val="$define"
+else
+       echo "Your directory entry does not know about the d_namlen field." >&4
+       val="$undef"
+fi
+set d_dirnamlen
+eval $setvar
+$rm -f try.c
+
+: see if dlerror exists
+xxx_runnm="$runnm"
+runnm=false
+set dlerror d_dlerror
+eval $inlibc
+runnm="$xxx_runnm"
+
 : see if dlfcn is available
 set dlfcn.h i_dlfcn
 eval $inhdr
@@ -5117,156 +6528,52 @@ main()
     int mode = RTLD_LAZY ;
 #endif
     handle = dlopen("./dyna.$dlext", mode) ;
-    if (handle == NULL) {
-        printf ("1\n") ;
-           exit(0);
-    }
-    symbol = dlsym(handle, "fred") ;
-    if (symbol == NULL) {
-               /* try putting a leading underscore */
-        symbol = dlsym(handle, "_fred") ;
-        if (symbol == NULL) {
-            printf ("2\n") ;
-               exit(0);
-               }
-        printf ("3\n") ;
-    }
-    else
-        printf ("4\n") ;
-       exit(0);
-}
-EOM
-       if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
-               $ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && 
-               $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
-               xxx=`./fred`
-               case $xxx in
-               1)      echo "Test program failed using dlopen." >&4
-                       echo "Perhaps you should not use dynamic loading." >&4;;
-               2)      echo "Test program failed using dlsym." >&4
-                       echo "Perhaps you should not use dynamic loading." >&4;;
-               3)      echo "dlsym needs a leading underscore" >&4
-                       val="$define" ;;
-               4)      echo "dlsym doesn't need a leading underscore." >&4;;
-               esac
-       else
-               echo "I can't compile and run the test program." >&4
-       fi
-       ;;
-esac
-               
-$rm -f fred fred.? dyna.$dlext dyna.?
-
-set d_dlsymun
-eval $setvar
-
-: see if setuid scripts can be secure
-$cat <<EOM
-
-Some kernels have a bug that prevents setuid #! scripts from being
-secure.  Some sites have disabled setuid #! scripts because of this.
-
-First let's decide if your kernel supports secure setuid #! scripts.
-(If setuid #! scripts would be secure but have been disabled anyway,
-don't say that they are secure if asked.)
-
-EOM
-
-val="$undef"
-if $test -d /dev/fd; then
-       echo "#!$ls" >reflect
-       chmod +x,u+s reflect
-       ./reflect >flect 2>&1
-       if $contains "/dev/fd" flect >/dev/null; then
-               echo "Congratulations, your kernel has secure setuid scripts!" >&4
-               val="$define"
-       else
-               $cat <<EOM
-If you are not sure if they are secure, I can check but I'll need a
-username and password different from the one you are using right now.
-If you don't have such a username or don't want me to test, simply
-enter 'none'.
-
-EOM
-               rp='Other username to test security of setuid scripts with?'
-               dflt='none'
-               . ./myread
-               case "$ans" in
-               n|none)
-                       case "$d_suidsafe" in
-                       '')     echo "I'll assume setuid scripts are *not* secure." >&4
-                               dflt=n;;
-                       "$undef")
-                               echo "Well, the $hint value is *not* secure." >&4
-                               dflt=n;;
-                       *)      echo "Well, the $hint value *is* secure." >&4
-                               dflt=y;;
-                       esac
-                       ;;
-               *)
-                       $rm -f reflect flect
-                       echo "#!$ls" >reflect
-                       chmod +x,u+s reflect
-                       echo >flect
-                       chmod a+w flect
-                       echo '"su" will (probably) prompt you for '"$ans's password."
-                       su $ans -c './reflect >flect'
-                       if $contains "/dev/fd" flect >/dev/null; then
-                               echo "Okay, it looks like setuid scripts are secure." >&4
-                               dflt=y
-                       else
-                               echo "I don't think setuid scripts are secure." >&4
-                               dflt=n
-                       fi
-                       ;;
-               esac
-               rp='Does your kernel have *secure* setuid scripts?'
-               . ./myread
-               case "$ans" in
-               [yY]*)  val="$define";;
-               *)      val="$undef";;
-               esac
-       fi
-else
-       echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
-       val="$undef"
-fi
-set d_suidsafe
-eval $setvar
-
-$rm -f reflect flect
-
-: now see if they want to do setuid emulation
-echo " "
-val="$undef"
-case "$d_suidsafe" in
-"$define")
-       val="$undef"
-       echo "No need to emulate SUID scripts since they are secure here." >& 4
-       ;;
-*)
-       $cat <<EOM
-Some systems have disabled setuid scripts, especially systems where
-setuid scripts cannot be secure.  On systems where setuid scripts have
-been disabled, the setuid/setgid bits on scripts are currently
-useless.  It is possible for $package to detect those bits and emulate
-setuid/setgid in a secure fashion.  This emulation will only work if
-setuid scripts have been disabled in your kernel.
-
+    if (handle == NULL) {
+       printf ("1\n") ;
+       fflush (stdout) ;
+       exit(0);
+    }
+    symbol = dlsym(handle, "fred") ;
+    if (symbol == NULL) {
+       /* try putting a leading underscore */
+       symbol = dlsym(handle, "_fred") ;
+       if (symbol == NULL) {
+           printf ("2\n") ;
+           fflush (stdout) ;
+           exit(0);
+       }
+       printf ("3\n") ;
+    }
+    else
+       printf ("4\n") ;
+    fflush (stdout) ;
+    exit(0);
+}
 EOM
-       case "$d_dosuid" in
-       "$define") dflt=y ;;
-       *) dflt=n ;;
-       esac
-       rp="Do you want to do setuid/setgid emulation?"
-       . ./myread
-       case "$ans" in
-       [yY]*)  val="$define";;
-       *)      val="$undef";;
-       esac
+       : Call the object file tmp-dyna.o in case dlext=o.
+       if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
+               mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
+               $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
+               $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
+               xxx=`./fred`
+               case $xxx in
+               1)      echo "Test program failed using dlopen." >&4
+                       echo "Perhaps you should not use dynamic loading." >&4;;
+               2)      echo "Test program failed using dlsym." >&4
+                       echo "Perhaps you should not use dynamic loading." >&4;;
+               3)      echo "dlsym needs a leading underscore" >&4
+                       val="$define" ;;
+               4)      echo "dlsym doesn't need a leading underscore." >&4;;
+               esac
+       else
+               echo "I can't compile and run the test program." >&4
+       fi
        ;;
 esac
-set d_dosuid
+               
+$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
+
+set d_dlsymun
 eval $setvar
 
 : see if dup2 exists
@@ -5294,7 +6601,7 @@ main() {
 EOCP
 : check sys/file.h first to get FREAD on Sun
 if $test `./findhdr sys/file.h` && \
-               $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then
+               set open3 -DI_SYS_FILE && eval $compile; then
        h_sysfile=true;
        echo "<sys/file.h> defines the O_* constants..." >&4
        if ./open3; then
@@ -5305,7 +6612,7 @@ if $test `./findhdr sys/file.h` && \
                val="$undef"
        fi
 elif $test `./findhdr fcntl.h` && \
-               $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then
+               set open3 -DI_FCNTL && eval $compile; then
        h_fcntl=true;
        echo "<fcntl.h> defines the O_* constants..." >&4
        if ./open3; then
@@ -5355,7 +6662,8 @@ main() {
        exit(0);
 }
 EOCP
-       if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
+       set try
+       if eval $compile; then
                o_nonblock=`./try`
                case "$o_nonblock" in
                '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
@@ -5433,8 +6741,10 @@ main()
        exit(0);                                /* Bye bye, thank you for playing! */
 }
 EOCP
-       if $cc $ccflags $ldflags try.c -o try >/dev/null; 2>&1; then
-               echo "./try >try.out 2>try.ret 3>try.err || exit 4" >mtry
+       set try
+       if eval $compile; then
+               echo "$startsh" >mtry
+               echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
                chmod +x mtry
                ./mtry >/dev/null 2>&1
                case $? in
@@ -5469,7 +6779,7 @@ EOCP
                *) echo "However, your read() returns '$status' on EOF??";;
                esac
                val="$define"
-               if test "$status" -eq "$rd_nodata"; then
+               if test "$status" = "$rd_nodata"; then
                        echo "WARNING: you can't distinguish between EOF and no data!"
                        val="$undef"
                fi
@@ -5531,6 +6841,14 @@ eval $inlibc
 set fsetpos d_fsetpos
 eval $inlibc
 
+: see if gethostbyaddr exists
+set gethostbyaddr d_gethbyaddr
+eval $inlibc
+
+: see if gethostbyname exists
+set gethostbyname d_gethbyname
+eval $inlibc
+
 : see if gethostent exists
 set gethostent d_gethent
 eval $inlibc
@@ -5539,8 +6857,24 @@ eval $inlibc
 set getlogin d_getlogin
 eval $inlibc
 
-: see if getpgrp exists
-set getpgrp d_getpgrp
+: see if getnetbyaddr exists
+set getnetbyaddr d_getnbyaddr
+eval $inlibc
+
+: see if getnetbyname exists
+set getnetbyname d_getnbyname
+eval $inlibc
+
+
+: see if getprotobyname exists
+set getprotobyname d_getpbyname
+eval $inlibc
+
+: see if getprotobynumber exists
+set getprotobynumber d_getpbynumber
+eval $inlibc
+: see if getpgid exists
+set getpgid d_getpgid
 eval $inlibc
 
 : see if getpgrp2 exists
@@ -5555,6 +6889,33 @@ eval $inlibc
 set getpriority d_getprior
 eval $inlibc
 
+
+: see if getservbyname exists
+set getservbyname d_getsbyname
+eval $inlibc
+
+: see if getservbyport exists
+set getservbyport d_getsbyport
+eval $inlibc
+: see if gettimeofday or ftime exists
+set gettimeofday d_gettimeod
+eval $inlibc
+case "$d_gettimeod" in
+"$undef")
+       set ftime d_ftime 
+       eval $inlibc
+       ;;
+*)
+       val="$undef"; set d_ftime; eval $setvar
+       ;;
+esac
+case "$d_gettimeod$d_ftime" in
+"$undef$undef")
+       echo " "
+       echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
+       ;;
+esac
+
 : see if this is a netinet/in.h or sys/in.h system
 set netinet/in.h i_niin sys/in.h i_sysin
 eval $inhdr
@@ -5648,6 +7009,10 @@ set d_strchr; eval $setvar
 val="$vali"
 set d_index; eval $setvar
 
+: check whether inet_aton exists
+set inet_aton d_inetaton
+eval $inlibc
+
 : Look for isascii
 echo " "
 $cat >isascii.c <<'EOCP'
@@ -5661,7 +7026,8 @@ main() {
                exit(1);
 }
 EOCP
-if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
+set isascii
+if eval $compile; then
        echo "isascii() found." >&4
        val="$define"
 else
@@ -5787,7 +7153,7 @@ case "$ans" in
 y*|true)
        usemymalloc='y'
        mallocsrc='malloc.c'
-       mallocobj='malloc.o'
+       mallocobj="malloc$_o"
        d_mymalloc="$define"
        case "$libs" in
        *-lmalloc*)
@@ -5866,6 +7232,81 @@ eval $inlibc
 set poll d_poll
 eval $inlibc
 
+
+: see whether the various POSIXish _yields exist within given cccmd
+$cat >try.c <<EOP
+#include <pthread.h>
+main() {
+       YIELD();
+       exit(0);
+}
+EOP
+: see if pthread_yield exists within given cccmd,
+: if we do not usethreads this may well end up undef.
+set try -DYIELD=pthread_yield
+if eval $compile; then
+    val="$define"
+    echo 'pthread_yield() found.' >&4
+else
+    val="$undef"
+    echo 'pthread_yield() NOT found.' >&4
+fi
+set d_pthread_yield
+eval $setvar
+
+: see if sched_yield exists within given cccmd,
+: if we do not usethreads this may well end up undef.
+set try -DYIELD=sched_yield
+if eval $compile; then
+    val="$define"
+    echo 'sched_yield() found.' >&4
+else
+    val="$undef"
+    echo 'sched_yield() NOT found.' >&4
+fi
+set d_sched_yield
+eval $setvar
+$rm -f try try.*
+
+: test whether pthreads are created in joinable -- aka undetached -- state
+if test "X$usethreads" != X; then
+       echo >&4 "Checking whether pthreads are created joinable."
+       $cat >try.c <<'EOCP'
+#include <pthread.h>
+#include <stdio.h>
+int main() {
+    pthread_attr_t attr;
+    int detachstate;
+    printf("%s\n",
+       pthread_attr_init(&attr) == 0 &&
+        pthread_attr_getdetachstate(&attr, &detachstate) == 0 &&
+        detachstate == PTHREAD_CREATE_DETACHED ?
+        "detached" : "joinable");
+    exit(0);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try`
+               case "$yyy" in
+                       detached) echo "Nope, they aren't." ;;
+                       *) echo "Yup, they are." ;;
+               esac
+       else
+               echo "(I can't execute the test program--assuming they are.)"
+               yyy=joinable
+       fi
+       $rm -f try try.*
+       case "$yyy" in
+               detached) val="$undef" ;;
+               *) val="$define" ;;
+       esac
+       set d_pthreads_created_joinable
+       eval $setvar
+else
+    d_pthreads_created_joinable="$undef"
+fi
+
 : see if this is a pwd.h system
 set pwd.h i_pwd
 eval $inhdr
@@ -5958,13 +7399,58 @@ eval $inlibc
 set rmdir d_rmdir
 eval $inlibc
 
+: see if memory.h is available.
+val=''
+set memory.h val
+eval $inhdr
+
+: See if it conflicts with string.h
+case "$val" in
+$define)
+       case "$strings" in
+       '') ;;
+       *)
+               $cppstdin $cppflags $cppminus < $strings > mem.h
+               if $contains 'memcpy' mem.h >/dev/null 2>&1; then
+                       echo " "
+                       echo "We won't be including <memory.h>."
+                       val="$undef"
+               fi
+               $rm -f mem.h
+               ;;
+       esac
+esac
+set i_memory
+eval $setvar
+
 : can bcopy handle overlapping blocks?
 val="$undef"
 case "$d_bcopy" in
 "$define")
        echo " "
        echo "Checking to see if your bcopy() can do overlapping copies..." >&4
-       $cat >foo.c <<'EOCP'
+       $cat >try.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+#  include <memory.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#ifdef I_STRING
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif
+#ifdef I_UNISTD
+#  include <unistd.h>  /* Needed for NetBSD */
+#endif
 main()
 {
 char buf[128], abc[128];
@@ -5990,19 +7476,26 @@ for (align = 7; align >= 0; align--) {
 exit(0);
 }
 EOCP
-       if $cc $ccflags $ldflags foo.c -o safebcpy $libs >/dev/null 2>&1; then
-               if ./safebcpy 2>/dev/null; then
+       set try
+       if eval $compile; then
+               if ./try 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
                else
                        echo "It can't, sorry."
+                       case "$d_memmove" in
+                       "$define") echo "But that's Ok since you have memmove()." ;;
+                       esac
                fi
        else
                echo "(I can't compile the test program, so we'll assume not...)"
+               case "$d_memmove" in
+               "$define") echo "But that's Ok since you have memmove()." ;;
+               esac
        fi
        ;;
 esac
-$rm -f foo.* safebcpy core
+$rm -f try.* try core
 set d_safebcpy
 eval $setvar
 
@@ -6012,7 +7505,28 @@ case "$d_memcpy" in
 "$define")
        echo " "
        echo "Checking to see if your memcpy() can do overlapping copies..." >&4
-       $cat >foo.c <<'EOCP'
+       $cat >try.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+#  include <memory.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#ifdef I_STRING
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif
+#ifdef I_UNISTD
+#  include <unistd.h>  /* Needed for NetBSD */
+#endif
 main()
 {
 char buf[128], abc[128];
@@ -6021,6 +7535,8 @@ int len;
 int off;
 int align;
 
+/* Copy "abcde..." string to char abc[] so that gcc doesn't
+   try to store the string in read-only memory. */
 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
 
 for (align = 7; align >= 0; align--) {
@@ -6038,22 +7554,83 @@ for (align = 7; align >= 0; align--) {
 exit(0);
 }
 EOCP
-       if $cc $ccflags $ldflags foo.c -o safemcpy $libs >/dev/null 2>&1; then
-               if ./safemcpy 2>/dev/null; then
+       set try
+       if eval $compile; then
+               if ./try 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
                else
                        echo "It can't, sorry."
+                       case "$d_memmove" in
+                       "$define") echo "But that's Ok since you have memmove()." ;;
+                       esac
                fi
        else
                echo "(I can't compile the test program, so we'll assume not...)"
+               case "$d_memmove" in
+               "$define") echo "But that's Ok since you have memmove()." ;;
+               esac
        fi
        ;;
 esac
-$rm -f foo.* safemcpy core
+$rm -f try.* try core
 set d_safemcpy
 eval $setvar
 
+: can memcmp be trusted to compare relative magnitude?
+val="$undef"
+case "$d_memcmp" in
+"$define")
+       echo " "
+       echo "Checking if your memcmp() can compare relative magnitude..." >&4
+       $cat >try.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+#  include <memory.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#ifdef I_STRING
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif
+#ifdef I_UNISTD
+#  include <unistd.h>  /* Needed for NetBSD */
+#endif
+main()
+{
+char a = -1;
+char b = 0;
+if ((a < b) && memcmp(&a, &b, 1) < 0)
+       exit(1);
+exit(0);
+}
+EOCP
+       set try
+       if eval $compile; then
+               if ./try 2>/dev/null; then
+                       echo "Yes, it can."
+                       val="$define"
+               else
+                       echo "No, it can't (it uses signed chars)."
+               fi
+       else
+               echo "(I can't compile the test program, so we'll assume not...)"
+       fi
+       ;;
+esac
+$rm -f try.* try core
+set d_sanemcmp
+eval $setvar
+
 : see if select exists
 set select d_select
 eval $inlibc
@@ -6095,6 +7672,10 @@ eval $inlibc
 set seteuid d_seteuid
 eval $inlibc
 
+: see if sethostent exists
+set sethostent d_sethent
+eval $inlibc
+
 : see if setlinebuf exists
 set setlinebuf d_setlinebuf
 eval $inlibc
@@ -6139,6 +7720,59 @@ eval $inlibc
 set setsid d_setsid
 eval $inlibc
 
+: see if sfio.h is available
+set sfio.h i_sfio
+eval $inhdr
+
+
+: see if sfio library is available
+case "$i_sfio" in
+$define)
+       val=''
+       set sfreserve val
+       eval $inlibc
+       ;;
+*)
+       val="$undef"
+       ;;
+esac
+: Ok, but do we want to use it.
+case "$val" in
+$define)
+       case "$usesfio" in
+       true|$define|[yY]*) dflt='y';;
+       *) dflt='n';;
+       esac
+       echo "$package can use the sfio library, but it is experimental."
+       rp="You seem to have sfio available, do you want to try using it?"
+       . ./myread
+       case "$ans" in
+       y|Y) ;;
+       *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
+               val="$undef"
+               : Remove sfio from list of libraries to use
+               set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
+               shift
+               libs="$*"
+               echo "libs = $libs" >&4
+               ;;
+       esac
+       ;;
+*)     case "$usesfio" in
+       true|$define|[yY]*)
+               echo "Sorry, cannot find sfio on this machine" >&4
+               echo "Ignoring your setting of usesfio=$usesfio" >&4
+               ;;
+       esac
+       ;;
+esac
+set d_sfio
+eval $setvar
+case "$d_sfio" in
+$define) usesfio='true';;
+*) usesfio='false';;
+esac
+
 : see if shmctl exists
 set shmctl d_shmctl
 eval $inlibc
@@ -6190,16 +7824,89 @@ echo " "
 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
 *"$undef"*) h_shm=false;;
 esac
-: we could also check for sys/ipc.h ...
-if $h_shm && $test `./findhdr sys/shm.h`; then
-       echo "You have the full shm*(2) library." >&4
-       val="$define"
-else
-       echo "You don't have the full shm*(2) library." >&4
-       val="$undef"
-fi
-set d_shm
+: we could also check for sys/ipc.h ...
+if $h_shm && $test `./findhdr sys/shm.h`; then
+       echo "You have the full shm*(2) library." >&4
+       val="$define"
+else
+       echo "You don't have the full shm*(2) library." >&4
+       val="$undef"
+fi
+set d_shm
+eval $setvar
+
+echo " "
+: see if we have sigaction
+if set sigaction val -f d_sigaction; eval $csym; $val; then
+       echo 'sigaction() found.' >&4
+       val="$define"
+else
+       echo 'sigaction NOT found.' >&4
+       val="$undef"
+fi
+$cat > try.c <<'EOP'
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+main()
+{
+    struct sigaction act, oact;
+}
+EOP
+set try
+if eval $compile; then
+       :
+else
+       echo "But you don't seem to have a useable struct sigaction." >&4
+       val="$undef"
+fi
+set d_sigaction; eval $setvar
+$rm -f try try$_o try.c
+
+: see if sigsetjmp exists
+echo " "
+case "$d_sigsetjmp" in
+'')
+       $cat >try.c <<'EOP'
+#include <setjmp.h>
+sigjmp_buf env;
+int set = 1;
+main()
+{
+       if (sigsetjmp(env,1))
+               exit(set);
+       set = 0;
+       siglongjmp(env, 1);
+       exit(1);
+}
+EOP
+       set try
+       if eval $compile; then
+               if ./try >/dev/null 2>&1; then
+                       echo "POSIX sigsetjmp found." >&4
+                       val="$define"
+               else
+                       $cat >&4 <<EOM
+Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
+I'll ignore them.
+EOM
+                       val="$undef"
+               fi
+       else
+               echo "sigsetjmp not found." >&4
+               val="$undef"
+       fi
+       ;;
+*) val="$d_sigsetjmp"
+       case "$d_sigsetjmp" in
+       $define) echo "POSIX sigsetjmp found." >&4;;
+       $undef) echo "sigsetjmp not found." >&4;;
+       esac
+       ;;
+esac
+set d_sigsetjmp
 eval $setvar
+$rm -f try.c try
 
 socketlib=''
 sockethdr=''
@@ -6222,10 +7929,10 @@ else
                : we will have to assume that it supports the 4.2 BSD interface
                d_oldsock="$undef"
        else
-               echo "You don't have Berkeley networking in libc.a..." >&4
-               if test -f /usr/lib/libnet.a; then
-                       ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) ||  \
-                       ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list
+               echo "You don't have Berkeley networking in libc$_a..." >&4
+               if test -f /usr/lib/libnet$_a; then
+                       ( (nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) ||  \
+                       ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list
                        if $contains socket libc.list >/dev/null 2>&1; then
                        echo "...but the Wollongong group seems to have hacked it in." >&4
                                socketlib="-lnet"
@@ -6238,7 +7945,7 @@ else
                                        d_oldsock="$define"
                                fi
                        else
-                               echo "or even in libnet.a, which is peculiar." >&4
+                               echo "or even in libnet$_a, which is peculiar." >&4
                                d_socket="$undef"
                                d_oldsock="$undef"
                        fi
@@ -6320,7 +8027,7 @@ $cat >try.c <<EOP
 #include <stdio.h>
 #define FILE_ptr(fp)   $stdio_ptr
 #define FILE_cnt(fp)   $stdio_cnt
-main() { 
+main() {
        FILE *fp = fopen("try.c", "r");
        char c = getc(fp);
        if (
@@ -6332,7 +8039,8 @@ main() {
 }
 EOP
 val="$undef"
-if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
+set try
+if eval $compile; then
        if ./try; then
                echo "Your stdio acts pretty std."
                val="$define"
@@ -6370,7 +8078,7 @@ $define)
 #include <stdio.h>
 #define FILE_base(fp)  $stdio_base
 #define FILE_bufsiz(fp)        $stdio_bufsiz
-main() { 
+main() {
        FILE *fp = fopen("try.c", "r");
        char c = getc(fp);
        if (
@@ -6381,9 +8089,10 @@ main() {
        exit(1);
 }
 EOP
-       if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
+       set try
+       if eval $compile; then
                if ./try; then
-                       echo "Even its _base field acts std."
+                       echo "And its _base field acts std."
                        val="$define"
                else
                        echo "But its _base field isn't std."
@@ -6462,6 +8171,18 @@ else
        d_strerrm='"unknown"'
 fi
 
+: see if strtod exists
+set strtod d_strtod
+eval $inlibc
+
+: see if strtol exists
+set strtol d_strtol
+eval $inlibc
+
+: see if strtoul exists
+set strtoul d_strtoul
+eval $inlibc
+
 : see if strxfrm exists
 set strxfrm d_strxfrm
 eval $inlibc
@@ -6498,275 +8219,65 @@ esac;
 eval "varval=\$$var";
 case "$varval" in
 "")
-       $rm -f temp.c;
-       for inc in $inclist; do
-               echo "#include <$inc>" >>temp.c;
-       done;
-       $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
-       if $contains $type temp.E >/dev/null 2>&1; then
-               eval "$var=\$type";
-       else
-               eval "$var=\$def";
-       fi;
-       $rm -f temp.?;;
-*) eval "$var=\$varval";;
-esac'
-
-: see if this is a sys/times.h system
-set sys/times.h i_systimes
-eval $inhdr
-
-: see if times exists
-echo " "
-if set times val -f d_times; eval $csym; $val; then
-       echo 'times() found.' >&4
-       d_times="$define"
-       inc=''
-       case "$i_systimes" in
-       "$define") inc='sys/times.h';;
-       esac
-       set clock_t clocktype long stdio.h sys/types.h $inc
-       eval $typedef
-       dflt="$clocktype"
-       echo " "
-       rp="What type is returned by times() on this system?"
-       . ./myread
-       clocktype="$ans"
-else
-       echo 'times() NOT found, hope that will do.' >&4
-       d_times="$undef"
-       clocktype='int'
-fi
-
-: see if truncate exists
-set truncate d_truncate
-eval $inlibc
-
-: see if tzname[] exists
-echo " "
-if set tzname val -a d_tzname; eval $csym; $val; then
-       val="$define"
-       echo 'tzname[] found.' >&4
-else
-       val="$undef"
-       echo 'tzname[] NOT found.' >&4
-fi
-set d_tzname
-eval $setvar
-
-: see if umask exists
-set umask d_umask
-eval $inlibc
-
-: see if we have to deal with yellow pages, now NIS.
-if $test -d /usr/etc/yp || $test -d /etc/yp; then
-       if $test -f /usr/etc/nibindd; then
-               echo " "
-               echo "I'm fairly confident you're on a NeXT."
-               echo " "
-               rp='Do you get the hosts file via NetInfo?'
-               dflt=y
-               case "$hostcat" in
-               nidump*) ;;
-               '') ;;
-               *) dflt=n;;
-               esac
-               . ./myread
-               case "$ans" in
-               y*) hostcat='nidump hosts .';;
-               *)      case "$hostcat" in
-                       nidump*) hostcat='';;
-                       esac
-                       ;;
-               esac
-       fi
-       case "$hostcat" in
-       nidump*) ;;
-       *)
-               case "$hostcat" in
-               *ypcat*) dflt=y;;
-               '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
-                               dflt=y
-                       else
-                               dflt=n
-                       fi;;
-               *) dflt=n;;
-               esac
-               echo " "
-               rp='Are you getting the hosts file via yellow pages?'
-               . ./myread
-               case "$ans" in
-               y*) hostcat='ypcat hosts';;
-               *) hostcat='cat /etc/hosts';;
-               esac
-               ;;
-       esac
-fi
-
-: now get the host name
-echo " "
-echo "Figuring out host name..." >&4
-case "$myhostname" in
-'') cont=true
-       echo 'Maybe "hostname" will work...'
-       if tans=`sh -c hostname 2>&1` ; then
-               myhostname=$tans
-               phostname=hostname
-               cont=''
-       fi
-       ;;
-*) cont='';;
-esac
-if $test "$cont"; then
-       if ./xenix; then
-               echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
-               if tans=`cat /etc/systemid 2>&1` ; then
-                       myhostname=$tans
-                       phostname='cat /etc/systemid'
-                       echo "Whadyaknow.  Xenix always was a bit strange..."
-                       cont=''
-               fi
-       elif $test -r /etc/systemid; then
-               echo "(What is a non-Xenix system doing with /etc/systemid?)"
-       fi
-fi
-if $test "$cont"; then
-       echo 'No, maybe "uuname -l" will work...'
-       if tans=`sh -c 'uuname -l' 2>&1` ; then
-               myhostname=$tans
-               phostname='uuname -l'
-       else
-               echo 'Strange.  Maybe "uname -n" will work...'
-               if tans=`sh -c 'uname -n' 2>&1` ; then
-                       myhostname=$tans
-                       phostname='uname -n'
-               else
-                       echo 'Oh well, maybe I can mine it out of whoami.h...'
-                       if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
-                               myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
-                               phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
-                       else
-                               case "$myhostname" in
-                               '') echo "Does this machine have an identity crisis or something?"
-                                       phostname='';;
-                               *)
-                                       echo "Well, you said $myhostname before..."
-                                       phostname='echo $myhostname';;
-                               esac
-                       fi
-               fi
-       fi
-fi
-: you do not want to know about this
-set $myhostname
-myhostname=$1
-
-: verify guess
-if $test "$myhostname" ; then
-       dflt=y
-       rp='Your host name appears to be "'$myhostname'".'" Right?"
-       . ./myread
-       case "$ans" in
-       y*) ;;
-       *) myhostname='';;
-       esac
-fi
-
-: bad guess or no guess
-while $test "X$myhostname" = X ; do
-       dflt=''
-       rp="Please type the (one word) name of your host:"
-       . ./myread
-       myhostname="$ans"
-done
-
-: translate upper to lower if necessary
-case "$myhostname" in
-*[A-Z]*)
-       echo "(Normalizing case in your host name)"
-       myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
-       ;;
-esac
-
-case "$myhostname" in
-*.*)
-       dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
-       myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
-       echo "(Trimming domain name from host name--host name is now $myhostname)"
-       ;;
-*) case "$mydomain" in
-       '')
-               $hostcat >hosts
-               dflt=.`$awk "/[0-9].*$myhostname/ {for(i=2; i<=NF;i++) print \\\$i}" \
-                       hosts | $sort | $uniq | \
-                       $sed -n -e "s/$myhostname\.\([a-zA-Z_.]\)/\1/p"`
-               case "$dflt" in
-               .) echo "(You do not have fully-qualified names in /etc/hosts)"
-                       tans=`./loc resolv.conf X /etc /usr/etc`
-                       if $test -f "$tans"; then
-                               echo "(Attempting domain name extraction from $tans)"
-                               dflt=.`egrep '^domain' $tans | $sed 's/domain[  ]*\(.*\)/\1/' \
-                                       | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
-                       fi
-                       ;;
-               esac
-               case "$dflt" in
-               .) echo "(No help from resolv.conf either -- attempting clever guess)"
-                       dflt=.`sh -c domainname 2>/dev/null`
-                       case "$dflt" in
-                       '') dflt='.';;
-                       .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
-                       esac
-                       ;;
-               esac
-               case "$dflt" in
-               .) echo "(Lost all hope -- silly guess then)"
-                       dflt='.uucp'
-                       ;;
-               esac
-               $rm -f hosts
-               ;;
-       *) dflt="$mydomain";;
-       esac;;
-esac
-echo " "
-rp="What is your domain name?"
-. ./myread
-tans="$ans"
-case "$ans" in
-'') ;;
-.*) ;;
-*) tans=".$tans";;
-esac
-mydomain="$tans"
+       $rm -f temp.c;
+       for inc in $inclist; do
+               echo "#include <$inc>" >>temp.c;
+       done;
+       $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
+       if $contains $type temp.E >/dev/null 2>&1; then
+               eval "$var=\$type";
+       else
+               eval "$var=\$def";
+       fi;
+       $rm -f temp.?;;
+*) eval "$var=\$varval";;
+esac'
 
-: translate upper to lower if necessary
-case "$mydomain" in
-*[A-Z]*)
-       echo "(Normalizing case in your domain name)"
-       mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
-       ;;
-esac
+: see if this is a sys/times.h system
+set sys/times.h i_systimes
+eval $inhdr
 
-: a little sanity check here
-case "$phostname" in
-'') ;;
-*)
-       case `$phostname | ./tr '[A-Z]' '[a-z]'` in
-       $myhostname$mydomain|$myhostname) ;;
-       *)
-               case "$phostname" in
-               sed*)
-                       echo "(That doesn't agree with your whoami.h file, by the way.)"
-                       ;;
-               *)
-                       echo "(That doesn't agree with your $phostname command, by the way.)"
-                       ;;
-               esac
-       ;;
+: see if times exists
+echo " "
+if set times val -f d_times; eval $csym; $val; then
+       echo 'times() found.' >&4
+       d_times="$define"
+       inc=''
+       case "$i_systimes" in
+       "$define") inc='sys/times.h';;
        esac
-       ;;
-esac
+       set clock_t clocktype long stdio.h sys/types.h $inc
+       eval $typedef
+       dflt="$clocktype"
+       echo " "
+       rp="What type is returned by times() on this system?"
+       . ./myread
+       clocktype="$ans"
+else
+       echo 'times() NOT found, hope that will do.' >&4
+       d_times="$undef"
+       clocktype='int'
+fi
+
+: see if truncate exists
+set truncate d_truncate
+eval $inlibc
+
+: see if tzname[] exists
+echo " "
+if set tzname val -a d_tzname; eval $csym; $val; then
+       val="$define"
+       echo 'tzname[] found.' >&4
+else
+       val="$undef"
+       echo 'tzname[] NOT found.' >&4
+fi
+set d_tzname
+eval $setvar
+
+: see if umask exists
+set umask d_umask
+eval $inlibc
 
 : see how we will look up host name
 echo " "
@@ -6883,7 +8394,8 @@ case "$d_closedir" in
 #endif 
 int main() { return closedir(opendir(".")); }
 EOM
-       if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
+       set closedir
+       if eval $compile; then
                if ./closedir > /dev/null 2>&1 ; then
                        echo "Yes, it does."
                        val="$undef"
@@ -6971,11 +8483,12 @@ main()
        printf("%d\n", (char *)&try.bar - (char *)&try.foo);
 }
 EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1; then
+       set try
+       if eval $compile; then
                dflt=`./try`
        else
                dflt='8'
-               echo"(I can't seem to compile the test program...)"
+               echo "(I can't seem to compile the test program...)"
        fi
        ;;
 *) dflt="$alignbytes"
@@ -6986,17 +8499,6 @@ rp="Doubles must be aligned on a how-many-byte boundary?"
 alignbytes="$ans"
 $rm -f try.c try
 
-: Define several unixisms.  These can be overridden in hint files.
-ar='ar'
-exe_ext=''
-lib_ext='.a'
-obj_ext='.o'
-path_sep='/'
-: Extra object files needed on this platform.
-archobjs=''
-: Which makefile gets called first.  This is used by make depend.
-firstmakefile='makefile'
-
 : check for ordering of bytes in a long
 case "$byteorder" in
 '')
@@ -7030,7 +8532,8 @@ main()
 }
 EOCP
        xxx_prompt=y
-       if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
+       set try
+       if eval $compile && ./try > /dev/null; then
                dflt=`./try`
                case "$dflt" in
                [1-4][1-4][1-4][1-4]|12345678|87654321)
@@ -7071,11 +8574,11 @@ ACAT(Cir,cus)
 EOCP
 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
-       echo "Oh!  Smells like ANSI's been here."
+       echo "Oh!  Smells like ANSI's been here." >&4
        echo "We can catify or stringify, separately or together!"
        cpp_stuff=42
 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
-       echo "Ah, yes!  The good old days!"
+       echo "Ah, yes!  The good old days!" >&4
        echo "However, in the good old days we don't know how to stringify and"
        echo "catify at the same time."
        cpp_stuff=1
@@ -7104,6 +8607,8 @@ define)
 #endif
 #include <sys/types.h>
 #include <db.h>
+
+#ifndef DB_VERSION_MAJOR
 u_int32_t hash_cb (ptr, size)
 const void *ptr;
 size_t size;
@@ -7114,6 +8619,7 @@ main()
 {
        info.hash = hash_cb;
 }
+#endif
 EOCP
        if $cc $ccflags -c try.c >try.out 2>&1 ; then
                if $contains warning try.out >>/dev/null 2>&1 ; then
@@ -7122,13 +8628,91 @@ EOCP
                        db_hashtype='u_int32_t'
                fi
        else
-               echo "I can't seem to compile the test program." >&4
-               db_hashtype=int
+               : XXX Maybe we should just give up here.
+               db_hashtype=u_int32_t
+               echo "Help:  I can't seem to compile the db test program." >&4
+               echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
        fi
        $rm -f try.*
        echo "Your version of Berkeley DB uses $db_hashtype for hash."
        ;;
-*)     db_hashtype=int
+*)     db_hashtype=u_int32_t
+       ;;
+esac
+
+case "$i_db" in
+$define)
+       : Check db version.
+       echo " "
+       echo "Checking Berkeley DB version ..." >&4
+       $cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#include <sys/types.h>
+#include <stdio.h>
+#include <db.h>
+main()
+{
+#ifdef DB_VERSION_MAJOR        /* DB version >= 2 */
+    int Major, Minor, Patch ;
+    unsigned long Version ;
+    (void)db_version(&Major, &Minor, &Patch) ;
+    printf("You have Berkeley DB Version 2 or greater\n");
+
+    printf("db.h is from Berkeley DB Version %d.%d.%d\n",
+               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
+    printf("libdb is from Berkeley DB Version %d.%d.%d\n",
+               Major, Minor, Patch) ;
+
+    /* check that db.h & libdb are compatible */
+    if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
+       printf("db.h and libdb are incompatible\n") ;
+        exit(3);       
+    }
+
+    printf("db.h and libdb are compatible\n") ;
+
+    Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
+               + DB_VERSION_PATCH ;
+
+    /* needs to be >= 2.3.4 */
+    if (Version < 2003004) {
+    /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
+       printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
+        exit(2);       
+    }
+
+    exit(0);
+#else
+#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
+    printf("You have Berkeley DB Version 1\n");
+    exit(0);   /* DB version < 2: the coast is clear. */
+#else
+    exit(1);   /* <db.h> not Berkeley DB? */
+#endif
+#endif
+}
+EOCP
+       set try
+       if eval $compile && ./try; then
+               echo 'Looks OK.' >&4
+       else
+               echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
+               i_db=$undef
+               case " $libs " in
+               *"-ldb "*)
+                       : Remove db from list of libraries to use
+                       echo "Removing unusable -ldb from library list" >&4
+                       set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
+                       shift
+                       libs="$*"
+                       echo "libs = $libs" >&4
+                       ;;
+               esac
+       fi
+       $rm -f try.*
        ;;
 esac
 
@@ -7144,6 +8728,8 @@ define)
 #endif
 #include <sys/types.h>
 #include <db.h>
+
+#ifndef DB_VERSION_MAJOR
 size_t prefix_cb (key1, key2)
 const DBT *key1;
 const DBT *key2;
@@ -7154,6 +8740,7 @@ main()
 {
        info.prefix = prefix_cb;
 }
+#endif
 EOCP
        if $cc $ccflags -c try.c  >try.out 2>&1 ; then
                if $contains warning try.out >>/dev/null 2>&1 ; then
@@ -7162,13 +8749,15 @@ EOCP
                        db_prefixtype='size_t'
                fi
        else
-               echo "I can't seem to compile the test program." >&4
-               db_prefixtype='int'
+               db_prefixtype='size_t'
+               : XXX Maybe we should just give up here.
+               echo "Help:  I can't seem to compile the db test program." >&4
+               echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
        fi
        $rm -f try.*
        echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
        ;;
-*)     db_prefixtype='int'
+*)     db_prefixtype='size_t'
        ;;
 esac
 
@@ -7188,9 +8777,9 @@ case "$voidflags" in
 '')
        $cat >try.c <<'EOCP'
 #if TRY & 1
-void main() {
+void sub() {
 #else
-main() {
+sub() {
 #endif
        extern void moo();      /* function returning void */
        void (*goo)();          /* ptr to func returning void */
@@ -7208,8 +8797,9 @@ main() {
 #endif
        exit(0);
 }
+main() { sub(); }
 EOCP
-       if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
+       if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
                voidflags=$defvoidused
        echo "It appears to support void to the level $package wants ($defvoidused)."
                if $contains warning .out >/dev/null 2>&1; then
@@ -7218,16 +8808,16 @@ EOCP
                fi
        else
 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
-               if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
+               if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
                        echo "It supports 1..."
-                       if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
+                       if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
                                echo "It also supports 2..."
-                               if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
+                               if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
                                        voidflags=7
                                        echo "And it supports 4 but not 8 definitely."
                                else
                                        echo "It doesn't support 4..."
-                                       if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
+                                       if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
                                                voidflags=11
                                                echo "But it supports 8."
                                        else
@@ -7237,11 +8827,11 @@ echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
                                fi
                        else
                                echo "It does not support 2..."
-                               if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
+                               if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
                                        voidflags=13
                                        echo "But it supports 4 and 8."
                                else
-                                       if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
+                                       if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
                                                voidflags=5
                                                echo "And it supports 4 but has not heard about 8."
                                        else
@@ -7255,11 +8845,10 @@ echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
                fi
        fi
 esac
-: Only prompt user if voidflags is not 15.  If voidflags is 15, then
-: we presume all is well.
 case "$voidflags" in
-15) ;;
-*)     dflt="$voidflags";
+"$defvoidused") ;;
+*)
+       dflt="$voidflags";
        rp="Your void support flags add up to what?"
        . ./myread
        voidflags="$ans"
@@ -7267,6 +8856,32 @@ case "$voidflags" in
 esac
 $rm -f try.* .out
 
+: check for length of double
+echo " "
+case "$doublesize" in
+'')
+       echo "Checking to see how big your double precision numbers are..." >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(double));
+}
+EOCP
+       set try
+       if eval $compile; then
+               doublesize=`./try`
+       else
+               dflt='8'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+               rp="What is the size of a double precision number (in bytes)?"
+               . ./myread
+               doublesize="$ans"
+       fi
+       ;;
+esac
+$rm -f try.c try
+
 : see what type file positions are declared as in the library
 set fpos_t fpostype long stdio.h sys/types.h
 eval $typedef
@@ -7302,20 +8917,25 @@ gidtype="$ans"
 set getgroups d_getgrps
 eval $inlibc
 
-: Find type of 2nd arg to getgroups
+: see if setgroups exists
+set setgroups d_setgrps
+eval $inlibc
+
+
+: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
 echo " "
-case "$d_getgrps" in
-'define')
+case "$d_getgrps$d_setgrps" in
+*define*)
        case "$groupstype" in
        '') dflt="$gidtype" ;;
        *)  dflt="$groupstype" ;;
        esac
        $cat <<EOM
-What is the type of the second argument to getgroups()?  Usually this
-is the same as group ids, $gidtype, but not always.
+What is the type of the second argument to getgroups() and setgroups()?
+Usually this is the same as group ids, $gidtype, but not always.
 
 EOM
-       rp='What type is the second argument to getgroups()?'
+       rp='What type is the second argument to getgroups() and setgroups()?'
        . ./myread
        groupstype="$ans"
        ;;
@@ -7331,6 +8951,26 @@ rp="What type is lseek's offset on this system declared as?"
 . ./myread
 lseektype="$ans"
 
+echo " "
+echo "Checking if your $make program sets \$(MAKE)..." >&4
+case "$make_set_make" in
+'')
+       $sed 's/^X //' > testmake.mak << 'EOF'
+Xall:
+X      @echo 'maketemp="$(MAKE)"'
+EOF
+       case "`$make -f testmake.mak 2>/dev/null`" in
+       *maketemp=*) make_set_make='#' ;;
+       *)      make_set_make="MAKE=$make" ;;
+       esac
+       $rm -f testmake.mak
+       ;;
+esac
+case "$make_set_make" in
+'#') echo "Yup, it does.";;
+*) echo "Nope, it doesn't.";;
+esac
+
 : see what type is used for mode_t
 set mode_t modetype int stdio.h sys/types.h
 eval $typedef
@@ -7338,33 +8978,290 @@ dflt="$modetype"
 echo " "
 rp="What type is used for file modes?"
 . ./myread
-modetype="$ans"
+modetype="$ans"
+
+: Cruising for prototypes
+echo " "
+echo "Checking out function prototypes..." >&4
+$cat >prototype.c <<'EOCP'
+main(int argc, char *argv[]) {
+       exit(0);}
+EOCP
+if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
+       echo "Your C compiler appears to support function prototypes."
+       val="$define"
+else
+       echo "Your C compiler doesn't seem to understand function prototypes."
+       val="$undef"
+fi
+set prototype
+eval $setvar
+$rm -f prototype*
+
+: define a fucntion to check prototypes
+$cat > protochk <<EOSH
+$startsh
+cc="$cc"
+optimize="$optimize"
+ccflags="$ccflags"
+prototype="$prototype"
+define="$define"
+rm=$rm
+EOSH
+
+$cat >> protochk <<'EOSH'
+
+$rm -f try.c
+foo="$1"
+shift
+while test $# -ge 2; do
+       case "$1" in
+               $define) echo "#include <$2>" >> try.c ;;
+               literal) echo "$2" >> try.c ;;
+       esac
+    shift 2
+done
+test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
+cat >> try.c <<'EOCP'
+#ifdef CAN_PROTOTYPE
+#define        _(args) args
+#else
+#define        _(args) ()
+#endif
+EOCP
+echo "$foo" >> try.c
+echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
+$cc $optimize $ccflags -c try.c > /dev/null 2>&1
+status=$?
+$rm -f try.[co]
+exit $status
+EOSH
+chmod +x protochk
+$eunicefix protochk
+
+: see if this is a netdb.h system
+set netdb.h i_netdb
+eval $inhdr
+
+: see what type is used for size_t
+set size_t sizetype 'unsigned int' stdio.h sys/types.h
+eval $typedef
+dflt="$sizetype"
+echo " "
+rp="What type is used for the length parameter for string functions?"
+. ./myread
+sizetype="$ans"
+
+: check for type of arguments to gethostbyaddr. 
+if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
+       case "$d_gethbyaddr" in
+       $define)
+               $cat <<EOM
+
+Checking to see what type of arguments are accepted by gethostbyaddr().
+EOM
+               hdrs="$define sys/types.h
+                       $d_socket sys/socket.h 
+                       $i_niin netinet/in.h 
+                       $i_netdb netdb.h
+                       $i_unistd unistd.h"
+               : The first arg can 'char *' or 'void *'
+               : The second arg is some of integral type
+               for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
+                       for yyy in size_t long int; do
+                               case "$netdb_host_type" in
+                               '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
+                                       if ./protochk "$try" $hdrs; then
+                                               echo "Your system accepts $xxx for the first arg."
+                                               echo "...and $yyy for the second arg."
+                                               netdb_host_type="$xxx"
+                                               netdb_hlen_type="$yyy"
+                                       fi
+                                       ;;
+                               esac
+                       done
+               done
+               : In case none of those worked, prompt the user.
+               case "$netdb_host_type" in
+               '')     rp='What is the type for the 1st argument to gethostbyaddr?'
+                       dflt='char *'
+                       . ./myread
+                       netdb_host_type=$ans
+                       rp='What is the type for the 2nd argument to gethostbyaddr?'
+                       dflt="$sizetype"
+                       . ./myread
+                       netdb_hlen_type=$ans
+                       ;;
+               esac
+               ;;
+       *)      : no gethostbyaddr, so pick harmless defaults
+               netdb_host_type='char *'
+               netdb_hlen_type="$sizetype"
+               ;;
+       esac
+       # Remove the "const" if needed. -- but then we'll have a 
+       # prototype clash!
+       # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
+fi
+
+: check for type of argument to gethostbyname. 
+if test "X$netdb_name_type" = X ; then
+       case "$d_gethbyname" in
+       $define)
+               $cat <<EOM
+
+Checking to see what type of argument is accepted by gethostbyname().
+EOM
+               hdrs="$define sys/types.h
+                       $d_socket sys/socket.h 
+                       $i_niin netinet/in.h 
+                       $i_netdb netdb.h
+                       $i_unistd unistd.h"
+               for xxx in "const char *" "char *"; do
+                       case "$netdb_name_type" in
+                       '')     try="extern struct hostent *gethostbyname($xxx);"
+                               if ./protochk "$try" $hdrs; then
+                                       echo "Your system accepts $xxx."
+                                       netdb_name_type="$xxx"
+                               fi
+                               ;;
+                       esac
+               done
+               : In case none of those worked, prompt the user.
+               case "$netdb_name_type" in
+               '')     rp='What is the type for the 1st argument to gethostbyname?'
+                       dflt='char *'
+                       . ./myread
+                       netdb_name_type=$ans
+                       ;;
+               esac
+               ;;
+       *)      : no gethostbyname, so pick harmless default
+               netdb_name_type='char *'
+               ;;
+       esac
+fi
+
+: check for type of 1st argument to getnetbyaddr. 
+if test "X$netdb_net_type" = X ; then
+       case "$d_getnbyaddr" in
+       $define)
+               $cat <<EOM
+
+Checking to see what type of 1st argument is accepted by getnetbyaddr().
+EOM
+               hdrs="$define sys/types.h
+                       $d_socket sys/socket.h 
+                       $i_niin netinet/in.h 
+                       $i_netdb netdb.h
+                       $i_unistd unistd.h"
+               for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
+                       case "$netdb_net_type" in
+                       '')     try="extern struct netent *getnetbyaddr($xxx, int);"
+                               if ./protochk "$try" $hdrs; then
+                                       echo "Your system accepts $xxx."
+                                       netdb_net_type="$xxx"
+                               fi
+                               ;;
+                       esac
+               done
+               : In case none of those worked, prompt the user.
+               case "$netdb_net_type" in
+               '')     rp='What is the type for the 1st argument to getnetbyaddr?'
+                       dflt='long'
+                       . ./myread
+                       netdb_net_type=$ans
+                       ;;
+               esac
+               ;;
+       *)      : no getnetbyaddr, so pick harmless default
+               netdb_name_type='long'
+               ;;
+       esac
+fi
+: locate the preferred pager for this system
+case "$pager" in
+'')
+       dflt=''
+       case "$pg" in
+       /*) dflt=$pg;;
+       esac
+       case "$more" in
+       /*) dflt=$more;;
+       esac
+       case "$less" in
+       /*) dflt=$less;;
+       esac
+       case "$dflt" in
+       '') dflt=/usr/ucb/more;;
+       esac
+       ;;
+*) dflt="$pager";;
+esac
+echo " "
+fn=f/
+rp='What pager is used on your system?'
+. ./getfile
+pager="$ans"
+
+: see what type pids are declared as in the kernel
+set pid_t pidtype int stdio.h sys/types.h
+eval $typedef
+dflt="$pidtype"
+echo " "
+rp="What type are process ids on this system declared as?"
+. ./myread
+pidtype="$ans"
 
-: Cruising for prototypes
+: check for length of pointer
 echo " "
-echo "Checking out function prototypes..." >&4
-$cat >prototype.c <<'EOCP'
-main(int argc, char *argv[]) {
-       exit(0);}
+case "$ptrsize" in
+'')
+       echo "Checking to see how big your pointers are..." >&4
+       if test "$voidflags" -gt 7; then
+               echo '#define VOID_PTR char *' > try.c
+       else
+               echo '#define VOID_PTR void *' > try.c
+       fi
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(VOID_PTR));
+       exit(0);
+}
 EOCP
-if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
-       echo "Your C compiler appears to support function prototypes."
-       val="$define"
-else
-       echo "Your C compiler doesn't seem to understand function prototypes."
-       val="$undef"
-fi
-set prototype
-eval $setvar
-$rm -f prototype*
+       set try
+       if eval $compile; then
+               ptrsize=`./try`
+       else
+               dflt='4'
+               echo "(I can't seem to compile the test program.  Guessing...)" >&4
+               rp="What is the size of a pointer (in bytes)?"
+               . ./myread
+               ptrsize="$ans"
+       fi
+       ;;
+esac
+$rm -f try.c try
 
 : check for size of random number generator
 echo " "
 case "$randbits" in
 '')
        echo "Checking to see how many bits your rand function produces..." >&4
-       $cat >try.c <<'EOCP'
+       $cat >try.c <<EOCP
+#$i_unistd I_UNISTD
+#$i_stdlib I_STDLIB
 #include <stdio.h>
+#ifdef I_UNISTD
+#  include <unistd.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+EOCP
+       $cat >>try.c <<'EOCP'
 main()
 {
        register int i;
@@ -7380,8 +9277,9 @@ main()
        printf("%d\n",i);
 }
 EOCP
-       if $cc try.c -o try >/dev/null 2>&1 ; then
-               dflt=`try`
+       set try
+       if eval $compile; then
+               dflt=`./try$_exe`
        else
                dflt='?'
                echo "(I can't seem to compile the test program...)"
@@ -7394,7 +9292,7 @@ esac
 rp='How many bits does your rand() function produce?'
 . ./myread
 randbits="$ans"
-$rm -f try.c try
+$rm -f try.* try
 
 : see if ar generates random libraries by itself
 echo " "
@@ -7407,18 +9305,18 @@ EOP
 $cc $ccflags -c bar1.c >/dev/null 2>&1
 $cc $ccflags -c bar2.c >/dev/null 2>&1
 $cc $ccflags -c foo.c >/dev/null 2>&1
-ar rc bar.a bar2.o bar1.o >/dev/null 2>&1
-if $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
+$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
+if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
        ./foobar >/dev/null 2>&1; then
-       echo "ar appears to generate random libraries itself."
+       echo "$ar appears to generate random libraries itself."
        orderlib=false
        ranlib=":"
-elif ar ts bar.a >/dev/null 2>&1 &&
-       $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
+elif $ar ts bar$_a >/dev/null 2>&1 &&
+       $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
        ./foobar >/dev/null 2>&1; then
-               echo "a table of contents needs to be added with 'ar ts'."
+               echo "a table of contents needs to be added with '$ar ts'."
                orderlib=false
-               ranlib="ar ts"
+               ranlib="$ar ts"
 else
        case "$ranlib" in
        :) ranlib='';;
@@ -7480,7 +9378,7 @@ main()
 }
 EOCP
 flags=''
-s_timezone=''
+for s_timezone in '-DS_TIMEZONE' ''; do
 sysselect=''
 for s_timeval in '-DS_TIMEVAL' ''; do
 for i_systimek in '' '-DSYSTIMEKERNEL'; do
@@ -7488,10 +9386,9 @@ for i_time in '' '-DI_TIME'; do
 for i_systime in '-DI_SYSTIME' ''; do
        case "$flags" in
        '') $echo $n ".$c"
-               if $cc $ccflags \
-               $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
-               try.c -o try >/dev/null 2>&1 ; then
-                       set X $i_time $i_systime $i_systimek $sysselect $s_timeval
+               set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
+               if eval $compile; then
+                               set X $i_time $i_systime $i_systimek $sysselect $s_timeval
                        shift
                        flags="$*"
                        echo " "
@@ -7503,6 +9400,7 @@ done
 done
 done
 done
+done
 timeincl=''
 echo " "
 case "$flags" in
@@ -7540,11 +9438,10 @@ $cat >fd_set.c <<EOCP
 #endif
 #ifdef I_SYS_TIME
 #include <sys/time.h>
-#else
+#endif
 #ifdef I_SYS_SELECT
 #include <sys/select.h>
 #endif
-#endif
 main() {
        fd_set fds;
 
@@ -7559,7 +9456,8 @@ main() {
 #endif
 }
 EOCP
-if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
+set fd_set -DTRYBITS
+if eval $compile; then
        d_fds_bits="$define"
        d_fd_set="$define"
        echo "Well, your system knows about the normal fd_set typedef..." >&4
@@ -7576,7 +9474,8 @@ else
        $cat <<'EOM'
 Hmm, your compiler has some difficulty with fd_set.  Checking further...
 EOM
-       if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
+       set fd_set
+       if eval $compile; then
                d_fds_bits="$undef"
                d_fd_set="$define"
                echo "Well, your system has some sort of fd_set available..." >&4
@@ -7598,74 +9497,50 @@ EOM
 fi
 $rm -f fd_set*
 
-
-: check for type of arguments to select.  This will only really
-: work if the system supports prototypes and provides one for
-: select.
-case "$d_select" in
-$define)
-       : Make initial guess
-       case "$selecttype" in
-       ''|' ')
-               case "$d_fd_set" in
-               $define) xxx='fd_set *' ;;
-               *) xxx='int *' ;;
+: check for type of arguments to select. 
+case "$selecttype" in
+'') case "$d_select" in
+       $define)
+               $cat <<EOM
+Checking to see what type of arguments are accepted by select().
+EOM
+               hdrs="$define sys/types.h
+                       $i_systime sys/time.h 
+                       $i_sysselct sys/select.h
+                       $d_socket sys/socket.h"
+               : The first arg can be int, unsigned, or size_t
+               : The last arg may or may not be 'const'
+               val=''
+               for xxx in 'fd_set *' 'int *'; do
+                       for nfd in 'int' 'size_t' 'unsigned' ; do
+                               for tmo in 'struct timeval *' 'const struct timeval *'; do
+                                       case "$val" in
+                                       '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
+                                               if ./protochk "$try" $hdrs; then
+                                                       echo "Your system accepts $xxx."
+                                                       val="$xxx"
+                                               fi
+                                               ;;
+                                       esac
+                               done
+                       done
+               done
+               case "$val" in
+               '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
+                       case "$d_fd_set" in
+                               $define) dflt="fd_set *" ;;
+                               *)              dflt="int *" ;;
+                       esac
+                       . ./myread
+                       val=$ans
+                       ;;
                esac
+               selecttype="$val"
                ;;
-       *)      xxx="$selecttype" 
+       *)      : no select, so pick a harmless default
+               selecttype='int *'
                ;;
        esac
-       : backup guess
-       case "$xxx" in
-       'fd_set *') yyy='int *' ;;
-       'int *') yyy='fd_set *' ;;
-       esac
-
-       $cat <<EOM
-
-Checking to see what type of arguments are expected by select().
-EOM
-       $cat >try.c <<EOCP
-#$i_systime I_SYS_TIME
-#$i_sysselct I_SYS_SELECT
-#$d_socket HAS_SOCKET
-#include <sys/types.h>
-#ifdef HAS_SOCKET
-#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
-#endif
-#ifdef I_SYS_TIME
-#include <sys/time.h>
-#else
-#ifdef I_SYS_SELECT
-#include <sys/select.h>
-#endif
-#endif
-main()
-{
-       int width;
-       Select_fd_set_t readfds;
-       Select_fd_set_t writefds;
-       Select_fd_set_t exceptfds;
-       struct timeval timeout;
-       select(width, readfds, writefds, exceptfds, &timeout);
-       exit(0);
-}
-EOCP
-       if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
-               selecttype="$xxx"
-               echo "Your system uses $xxx for the arguments to select." >&4
-       elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
-               selecttype="$yyy"
-               echo "Your system uses $yyy for the arguments to select." >&4
-       else
-               rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
-               dflt="$xxx"
-               . ./myread
-               selecttype="$ans"
-       fi
-       $rm -f try.[co]
-       ;;
-*)     selecttype='int *'
        ;;
 esac
 
@@ -7704,13 +9579,59 @@ $cat > signal.c <<'EOP'
 #include <sys/types.h>
 #include <signal.h>
 int main() {
-#ifdef NSIG
-printf("NSIG %d\n", NSIG);
-#else
-#ifdef _NSIG
-printf("NSIG %d\n", _NSIG);
+
+/* Strange style to avoid deeply-nested #if/#else/#endif */
+#ifndef NSIG
+#  ifdef _NSIG
+#    define NSIG (_NSIG)
+#  endif
+#endif
+
+#ifndef NSIG
+#  ifdef SIGMAX
+#    define NSIG (SIGMAX+1)
+#  endif
+#endif
+
+#ifndef NSIG
+#  ifdef SIG_MAX
+#    define NSIG (SIG_MAX+1)
+#  endif
+#endif
+
+#ifndef NSIG
+#  ifdef MAXSIG
+#    define NSIG (MAXSIG+1)
+#  endif
+#endif
+
+#ifndef NSIG
+#  ifdef MAX_SIG
+#    define NSIG (MAX_SIG+1)
+#  endif
+#endif
+
+#ifndef NSIG
+#  ifdef SIGARRAYSIZE
+#    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
+#  endif
+#endif
+
+#ifndef NSIG
+#  ifdef _sys_nsig
+#    define NSIG (_sys_nsig) /* Solaris 2.5 */
+#  endif
 #endif
+
+/* Default to some arbitrary number that's big enough to get most
+   of the common signals.
+*/
+#ifndef NSIG
+#    define NSIG 50
 #endif
+
+printf("NSIG %d\n", NSIG);
+
 EOP
 echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
 {
@@ -7757,8 +9678,8 @@ EOP
 $cat >signal_cmd <<EOS
 $startsh
 $test -s signal.lst && exit 0
-if $cc $ccflags signal.c -o signal $ldflags >/dev/null 2>&1; then
-       ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
+if $cc $optimize $ccflags $ldflags -o signal signal.c $libs >/dev/null 2>&1; then
+       ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
 else
        echo "(I can't seem be able to compile the test program -- Guessing)"
        echo 'kill -l' >signal
@@ -7769,29 +9690,27 @@ else
        0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
        esac
        echo \$@ | $tr ' ' '\012' | \
-               $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
+               $awk '{ printf \$1; printf " %d\n", ++s; }' >signal.lst
 fi
-$rm -f signal.c signal signal.o
+$rm -f signal.c signal signal$_o
 EOS
 chmod a+x signal_cmd
 $eunicefix signal_cmd
 
 : generate list of signal names
 echo " "
-case "$sig_name" in
-'')    sig_num='' ;;
-esac
-case "$sig_num" in
-'')    sig_name='' ;;
-esac
-case "$sig_name" in
+case "$sig_name_init" in
 '')
        echo "Generating a list of signal names and numbers..." >&4
        ./signal_cmd
        sig_name=`$awk '{printf "%s ", $1}' signal.lst`
        sig_name="ZERO $sig_name"
-       sig_num=`$awk '{printf "%d ", $2}' signal.lst`
-       sig_num="0 $sig_num"
+       sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
+                                               { printf "\"%s\", ", $1 }
+                                               END { printf "0\n" }' signal.lst`
+       sig_num=`$awk 'BEGIN { printf "0, " }
+                                       { printf "%d, ", $2}
+                                       END { printf "0\n"}' signal.lst`
        ;;
 esac
 echo "The following signals are available:"
@@ -7812,15 +9731,6 @@ echo $sig_name | $awk \
 }'
 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
 
-: see what type is used for size_t
-set size_t sizetype 'unsigned int' stdio.h sys/types.h
-eval $typedef
-dflt="$sizetype"
-echo " "
-rp="What type is used for the length parameter for string functions?"
-. ./myread
-sizetype="$ans"
-
 : see what type is used for signed size_t
 set ssize_t ssizetype int stdio.h sys/types.h
 eval $typedef
@@ -7838,25 +9748,29 @@ main()
                printf("int\n");
        else 
                printf("long\n");
+       exit(0);
 }
 EOM
 echo " "
-if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 ; then
+set ssize
+if eval $compile && ./ssize > /dev/null; then
        ssizetype=`./ssize`
        echo "I'll be using $ssizetype for functions returning a byte count." >&4
 else
-       echo "(I can't compile the test program--please enlighten me!)"
-       $cat <<EOM
+       $cat >&4 <<EOM
+Help! I can't compile and run the ssize_t test program: please enlighten me!
+(This is probably a misconfiguration in your system or libraries, and
+you really ought to fix it.  Still, I'll try anyway.)
 
 I need a type that is the same size as $sizetype, but is guaranteed to
-be signed.  Common values are int and long.
+be signed.  Common values are ssize_t, int and long.
 
 EOM
        rp="What signed type is the same size as $sizetype?"
        . ./myread
        ssizetype="$ans"
 fi
-$rm -f ssize ssize.[co]
+$rm -f ssize ssize.*
 
 : see what type of char stdio uses.
 echo " "
@@ -8002,30 +9916,6 @@ eval $inhdr
 set math.h i_math
 eval $inhdr
 
-: see if memory.h is available.
-val=''
-set memory.h val
-eval $inhdr
-
-: See if it conflicts with string.h
-case "$val" in
-$define)
-       case "$strings" in
-       '') ;;
-       *)
-               $cppstdin $cppflags $cppminus < $strings > mem.h
-               if $contains 'memcpy' mem.h >/dev/null 2>&1; then
-                       echo " "
-                       echo "We won't be including <memory.h>."
-                       val="$undef"
-               fi
-               $rm -f mem.h
-               ;;
-       esac
-esac
-set i_memory
-eval $setvar
-
 : see if ndbm.h is available
 set ndbm.h t_ndbm
 eval $inhdr
@@ -8285,12 +10175,13 @@ va_dcl
 }
 EOP
 $cat > varargs <<EOP
+$startsh
 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
        echo "true"
 else
        echo "false"
 fi
-$rm -f varargs.o
+$rm -f varargs$_o
 EOP
 chmod +x varargs
 
@@ -8363,6 +10254,10 @@ eval $setvar
 set sys/param.h i_sysparam
 eval $inhdr
 
+: see if sys/resource.h has to be included
+set sys/resource.h i_sysresrc
+eval $inhdr
+
 : see if sys/stat.h is available
 set sys/stat.h i_sysstat
 eval $inhdr
@@ -8371,14 +10266,22 @@ eval $inhdr
 set sys/types.h i_systypes
 eval $inhdr
 
-: see if this is a unistd.h system
-set unistd.h i_unistd
+: see if this is a sys/un.h system
+set sys/un.h i_sysun
+eval $inhdr
+
+: see if this is a syswait system
+set sys/wait.h i_syswait
 eval $inhdr
 
 : see if this is an utime system
 set utime.h i_utime
 eval $inhdr
 
+: see if this is a values.h system
+set values.h i_values
+eval $inhdr
+
 : see if this is a vfork system
 case "$d_vfork" in
 "$define")
@@ -8421,19 +10324,23 @@ known_extensions=''
 : some additional extensions into the source tree and expect them
 : to be built.
 for xxx in * ; do
-       if $test -f $xxx/$xxx.xs; then
-               known_extensions="$known_extensions $xxx"
-       else
-               if $test -d $xxx; then
-                       cd $xxx
-                       for yyy in * ; do
+       case "$xxx" in
+       DynaLoader) ;;
+       *)      if $test -f $xxx/$xxx.xs; then
+                       known_extensions="$known_extensions $xxx"
+               else
+                       if $test -d $xxx; then
+                               cd $xxx
+                               for yyy in * ; do
                                if $test -f $yyy/$yyy.xs; then
                                        known_extensions="$known_extensions $xxx/$yyy"
                                fi
-                       done
+                               done
                        cd ..
-               fi
-       fi
+                       fi
+               fi 
+               ;;
+       esac
 done
 set X $known_extensions
 shift
@@ -8443,34 +10350,50 @@ cd ../UU
 : Now see which are supported on this system.
 avail_ext=''
 for xxx in $known_extensions ; do
-    case "$xxx" in
-    DB_File) case "$i_db" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    GDBM_File) case "$i_gdbm" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    NDBM_File) case "$i_ndbm" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
-           *"${define}"*) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    POSIX) case "$useposix" in 
-           true|define|y) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    Socket) case "$d_socket" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    *)      avail_ext="$avail_ext $xxx"
-           ;;
-    esac
+       case "$xxx" in
+       DB_File|db_file)
+               case "$i_db" in
+               $define) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       GDBM_File|gdbm_fil)
+               case "$i_gdbm" in 
+               $define) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       NDBM_File|ndbm_fil)
+               case "$i_ndbm" in
+               $define) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       ODBM_File|odbm_fil) 
+               case "${i_dbm}${i_rpcsvcdbm}" in
+               *"${define}"*) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       POSIX|posix)
+               case "$useposix" in
+               true|define|y) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       Opcode|opcode)
+               case "$useopcode" in
+               true|define|y) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       Socket|socket)
+               case "$d_socket" in 
+               true|$define|y) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       Thread|thread)
+               case "$usethreads" in 
+               true|$define|y) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
+       *)      avail_ext="$avail_ext $xxx"
+               ;;
+       esac
 done
 
 set X $avail_ext
@@ -8484,11 +10407,28 @@ A number of extensions are supplied with $package.  You may choose to
 compile these extensions for dynamic loading (the default), compile
 them into the $package executable (static loading), or not include
 them at all.  Answer "none" to include no extensions.
+Note that DynaLoader is always built and need not be mentioned here.
 
 EOM
        case "$dynamic_ext" in
        '') dflt="$avail_ext" ;;
-       *)      dflt="$dynamic_ext" ;;
+       *)      dflt="$dynamic_ext"
+               # Perhaps we are reusing an old out-of-date config.sh.
+               case "$hint" in
+               previous)
+                       if test X"$dynamic_ext" != X$"avail_ext"; then
+                               $cat <<EOM
+NOTICE:  Your previous config.sh list may be incorrect. 
+The extensions now available to you are 
+       ${avail_ext}
+but the default list from your previous config.sh is
+       ${dynamic_ext} 
+
+EOM
+                       fi
+                       ;;
+               esac
+               ;;
        esac
        case "$dflt" in
        '')     dflt=none;;
@@ -8532,13 +10472,29 @@ EOM
        $cat <<EOM
 A number of extensions are supplied with $package.  Answer "none" 
 to include no extensions. 
+Note that DynaLoader is always built and need not be mentioned here.
 
 EOM
        case "$static_ext" in
        '') dflt="$avail_ext" ;;
-       *)      dflt="$static_ext" ;;
-       esac
+       *)      dflt="$static_ext"
+               # Perhaps we are reusing an old out-of-date config.sh.
+               case "$hint" in
+               previous)
+                       if test X"$static_ext" != X$"avail_ext"; then
+                               $cat <<EOM
+NOTICE:  Your previous config.sh list may be incorrect. 
+The extensions now available to you are 
+       ${avail_ext}
+but the default list from your previous config.sh is
+       ${static_ext} 
 
+EOM
+                       fi
+                       ;;
+               esac
+               ;;
+       esac
        case "$dflt" in
        '')     dflt=none;;
        esac
@@ -8555,58 +10511,6 @@ set X $dynamic_ext $static_ext
 shift
 extensions="$*"
 
-$cat <<EOM
-
-I need to get your e-mail address in Internet format if possible, i.e.
-something like user@host.domain. Please answer accurately since I have
-no easy means to double check it. The default value provided below
-is most probably close to the reality but may not be valid from outside
-your organization...
-
-EOM
-cont=x
-while test "$cont"; do
-       case "$cf_email" in
-       '') dflt="$cf_by@$myhostname$mydomain";;
-       *) dflt="$cf_email";;
-       esac
-       rp='What is your e-mail address?'
-       . ./myread
-       cf_email="$ans"
-       case "$cf_email" in
-       *@*.*) cont='' ;;
-       *)
-               rp='Address does not look like an Internet one.  Use it anyway?'
-               case "$fastread" in
-               yes) dflt=y ;;
-               *) dflt=n ;;
-               esac
-               . ./myread
-               case "$ans" in
-               y*) cont='' ;;
-               *) echo " " ;;
-               esac
-               ;;
-       esac
-done
-
-$cat <<EOM
-
-If you or somebody else will be maintaining perl at your site, please
-fill in the correct e-mail address here so that they may be contacted
-if necessary. Currently, the "perlbug" program included with perl
-will send mail to this address in addition to perlbug@perl.com. You may
-enter "none" for no administrator.
-
-EOM
-case "$perladmin" in
-'') dflt="$cf_email";;
-*) dflt="$perladmin";;
-esac
-rp='Perl administrator e-mail address'
-. ./myread
-perladmin="$ans"
-
 : Remove build directory name from cppstdin so it can be used from
 : either the present location or the final installed location.
 echo " "
@@ -8667,9 +10571,11 @@ $startsh
 # instead choose to run each of the .SH files by yourself, or "Configure -S".
 #
 
+# Package name      : $package
+# Source directory  : $src
 # Configuration time: $cf_time
-# Configured by: $cf_by
-# Target system: $myuname
+# Configured by     : $cf_by
+# Target system     : $myuname
 
 Author='$Author'
 Date='$Date'
@@ -8682,6 +10588,9 @@ RCSfile='$RCSfile'
 Revision='$Revision'
 Source='$Source'
 State='$State'
+_a='$_a'
+_exe='$_exe'
+_o='$_o'
 afs='$afs'
 alignbytes='$alignbytes'
 aphostname='$aphostname'
@@ -8694,6 +10603,7 @@ awk='$awk'
 baserev='$baserev'
 bash='$bash'
 bin='$bin'
+bincompat3='$bincompat3'
 binexp='$binexp'
 bison='$bison'
 byacc='$byacc'
@@ -8733,8 +10643,10 @@ d_archlib='$d_archlib'
 d_attribut='$d_attribut'
 d_bcmp='$d_bcmp'
 d_bcopy='$d_bcopy'
+d_bincompat3='$d_bincompat3'
 d_bsd='$d_bsd'
-d_bsdpgrp='$d_bsdpgrp'
+d_bsdgetpgrp='$d_bsdgetpgrp'
+d_bsdsetpgrp='$d_bsdsetpgrp'
 d_bzero='$d_bzero'
 d_casti32='$d_casti32'
 d_castneg='$d_castneg'
@@ -8769,16 +10681,29 @@ d_flock='$d_flock'
 d_fork='$d_fork'
 d_fpathconf='$d_fpathconf'
 d_fsetpos='$d_fsetpos'
+d_ftime='$d_ftime'
 d_getgrps='$d_getgrps'
+d_gethbyaddr='$d_gethbyaddr'
+d_gethbyname='$d_gethbyname'
 d_gethent='$d_gethent'
 d_gethname='$d_gethname'
 d_getlogin='$d_getlogin'
+d_getnbyaddr='$d_getnbyaddr'
+d_getnbyname='$d_getnbyname'
+d_getpbyname='$d_getpbyname'
+d_getpbynumber='$d_getpbynumber'
+d_getpgid='$d_getpgid'
 d_getpgrp2='$d_getpgrp2'
 d_getpgrp='$d_getpgrp'
 d_getppid='$d_getppid'
 d_getprior='$d_getprior'
+d_getsbyname='$d_getsbyname'
+d_getsbyport='$d_getsbyport'
+d_gettimeod='$d_gettimeod'
+d_gnulibc='$d_gnulibc'
 d_htonl='$d_htonl'
 d_index='$d_index'
+d_inetaton='$d_inetaton'
 d_isascii='$d_isascii'
 d_killpg='$d_killpg'
 d_link='$d_link'
@@ -8802,7 +10727,7 @@ d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
 d_mymalloc='$d_mymalloc'
 d_nice='$d_nice'
-d_oldarchlib='$d_oldarchlib'
+d_oldpthreads='$d_oldpthreads'
 d_oldsock='$d_oldsock'
 d_open3='$d_open3'
 d_pathconf='$d_pathconf'
@@ -8811,6 +10736,8 @@ d_phostname='$d_phostname'
 d_pipe='$d_pipe'
 d_poll='$d_poll'
 d_portable='$d_portable'
+d_pthread_yield='$d_pthread_yield'
+d_pthreads_created_joinable='$d_pthreads_created_joinable'
 d_pwage='$d_pwage'
 d_pwchange='$d_pwchange'
 d_pwclass='$d_pwclass'
@@ -8824,6 +10751,8 @@ d_rewinddir='$d_rewinddir'
 d_rmdir='$d_rmdir'
 d_safebcpy='$d_safebcpy'
 d_safemcpy='$d_safemcpy'
+d_sanemcmp='$d_sanemcmp'
+d_sched_yield='$d_sched_yield'
 d_seekdir='$d_seekdir'
 d_select='$d_select'
 d_sem='$d_sem'
@@ -8832,6 +10761,8 @@ d_semget='$d_semget'
 d_semop='$d_semop'
 d_setegid='$d_setegid'
 d_seteuid='$d_seteuid'
+d_setgrps='$d_setgrps'
+d_sethent='$d_sethent'
 d_setlinebuf='$d_setlinebuf'
 d_setlocale='$d_setlocale'
 d_setpgid='$d_setpgid'
@@ -8845,13 +10776,15 @@ d_setreuid='$d_setreuid'
 d_setrgid='$d_setrgid'
 d_setruid='$d_setruid'
 d_setsid='$d_setsid'
+d_sfio='$d_sfio'
 d_shm='$d_shm'
 d_shmat='$d_shmat'
 d_shmatprototype='$d_shmatprototype'
 d_shmctl='$d_shmctl'
 d_shmdt='$d_shmdt'
 d_shmget='$d_shmget'
-d_shrplib='$d_shrplib'
+d_sigaction='$d_sigaction'
+d_sigsetjmp='$d_sigsetjmp'
 d_socket='$d_socket'
 d_sockpair='$d_sockpair'
 d_statblks='$d_statblks'
@@ -8864,6 +10797,9 @@ d_strcoll='$d_strcoll'
 d_strctcpy='$d_strctcpy'
 d_strerrm='$d_strerrm'
 d_strerror='$d_strerror'
+d_strtod='$d_strtod'
+d_strtol='$d_strtol'
+d_strtoul='$d_strtoul'
 d_strxfrm='$d_strxfrm'
 d_suidsafe='$d_suidsafe'
 d_symlink='$d_symlink'
@@ -8899,6 +10835,7 @@ defvoidused='$defvoidused'
 direntrytype='$direntrytype'
 dlext='$dlext'
 dlsrc='$dlsrc'
+doublesize='$doublesize'
 dynamic_ext='$dynamic_ext'
 eagain='$eagain'
 echo='$echo'
@@ -8922,6 +10859,7 @@ glibpth='$glibpth'
 grep='$grep'
 groupcat='$groupcat'
 groupstype='$groupstype'
+gzip='$gzip'
 h_fcntl='$h_fcntl'
 h_sysfile='$h_sysfile'
 hint='$hint'
@@ -8943,10 +10881,12 @@ i_malloc='$i_malloc'
 i_math='$i_math'
 i_memory='$i_memory'
 i_ndbm='$i_ndbm'
+i_netdb='$i_netdb'
 i_neterrno='$i_neterrno'
 i_niin='$i_niin'
 i_pwd='$i_pwd'
 i_rpcsvcdbm='$i_rpcsvcdbm'
+i_sfio='$i_sfio'
 i_sgtty='$i_sgtty'
 i_stdarg='$i_stdarg'
 i_stddef='$i_stddef'
@@ -8959,6 +10899,7 @@ i_sysin='$i_sysin'
 i_sysioctl='$i_sysioctl'
 i_sysndir='$i_sysndir'
 i_sysparam='$i_sysparam'
+i_sysresrc='$i_sysresrc'
 i_sysselct='$i_sysselct'
 i_syssockio='$i_syssockio'
 i_sysstat='$i_sysstat'
@@ -8966,11 +10907,14 @@ i_systime='$i_systime'
 i_systimek='$i_systimek'
 i_systimes='$i_systimes'
 i_systypes='$i_systypes'
+i_sysun='$i_sysun'
+i_syswait='$i_syswait'
 i_termio='$i_termio'
 i_termios='$i_termios'
 i_time='$i_time'
 i_unistd='$i_unistd'
 i_utime='$i_utime'
+i_values='$i_values'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
@@ -8983,6 +10927,7 @@ installman3dir='$installman3dir'
 installprivlib='$installprivlib'
 installscript='$installscript'
 installsitearch='$installsitearch'
+installsitelib='$installsitelib'
 intsize='$intsize'
 known_extensions='$known_extensions'
 ksh='$ksh'
@@ -8993,6 +10938,7 @@ ldflags='$ldflags'
 less='$less'
 lib_ext='$lib_ext'
 libc='$libc'
+libperl='$libperl'
 libpth='$libpth'
 libs='$libs'
 libswanted='$libswanted'
@@ -9003,6 +10949,7 @@ ln='$ln'
 lns='$lns'
 locincpth='$locincpth'
 loclibpth='$loclibpth'
+longsize='$longsize'
 lp='$lp'
 lpr='$lpr'
 ls='$ls'
@@ -9010,6 +10957,7 @@ lseektype='$lseektype'
 mail='$mail'
 mailx='$mailx'
 make='$make'
+make_set_make='$make_set_make'
 mallocobj='$mallocobj'
 mallocsrc='$mallocsrc'
 malloctype='$malloctype'
@@ -9032,17 +10980,22 @@ mydomain='$mydomain'
 myhostname='$myhostname'
 myuname='$myuname'
 n='$n'
+netdb_hlen_type='$netdb_hlen_type'
+netdb_host_type='$netdb_host_type'
+netdb_name_type='$netdb_name_type'
+netdb_net_type='$netdb_net_type'
+nm='$nm'
 nm_opt='$nm_opt'
+nm_so_opt='$nm_so_opt'
 nroff='$nroff'
 o_nonblock='$o_nonblock'
 obj_ext='$obj_ext'
-oldarchlib='$oldarchlib'
-oldarchlibexp='$oldarchlibexp'
 optimize='$optimize'
 orderlib='$orderlib'
 osname='$osname'
 osvers='$osvers'
 package='$package'
+pager='$pager'
 passcat='$passcat'
 patchlevel='$patchlevel'
 path_sep='$path_sep'
@@ -9051,6 +11004,7 @@ perladmin='$perladmin'
 perlpath='$perlpath'
 pg='$pg'
 phostname='$phostname'
+pidtype='$pidtype'
 plibpth='$plibpth'
 pmake='$pmake'
 pr='$pr'
@@ -9059,6 +11013,7 @@ prefixexp='$prefixexp'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
+ptrsize='$ptrsize'
 randbits='$randbits'
 ranlib='$ranlib'
 rd_nodata='$rd_nodata'
@@ -9074,13 +11029,17 @@ sh='$sh'
 shar='$shar'
 sharpbang='$sharpbang'
 shmattype='$shmattype'
-shrpdir='$shrpdir'
+shortsize='$shortsize'
+shrpenv='$shrpenv'
 shsharp='$shsharp'
 sig_name='$sig_name'
+sig_name_init='$sig_name_init'
 sig_num='$sig_num'
 signal_t='$signal_t'
 sitearch='$sitearch'
 sitearchexp='$sitearchexp'
+sitelib='$sitelib'
+sitelibexp='$sitelibexp'
 sizetype='$sizetype'
 sleep='$sleep'
 smail='$smail'
@@ -9092,6 +11051,7 @@ sort='$sort'
 spackage='$spackage'
 spitshell='$spitshell'
 split='$split'
+src='$src'
 ssizetype='$ssizetype'
 startperl='$startperl'
 startsh='$startsh'
@@ -9100,13 +11060,16 @@ stdchar='$stdchar'
 stdio_base='$stdio_base'
 stdio_bufsiz='$stdio_bufsiz'
 stdio_cnt='$stdio_cnt'
+stdio_filbuf='$stdio_filbuf'
 stdio_ptr='$stdio_ptr'
 strings='$strings'
 submit='$submit'
+subversion='$subversion'
 sysman='$sysman'
 tail='$tail'
 tar='$tar'
 tbl='$tbl'
+tee='$tee'
 test='$test'
 timeincl='$timeincl'
 timetype='$timetype'
@@ -9119,7 +11082,12 @@ uniq='$uniq'
 usedl='$usedl'
 usemymalloc='$usemymalloc'
 usenm='$usenm'
+useopcode='$useopcode'
+useperlio='$useperlio'
 useposix='$useposix'
+usesfio='$usesfio'
+useshrplib='$useshrplib'
+usethreads='$usethreads'
 usevfork='$usevfork'
 usrinc='$usrinc'
 uuname='$uuname'
@@ -9127,11 +11095,12 @@ vi='$vi'
 voidflags='$voidflags'
 xlibpth='$xlibpth'
 zcat='$zcat'
+zip='$zip'
 EOT
 
 : add special variables
-$test -f patchlevel.h && \
-awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
+$test -f $src/patchlevel.h && \
+awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
 echo "CONFIG=true" >>config.sh
 
 : propagate old symbols
@@ -9225,6 +11194,22 @@ else
        echo "Done."
 fi
 
+if $test -f Policy.sh; then
+    $cat <<EOM
+
+If you compile $package on a different machine or from a different object
+directory, copy the Policy.sh file from this object directory to the
+new one before you run Configure -- this will help you with most of
+the policy defaults.
+
+EOM
+fi
+if $test -f config.msg; then
+    echo "Hmm.  I also noted the following information while running:"
+    echo " "
+    $cat config.msg >&4
+    $rm -f config.msg
+fi
 $rm -f kit*isdone ark*isdone
 $rm -rf UU