This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[PATCH 5.004_65] Config_65-02-03.diff: SunOS and Solaris hints
[perl5.git] / Configure
index c5fe4a4..38072f0 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 Tue Dec 17 14:33:33 EST 1996 [metaconfig 3.0 PL60]
+# Generated on Thu May 28 12:01:39 EDT 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:/. -a -n "$OS2_SHELL"; 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 "$DJGPP"; then
+               p_=\;
+       fi
 fi
 
 : Proper PATH setting
@@ -85,35 +89,58 @@ 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]*)
+               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 older exotic systems.  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
+CDPATH=''
 cd UU && rm -f ./*
 
 dynamic_ext=''
@@ -127,6 +154,7 @@ d_eunice=''
 d_xenix=''
 eunicefix=''
 Mcc=''
+ar=''
 awk=''
 bash=''
 bison=''
@@ -148,7 +176,6 @@ emacs=''
 expr=''
 find=''
 flex=''
-gcc=''
 grep=''
 gzip=''
 inews=''
@@ -162,9 +189,11 @@ lpr=''
 ls=''
 mail=''
 mailx=''
+make=''
 mkdir=''
 more=''
 mv=''
+nm=''
 nroff=''
 perl=''
 pg=''
@@ -182,6 +211,7 @@ submit=''
 tail=''
 tar=''
 tbl=''
+tee=''
 test=''
 touch=''
 tr=''
@@ -208,7 +238,9 @@ RCSfile=''
 Revision=''
 Source=''
 State=''
-ar=''
+_a=''
+_exe=''
+_o=''
 archobjs=''
 exe_ext=''
 firstmakefile=''
@@ -217,6 +249,7 @@ obj_ext=''
 path_sep=''
 afs=''
 alignbytes=''
+ansi2knr=''
 archlib=''
 archlibexp=''
 d_archlib=''
@@ -227,8 +260,6 @@ baserev=''
 bin=''
 binexp=''
 installbin=''
-bincompat3=''
-d_bincompat3=''
 byteorder=''
 cc=''
 gccversion=''
@@ -275,6 +306,10 @@ d_dlsymun=''
 d_dosuid=''
 d_suidsafe=''
 d_dup2=''
+d_endhent=''
+d_endnent=''
+d_endpent=''
+d_endsent=''
 d_fchmod=''
 d_fchown=''
 d_fcntl=''
@@ -290,26 +325,46 @@ d_ftime=''
 d_gettimeod=''
 d_Gconvert=''
 d_getgrps=''
+d_gethbyaddr=''
+d_gethbyname=''
 d_gethent=''
 aphostname=''
 d_gethname=''
 d_phostname=''
 d_uname=''
+d_gethostprotos=''
 d_getlogin=''
+d_getnbyaddr=''
+d_getnbyname=''
+d_getnent=''
+d_getnetprotos=''
+d_getpent=''
 d_getpgid=''
 d_getpgrp2=''
 d_bsdgetpgrp=''
 d_getpgrp=''
 d_getppid=''
 d_getprior=''
+d_getpbyname=''
+d_getpbynumber=''
+d_getprotoprotos=''
+d_getsent=''
+d_getservprotos=''
+d_getsbyname=''
+d_getsbyport=''
 d_gnulibc=''
 d_htonl=''
 d_inetaton=''
 d_isascii=''
 d_killpg=''
+d_lchown=''
 d_link=''
 d_locconv=''
 d_lockf=''
+d_longdbl=''
+longdblsize=''
+d_longlong=''
+longlongsize=''
 d_lstat=''
 d_mblen=''
 d_mbstowcs=''
@@ -320,6 +375,7 @@ d_memmove=''
 d_memset=''
 d_mkdir=''
 d_mkfifo=''
+d_mkstemp=''
 d_mktime=''
 d_msg=''
 d_msgctl=''
@@ -334,6 +390,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=''
@@ -351,11 +410,14 @@ d_semget=''
 d_semop=''
 d_setegid=''
 d_seteuid=''
+d_setgrps=''
+d_sethent=''
 d_setlinebuf=''
 d_setlocale=''
+d_setnent=''
+d_setpent=''
 d_setpgid=''
 d_setpgrp2=''
-d_bsdpgrp=''
 d_bsdsetpgrp=''
 d_setpgrp=''
 d_setprior=''
@@ -365,7 +427,9 @@ d_setresuid=''
 d_setreuid=''
 d_setrgid=''
 d_setruid=''
+d_setsent=''
 d_setsid=''
+d_setvbuf=''
 d_sfio=''
 usesfio=''
 d_shm=''
@@ -417,6 +481,9 @@ d_times=''
 d_truncate=''
 d_tzname=''
 d_umask=''
+d_semctl_semid_ds=''
+d_semctl_semun=''
+d_union_semun=''
 d_vfork=''
 usevfork=''
 d_voidsig=''
@@ -435,6 +502,7 @@ dlsrc=''
 ld=''
 lddlflags=''
 usedl=''
+doublesize=''
 fpostype=''
 gidtype=''
 groupstype=''
@@ -460,6 +528,7 @@ i_malloc=''
 i_math=''
 i_memory=''
 i_ndbm=''
+i_netdb=''
 i_neterrno=''
 i_niin=''
 i_sysin=''
@@ -468,6 +537,7 @@ d_pwchange=''
 d_pwclass=''
 d_pwcomment=''
 d_pwexpire=''
+d_pwgecos=''
 d_pwquota=''
 i_pwd=''
 i_sfio=''
@@ -506,6 +576,8 @@ i_varargs=''
 i_varhdr=''
 i_vfork=''
 intsize=''
+longsize=''
+shortsize=''
 libc=''
 libperl=''
 shrpenv=''
@@ -518,7 +590,6 @@ xlibpth=''
 libs=''
 lns=''
 lseektype=''
-make=''
 make_set_make=''
 d_mymalloc=''
 freetype=''
@@ -550,12 +621,13 @@ 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=''
@@ -565,12 +637,14 @@ patchlevel=''
 subversion=''
 perladmin=''
 perlpath=''
+pidtype=''
 prefix=''
 prefixexp=''
 installprivlib=''
 privlib=''
 privlibexp=''
 prototype=''
+ptrsize=''
 randbits=''
 installscript=''
 scriptdir=''
@@ -578,6 +652,7 @@ scriptdirexp=''
 selecttype=''
 sh=''
 sig_name=''
+sig_name_init=''
 sig_num=''
 installsitearch=''
 sitearch=''
@@ -590,6 +665,7 @@ so=''
 sharpbang=''
 shsharp=''
 spitshell=''
+src=''
 ssizetype=''
 startperl=''
 startsh=''
@@ -601,6 +677,8 @@ nm_so_opt=''
 runnm=''
 usenm=''
 useperlio=''
+d_oldpthreads=''
+usethreads=''
 incpath=''
 mips=''
 mips_type=''
@@ -688,26 +766,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
-: set useopcode=false in your hint file to disable the Opcode extension.
-useopcode=true
-: Define several unixisms.  These can be used in hint files.
-exe_ext='' 
-: Extra object files, if any, needed on this platform.
-archobjs=''
-: 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=''
-
 : change the next line if compiling for Xenix/286 on Xenix/386
 xlibpth='/usr/lib/386 /lib/386'
 
@@ -726,11 +785,32 @@ glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
 : 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='sfio 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.
@@ -743,8 +823,6 @@ usevfork=false
 : Find the basic shell for Bourne shell scripts
 case "$sh" in
 '')
-       : SYSTYPE is for some older MIPS systems. 
-       : I do not know if it is still needed.
        case "$SYSTYPE" in
        *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
        *) xxx='/bin/sh';;
@@ -762,11 +840,9 @@ case "$sh" in
                for xxx in $try; do
                        if test -f "$xxx"; then
                                sh="$xxx";
-                               echo "Your Bourne shell appears to be in $sh."
                                break
                        elif test -f "$xxx.exe"; then
                                sh="$xxx";
-                               echo "Hmm.  Your Bourne shell appears to be in $sh."
                                break
                        fi
                done
@@ -777,9 +853,10 @@ 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 (Chip Salzenberg) at chip@atlantic.net and 
-we'll try to straigten this all out.
+Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and 
+we'll try to straighten this all out.
 EOM
        exit 1
        ;;
@@ -789,7 +866,6 @@ esac
 if `$sh -c '#' >/dev/null 2>&1`; then
        shsharp=true
        spitshell=cat
-       echo " "
        xcat=/bin/cat
        test -f $xcat || xcat=/usr/bin/cat
        echo "#!$xcat" >try
@@ -806,12 +882,11 @@ if `$sh -c '#' >/dev/null 2>&1`; then
                if test -s today; then
                        sharpbang='#! '
                else
-                       echo "Okay, let's see if #! works on this system..."
-                       echo "It's just a comment."
                        sharpbang=': use '
                fi
        fi
 else
+       echo " "
        echo "Your $sh doesn't grok # comments--I will strip them later on."
        shsharp=false
        cd ..
@@ -841,60 +916,11 @@ $eunicefix try
 if ./try; then
        : echo "Yup, it does."
 else
-       echo "Hmm.  '$startsh' didn't work."
-       echo "You may have to fix up the shell scripts to make sure sh runs them."
+       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
 rm -f try
 
-: script used to extract .SH files with variable substitutions
-cat >extract <<EOS
-$startsh
-EOS
-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"
-               fi
-       done
-       set x $shlist
-else
-       echo "(Looking for .SH files under the current directory.)"
-       set x `find . -name "*.SH" -print`
-fi
-shift
-case $# in
-0) set x *.SH; shift;;
-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
-fi
-EOS
-
 : produce awk script to parse command line options
 cat >options.awk <<'EOF'
 BEGIN {
@@ -959,6 +985,10 @@ extractsh=''
 override=''
 knowitall=''
 rm -f optdef.sh
+cat >optdef.sh <<EOS
+$startsh
+EOS
+
 
 : option parsing
 while test $# -gt 0; do
@@ -978,11 +1008,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
@@ -1008,7 +1038,7 @@ while test $# -gt 0; do
                esac
                shift
                ;;
-       -V) echo "$me generated by metaconfig 3.0 PL60." >&2
+       -V) echo "$me generated by metaconfig 3.0 PL70." >&2
                exit 0;;
        --) break;;
        -*) echo "$me: unknown option $1" >&2; shift; error=true;;
@@ -1043,6 +1073,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;;
@@ -1052,26 +1093,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/'`
@@ -1081,13 +1102,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
@@ -1109,6 +1123,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..."
@@ -1130,12 +1290,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
@@ -1146,7 +1307,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 (chip@atlantic.net).
+and contact the author (doughera@lafcol.lafayette.edu).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -1162,7 +1323,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 !"
@@ -1192,6 +1353,7 @@ esac"
 
 : now set up to do reads with possible shell escape and default assignment
 cat <<EOSC >myread
+$startsh
 xxxm=\$dflt
 $myecho
 ans='!'
@@ -1214,8 +1376,20 @@ 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
+       "!")
+               sh 1>&4
+               echo " "
+               $myecho
+               ;;
+       !*)
+               set x \`expr "X\$ans" : "X!\(.*\)\$"\`
+               shift
+               sh 1>&4 -c "\$*"
+               echo " "
+               $myecho
+               ;;
        "\$ans")
                case "\$ans" in
                \\&*)
@@ -1233,18 +1407,6 @@ while expr "X\$ans" : "X!" >/dev/null; do
                        $myecho
                        ans=!
                        ;;
-               "!")
-                       sh 1>&4
-                       echo " "
-                       $myecho
-                       ;;
-               !*)
-                       set x \`expr "X\$ans" : "X!\(.*\)\$"\`
-                       shift
-                       sh 1>&4 -c "\$*"
-                       echo " "
-                       $myecho
-                       ;;
                esac;;
        *)
                case "\$aok" in
@@ -1279,7 +1441,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
@@ -1288,8 +1450,8 @@ EOF
 needman=true
 firsttime=true
 user=`(logname) 2>/dev/null`
-case "$user" in "")
-       user=`whoami 2>&1` ;;
+case "$user" in
+'') user=`whoami 2>&1`;;
 esac
 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
        firsttime=false
@@ -1304,7 +1466,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
@@ -1336,7 +1498,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
@@ -1346,7 +1508,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 (chip@atlantic.net) 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:
 
@@ -1395,8 +1557,12 @@ for dir in \$*; do
                echo \$thisthing
                exit 0
        elif test -f \$dir/\$thing.exe; then
-               : on Eunice apparently
-               echo \$dir/\$thing
+               if test -n "$DJGPP"; then
+                       echo \$dir/\$thing.exe
+               else
+                       : on Eunice apparently
+                       echo \$dir/\$thing
+               fi
                exit 0
        fi
        ;;
@@ -1417,6 +1583,7 @@ expr
 find
 grep
 ls
+make
 mkdir
 rm
 sed
@@ -1427,6 +1594,7 @@ uniq
 "
 trylist="
 Mcc
+ar
 byacc
 cpp
 csh
@@ -1437,10 +1605,12 @@ less
 line
 ln
 more
+nm
 nroff
 perl
 pg
 sendmail
+tee
 test
 uname
 zip
@@ -1448,7 +1618,19 @@ 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
@@ -1469,7 +1651,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
@@ -1630,13 +1824,14 @@ 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 chip@atlantic.net
+       : 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
@@ -1644,6 +1839,7 @@ EOM
        $test -f /dnix && osname=dnix
        $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
@@ -1651,12 +1847,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"
@@ -1675,7 +1871,6 @@ EOM
                        esac;;
                [23]100) osname=mips ;;
                next*) osname=next ;;
-               news*) osname=news ;;
                i386*)
                        if $test -f /etc/kconfig; then
                                osname=isc
@@ -1688,6 +1883,12 @@ EOM
                                fi
                        fi
                        ;;
+               pc*)
+                       if test -n "$DJGPP"; then
+                               osname=dos
+                               osvers=djgpp
+                       fi
+                       ;;
                esac
 
                case "$1" in
@@ -1701,6 +1902,9 @@ EOM
                        *) osvers=$tmp;;
                        esac
                        ;;
+               *dc.osx) osname=dcosx
+                       osvers="$3"
+                       ;;
                dnix) osname=dnix
                        osvers="$3"
                        ;;
@@ -1721,6 +1925,8 @@ EOM
                        *.08.*) osvers=9 ;;
                        *.09.*) osvers=9 ;;
                        *.10.*) osvers=10 ;;
+                       *.11.*) osvers=11 ;;
+                       *.12.*) osvers=12 ;;
                        *)      osvers="$3" ;;
                        esac
                        ;;
@@ -1733,16 +1939,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
@@ -1769,10 +1984,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 ;;
@@ -1813,11 +2028,11 @@ EOM
                        *)      if test -f /etc/systemid; then
                                        osname=sco
                                        set `echo $3 | $sed 's/\./ /g'` $4
-                                       if $test -f sco_$1_$2_$3.sh; then
+                                       if $test -f $src/hints/sco_$1_$2_$3.sh; then
                                                osvers=$1.$2.$3
-                                       elif $test -f sco_$1_$2.sh; then
+                                       elif $test -f $src/hints/sco_$1_$2.sh; then
                                                osvers=$1.$2
-                                       elif $test -f sco_$1.sh; then
+                                       elif $test -f $src/hints/sco_$1.sh; then
                                                osvers=$1
                                        fi
                                else
@@ -1840,12 +2055,12 @@ 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
@@ -1868,17 +2083,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
@@ -1887,25 +2102,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
@@ -1913,11 +2149,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
@@ -1929,13 +2165,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
 ;;
@@ -2008,18 +2242,73 @@ none)  osvers='' ;;
 *) osvers="$ans" ;;
 esac
 
-
-
 : who configured the system
-cf_time=`$date 2>&1`
+cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
 cf_by=`(logname) 2>/dev/null`
-case "$cf_by" in "")
+case "$cf_by" in
+"")
        cf_by=`(whoami) 2>/dev/null`
-       case "$cf_by" in "")
-               cf_by=unknown ;;
+       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 if a threading perl is to be built, 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 " "
 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
@@ -2048,9 +2337,20 @@ 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 " "
 case "$afs" in
@@ -2116,7 +2416,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=''
@@ -2425,14 +2728,14 @@ else
 fi
 
 : set the base revision
-baserev=5
+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`
-       subversion=`awk '/SUBVERSION/ {print $3}' ../patchlevel.h`
+if $test -r $rsrc/patchlevel.h;then
+       patchlevel=`awk '/define[       ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
+       subversion=`awk '/define[       ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
 else
        patchlevel=0
        subversion=0
@@ -2457,23 +2760,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
-               ;;
-       *)      if test 0 -eq "$subversion"; then
-                       version=`echo $baserev $patchlevel | \
-                                $awk '{ printf "%d.%03d\n",$1,$2 }'`
-               else
-                       version=`echo $baserev $patchlevel $subversion | \
-                                $awk '{ printf "%d.%03d%02d\n",$1,$2,$3 }'`
-               fi
-               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
 
@@ -2492,9 +2799,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
@@ -2514,54 +2822,6 @@ else
        d_archlib="$define"
 fi
 
-: set up the script used to warn in case of inconsistency
-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 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
-
 : make some quick guesses about what we are up against
 echo " "
 $echo $n "Hmm...  $c"
@@ -2764,168 +3024,6 @@ esac
 set d_dosuid
 eval $setvar
 
-: determine where site specific libraries go.
-set sitelib sitelib
-eval $prefixit
-case "$sitelib" in
-'')    dflt="$privlib/site_perl" ;;
-*)     dflt="$sitelib" ;;
-esac
-$cat <<EOM
-
-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.
-
-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
-
-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 "$installsitelib" in
-       '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installsitelib";;
-       esac
-       fn=de~
-       rp='Where will private 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
-$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
-
-: 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
-
-In 5.001, Perl stored architecture-dependent library files in a directory
-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 a version-specific directory such as
-$archlib, 
-while locally-added extensions will go into
-$sitearch.
-
-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'.
-
-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" ;;
-esac
-set d_oldarchlib
-eval $setvar
-
-: determine where public executables go
-echo " "
-set dflt bin bin
-eval $prefixit
-fn=d~
-rp='Pathname where the public executables will reside?'
-. ./getfile
-if $test "X$ansexp" != "X$binexp"; then
-       installbin=''
-fi
-bin="$ans"
-binexp="$ansexp"
-if $afs; then
-       $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in which
-executables 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 "$installbin" in
-       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installbin";;
-       esac
-       fn=de~
-       rp='Where will public executables be installed?'
-       . ./getfile
-       installbin="$ans"
-else
-       installbin="$binexp"
-fi
-
 : determine where manual pages are on this system
 echo " "
 case "$sysman" in
@@ -2956,8 +3054,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`
@@ -2991,6 +3089,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
@@ -3086,6 +3186,7 @@ none)
        echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
        ;;
 esac
+$rm -f pdp11.* pdp11
 
 : see if we need a special compiler
 echo " "
@@ -3108,8 +3209,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
@@ -3117,7 +3219,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
@@ -3129,6 +3233,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
@@ -3197,13 +3307,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"
@@ -3212,177 +3322,6 @@ y)      fn=d/
        ;;
 esac
 
-: 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
-
-: Define several unixisms. Hints files or command line options
-: can be used to override them.
-case "$ar" in
-'') ar='ar';;
-esac
-case "$lib_ext" in
-'') lib_ext='.a';;
-esac
-case "$obj_ext" in
-'') obj_ext='.o';;
-esac
-case "$path_sep" in
-'') path_sep=':';;
-esac
-: Which makefile gets called first.  This is used by make depend.
-case "$firstmakefile" in
-'') firstmakefile='makefile';;
-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"
-
-: 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$lib_ext X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc $thislib$lib_ext 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$lib_ext 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$lib_ext 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
@@ -3521,9 +3460,203 @@ 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
+
+: 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
+       ;;
+esac
+case "$_a" in
+'')    case "$lib_ext" in
+    '')        _a='.a';;
+       *)      _a="$lib_ext" ;;
+       esac
+       ;;
+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_
+
+: 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
+
 : determine optimize, if desired, or use for debug flag also
 case "$optimize" in
-' ') dflt='none';;
+' '|$undef) dflt='none';;
 '') dflt='-O';;
 *) dflt="$optimize";;
 esac
@@ -3599,7 +3732,6 @@ if ./osf1; then
 else
        set signal.h LANGUAGE_C; eval $inctest
 fi
-set signal.h _NO_PROTO; eval $inctest
 
 case "$hint" in
 none|recommended) dflt="$ccflags $dflt" ;;
@@ -3615,8 +3747,7 @@ 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".
 
@@ -3660,9 +3791,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
@@ -3684,7 +3815,6 @@ EOM
 esac
 
 : flags used in final linking phase
-
 case "$ldflags" in
 '') if ./venix; then
                dflt='-i -z'
@@ -3739,7 +3869,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:
@@ -3752,12 +3882,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"
@@ -3770,7 +3917,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.)"
@@ -3785,10 +3932,94 @@ y)
                exit 1
                ;;
        esac
-       ;;
-n) echo "OK, that should do.";;
-esac
-$rm -f try try.* core
+       ;;
+n) echo "OK, that should do.";;
+esac
+$rm -f try try.* core
+
+: 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*
+
+case "$prototype" in
+"$define") ;;
+*)     ansi2knr='ansi2knr'
+       echo " "
+       cat <<EOM >&4
+
+$me:  FATAL ERROR:
+This version of $package can only be compiled by a compiler that 
+understands function prototypes.  Unfortunately, your C compiler 
+       $cc $ccflags
+doesn't seem to understand them.  Sorry about that.
+
+If GNU cc is avaiable for your system, perhaps you could try that instead.  
+
+Eventually, we hope to support building Perl with pre-ANSI compilers.
+If you would like to help in that effort, please contact <perlbug@perl.org>.
+
+Aborting Configure now.
+EOM
+       exit 2
+       ;;
+esac
+
+: determine where public executables go
+echo " "
+set dflt bin bin
+eval $prefixit
+fn=d~
+rp='Pathname where the public executables will reside?'
+. ./getfile
+if $test "X$ansexp" != "X$binexp"; then
+       installbin=''
+fi
+bin="$ans"
+binexp="$ansexp"
+if $afs; then
+       $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+executables 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 "$installbin" in
+       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installbin";;
+       esac
+       fn=de~
+       rp='Where will public executables be installed?'
+       . ./getfile
+       installbin="$ans"
+else
+       installbin="$binexp"
+fi
+
+: define a shorthand compile call
+compile='
+mc_file=$1;
+shift;
+$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
+: define a shorthand compile call for compilations that should be ok.
+compile_ok='
+mc_file=$1;
+shift;
+$cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
 
 echo " "
 echo "Checking for GNU C Library..." >&4
@@ -3796,11 +4027,12 @@ cat >gnulibc.c <<EOM
 int
 main()
 {
-  return __libc_main();
+       return __libc_main();
 }
 EOM
-if $cc $ccflags $ldflags -o gnulibc gnulibc.c $libs >/dev/null 2>&1 && \
-    ./gnulibc | $contains '^GNU C Library' >/dev/null 2>&1; then
+set gnulibc
+if eval $compile && \
+  ./gnulibc | $contains '^GNU C Library'; then
        val="$define"
        echo "You are using the GNU C Library"
 else
@@ -3814,12 +4046,26 @@ eval $setvar
 : see if nm is to be used to determine whether a symbol is defined or not
 case "$usenm" in
 '')
+       dflt=''
        case "$d_gnulibc" in
-       $define)
+       "$define")
+               echo " "
+               echo "nm probably won't work on the GNU C Library." >&4
                dflt=n
                ;;
-       *)
-               dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
+       esac
+       case "$dflt" in
+       '') 
+               if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
+                       echo " "
+                       echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
+                       echo "'nm' won't be sufficient on this sytem." >&4
+                       dflt=n
+               fi
+               ;;
+       esac
+       case "$dflt" in
+       '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
                if $test $dflt -gt 20; then
                        dflt=y
                else
@@ -3830,26 +4076,28 @@ case "$usenm" in
        ;;
 *)
        case "$usenm" in
-       true) dflt=y;;
+       true|$define) 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.
-You shouldn't let me use 'nm' if you have the GNU C Library.
+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 probably shouldn't let me use 'nm' if you are using the GNU C Library.
 
 EOM
-rp='Shall I use nm to extract C symbols from the libraries?'
+rp="Shall I use $nm to extract C symbols from the libraries?"
 . ./myread
 case "$ans" in
-n|N) usenm=false;;
+[Nn]*) usenm=false;;
 *) usenm=true;;
 esac
 
@@ -3861,11 +4109,13 @@ 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;;
@@ -3876,7 +4126,7 @@ esac
 case "$nm_so_opt" in
 '')    case "$myuname" in
        *linux*)
-               if nm --help | $grep 'dynamic' > /dev/null 2>&1; then
+               if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
                        nm_so_opt='--dynamic'
                fi
                ;;
@@ -3891,7 +4141,7 @@ echo " "
 case "$libc" in
 '') libc=unknown
        case "$libs" in
-       *-lc_s*) libc=`./loc libc_s$lib_ext $libc $libpth`
+       *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
        esac
        ;;
 esac
@@ -3909,15 +4159,15 @@ case "$libs" in
                        :
                elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
                        :
-               elif try=`./loc lib$thislib$lib_ext X $libpth`; $test -f "$try"; then
+               elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
                        :
-               elif try=`./loc $thislib$lib_ext 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$lib_ext X $xlibpth`; $test -f "$try"; then
+               elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
                        :
                else
                        try=''
@@ -3938,18 +4188,18 @@ unknown)
                : 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 '
+                       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/^.* //'`
+                        sort | $sed -e 's/^.* //'`
                eval set \$$#
        done
        $test -r $1 || set /usr/ccs/lib/libc.$so
-       $test -r $1 || set /lib/libsys_s$lib_ext
-       ;;
+       $test -r $1 || set /lib/libsys_s$_a
+       ;;
 *)
        set blurfl
        ;;
@@ -3967,25 +4217,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$lib_ext; then
-       libc=$incpath/usr/lib/libc$lib_ext;
+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$lib_ext; then
-       libc=/lib/libc$lib_ext;
+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$lib_ext 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$lib_ext blurfl/dyick $xlibpth`; $test -r "$tans"; then
+       elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
                :
-       elif tans=`./loc Mlibc$lib_ext blurfl/dyick $xlibpth`; $test -r "$tans"; then
+       elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
                :
        else
-               tans=`./loc Llibc$lib_ext 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."
@@ -4033,15 +4283,12 @@ $sed 's/^/      /' libnames >&4
 echo " "
 $echo $n "This may take a while...$c" >&4
 
-: Linux may need the special Dynamic option to nm for shared libraries.
-: In general, this is stored in the nm_so_opt variable.
-: Unfortunately, that option may be fatal on non-shared libraries.
-for nm_libs_ext in $*; do
-    case $nm_libs_ext in
-       *$so*)  nm $nm_so_opt $nm_opt $nm_libs_ext 2>/dev/null ;;
-       *)              nm $nm_opt $nm_libs_ext 2>/dev/null ;;
+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
+done >libc.tmp
 
 $echo $n ".$c"
 $grep fprintf libc.tmp > libc.ptf
@@ -4085,6 +4332,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
@@ -4093,8 +4344,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
@@ -4103,23 +4358,38 @@ 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
+               if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
+                       for thisname in $libnames $libc; 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
+               elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
+                       # Repeat libc to extract forwarders to DLL entries too
+                       for thisname in $libnames $libc; do
+                               $ar tv $thisname >>libc.tmp
+                               # Revision 50 of EMX has bug in $ar.
+                               # it will not extract forwarders to DLL entries
+                               # Use emximp which will extract exactly them.
+                               emximp -o tmp.imp $thisname \
+                                   2>/dev/null && \
+                                   $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
+                                   < tmp.imp >>libc.tmp
+                               $rm tmp.imp
+                       done
+                       $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
                        echo "Ok." >&4
                else
-                       echo "ar didn't seem to work right." >&4
+                       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
-                                       ar t $thisname >>libc.tmp
+                                       $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
+                                       $ar t $thisname >>libc.tmp
                                done
                                echo "Ok." >&4
                        else
@@ -4255,7 +4525,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;
@@ -4324,7 +4594,7 @@ $undef|n|false)
            $define) dflt='y' ;;
        esac
        : Does a dl_xxx.xs file exist for this operating system
-       $test -f ../$dldir/dl_${osname}.xs && dflt='y'
+       $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
        ;;
 esac
 rp="Do you wish to use dynamic loading?"
@@ -4334,7 +4604,7 @@ case "$ans" in
 y*) usedl="$define"
        case "$dlsrc" in
        '')
-               if $test -f ../$dldir/dl_${osname}.xs ; then
+               if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
                        dflt="$dldir/dl_${osname}.xs"
                elif $test "$d_dlopen" = "$define" ; then
                        dflt="$dldir/dl_dlopen.xs"
@@ -4349,15 +4619,17 @@ y*) usedl="$define"
        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
+       tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
+       rp="Source file to use for dynamic loading"
+       fn="fne"
+       # XXX This getfile call will fail the existence check if you try 
+       # building away from $src (this is not supported yet).
+       . ./getfile
        usedl="$define"
        : emulate basename
        dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
 
-    $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.
@@ -4369,12 +4641,26 @@ EOM
                '') case "$osname" in
                        hpux)   dflt='+z' ;;
                        next)   dflt='none' ;;
-                       solaris|svr4*|esix*) dflt='-Kpic' ;;
-                       irix*)  dflt='-KPIC' ;;
+                       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 ;;
-               *)      dflt='-fpic' ;;
            esac ;;
     *) dflt="$cccdlflags" ;;
     esac
@@ -4512,37 +4798,33 @@ $undef)
        ;;
 *)     case "$useshrplib" in
        '')     case "$osname" in
-               svr4|dgux|dynixptx|esix|powerux)
-                       dflt='yes'
+               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='yes'
+                       4*)     dflt=y
                                also='Building a shared libperl is needed for MAB support.'
                                ;;
-                       *)      dflt='no'
+                       *)      dflt=n
                                ;;
                        esac
                        ;;
-               sunos)
-                       dflt='no'
-                       also='Building a shared libperl will definitely not work on SunOS 4.'
-                       ;;
-               *)      dflt='no'
+               *)      dflt=n
                        ;;
                esac
                ;;
        $define|true|[Yy]*)
-               dflt='yes'
+               dflt=y
                ;;
-       *)      dflt='no'
+       *)      dflt=n
                ;;
        esac
        $cat << EOM
 
 The perl executable is normally obtained by linking perlmain.c with
-libperl${lib_ext}, any static extensions (usually just DynaLoader), and
+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
@@ -4560,12 +4842,14 @@ EOM
                # Why does next4 have to be so different?
                case "${osname}${osvers}" in
                next4*) xxx='DYLD_LIBRARY_PATH' ;;
+               os2*)   xxx='' ;; # Nothing special needed.
                *)              xxx='LD_LIBRARY_PATH' ;;
                esac
-               $cat <<EOM >&4
+               if test X"$xxx" != "X"; then
+                       $cat <<EOM  | $tee -a ../config.msg >&4
 
 To build perl, you must add the current working directory to your
-$xxx environtment variable before running make.  You can do
+$xxx environment variable before running make.  You can do
 this with
    $xxx=\`pwd\`; export $xxx
 for Bourne-style shells, or
@@ -4573,6 +4857,7 @@ for Bourne-style shells, or
 for Csh-style shells.  You *MUST* do this before running make.
 
 EOM
+               fi
                ;;
        *)      useshrplib='false' ;;
        esac
@@ -4634,7 +4919,7 @@ EOM
        echo "Ok, I'll use $libperl"
        ;;
 *)
-       libperl="libperl${lib_ext}"
+       libperl="libperl${_a}"
        ;;
 esac
 
@@ -4644,7 +4929,7 @@ 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 (chip@atlantic.net)
+will not work in this version.  Let me (doughera@lafcol.lafayette.edu)
 know of any problems this may cause.
 
 EOM
@@ -4675,26 +4960,41 @@ xxx=''
 tmp_shrpenv=''
 if "$useshrplib"; then
     case "$osname" in 
+       aix)
+               # We'll set it in Makefile.SH...
+               ;;
        solaris|netbsd)
                xxx="-R $shrpdir"
                ;;
-       linux|irix*)
+       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
        '') ;;
-       *)      ccdlflags="$ccdlflags $xxx"
-               cat <<EOM >&4
+       *)      
+               # Only add $xxx if it isn't already in ccdlflags.
+               case " $ccdlflags " in
+               *" $xxx "*)     ;;
+               *)      ccdlflags="$ccdlflags $xxx"
+                       cat <<EOM >&4
 
 Adding $xxx to the flags
 passed to $ld so that the perl executable will find the 
 installed shared $libperl.
 
 EOM
+                       ;;
+               esac
                ;;
        esac
 fi
@@ -4726,14 +5026,6 @@ case "$man1dir" in
        lookpath="$lookpath $prefixexp/man/p_man/man1"
        lookpath="$lookpath $prefixexp/man/u_man/man1"
        lookpath="$lookpath $prefixexp/man/man.1"
-       : If prefix contains 'perl' then we want to keep the man pages
-       : under the prefix directory.  Otherwise, look in a variety of
-       : other possible places.  This is debatable, but probably a
-       : good compromise.  Well, apparently not.
-       : Experience has shown people expect man1dir to be under prefix,
-       : so we now always put it there.  Users who want other behavior
-       : can answer interactively or use a command line option.
-       : Does user have System V-style man paths.
        case "$sysman" in
        */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
        *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
@@ -4862,7 +5154,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";;
@@ -4873,7 +5164,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";;
@@ -4881,14 +5171,10 @@ 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 | 
+       *$prog*) dflt=`echo $man1dir | 
                        $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
        *)      dflt="$privlib/man/man3" ;;
        esac
@@ -4899,7 +5185,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=''
@@ -4938,7 +5224,7 @@ case "$man3dir" in
        man3ext='0'
        ;;
 *)
-       rp="What suffix should be used for the $spackage library man pages?"
+       rp="What suffix should be used for the $package library man pages?"
        case "$man3ext" in
        '')     case "$man3dir" in
                *3)  dflt=3 ;;
@@ -5005,6 +5291,15 @@ if $test -d /usr/etc/yp || $test -d /etc/yp; then
                ;;
        esac
 fi
+case "$hostcat" in
+'') hostcat='cat /etc/hosts';;
+esac
+case "$groupcat" in
+'') groupcat='cat /etc/group';;
+esac
+case "$passcat" in
+'') passcat='cat /etc/passwd';;
+esac
 
 : now get the host name
 echo " "
@@ -5100,15 +5395,11 @@ case "$myhostname" in
 *) case "$mydomain" in
        '')
                {
-                       : If we use NIS, try ypmatch.
-                       : Is there some reason why this was not done before?
                        test "X$hostcat" = "Xypcat hosts" &&
                        ypmatch "$myhostname" hosts 2>/dev/null |\
                                $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
                        $test -s hosts
                } || {
-                       : Extract only the relevant hosts, reducing file size,
-                       : remove comments, insert trailing space for later use.
                        $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
                                        /[       ]$myhostname[  . ]/p" > hosts
                }
@@ -5130,14 +5421,14 @@ case "$myhostname" in
                        tans=`./loc resolv.conf X /etc /usr/etc`
                        if $test -f "$tans"; then
                                echo "(Attempting domain name extraction from $tans)"
-                               : Why was there an Egrep here, when Sed works?
-                               : Look for either a search or a domain directive.
-                               dflt=.`$sed -n -e 's/^search[   ]*\(.*\)/\1/p' $tans \
-                                       | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+                               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/^domain[   ]*\(.*\)/\1/p' $tans \
-                                               | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
-                                       ;;
+                               .) dflt=.`$sed -n -e 's/        / /g' \
+                                    -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
+                                    | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+                                       ;;
                                esac
                        fi
                        ;;
@@ -5270,8 +5561,17 @@ EOH
                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";;
+               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
+                       fi ;;
                esac
                ;;
        *) startperl=": # use perl"
@@ -5362,15 +5662,105 @@ else
        installscript="$scriptdirexp"
 fi
 
+: 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
+
+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.
+
+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
+
+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
+$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 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
+
 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
+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 and is the only supported mechanism.  This abstraction
-layer can use AT&T's sfio (if you already have sfio installed) or
-fall back on standard IO.  This PerlIO abstraction layer is
-experimental and may cause problems with some extension modules.
+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
@@ -5463,9 +5853,9 @@ 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
+       $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
@@ -5515,15 +5905,15 @@ main() {
 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
+               $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 access.c -o access >/dev/null 2>&1 ; then
+               $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 access.c -o access >/dev/null 2>&1 ; then
+               $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
@@ -5575,10 +5965,10 @@ eval $inhdr
 set getpgrp d_getpgrp
 eval $inlibc
 
-echo "Checking to see which flavor of getpgrp is in use . . . "
 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>
@@ -5637,10 +6027,10 @@ $rm -f set set.c
 set setpgrp d_setpgrp
 eval $inlibc
 
-echo "Checking to see which flavor of setpgrp is in use . . . "
 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>
@@ -5670,7 +6060,7 @@ EOP
                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."
+               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
@@ -5693,38 +6083,56 @@ EOP
 esac
 set d_bsdsetpgrp
 eval $setvar
-d_bsdpgrp=$d_bsdsetpgrp
 $rm -f set set.c
 : see if bzero exists
 set bzero d_bzero
 eval $inlibc
 
-: check for length of integer
+: check for lengths of integral types
 echo " "
 case "$intsize" in
 '')
        echo "Checking to see how big your integers are..." >&4
-       $cat >try.c <<'EOCP'
+       $cat >intsize.c <<'EOCP'
 #include <stdio.h>
 main()
 {
-       printf("%d\n", sizeof(int));
+       printf("intsize=%d;\n", sizeof(int));
+       printf("longsize=%d;\n", sizeof(long));
+       printf("shortsize=%d;\n", sizeof(short));
        exit(0);
 }
 EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
-               intsize=`./try`
+       set intsize
+       if eval $compile_ok && ./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
-               dflt='4'
-               echo "(I can't seem to compile the test program.  Guessing...)"
+               $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 try.c try
+$rm -f intsize intsize.*
 
 : see if signal is declared as pointer to function returning int or void
 echo " "
@@ -5734,11 +6142,14 @@ 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
+       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
        '')
@@ -5751,9 +6162,12 @@ else
                *) 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;;
+               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
@@ -5767,32 +6181,40 @@ $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
+if $test "$intsize" -ge 4; then
        xxx=int
 else
        xxx=long
 fi
 $cat >try.c <<EOCP
+#include <stdio.h>
 #include <sys/types.h>
 #include <signal.h>
-$signal_t blech() { exit(3); }
+$signal_t blech(s) int s; { exit(3); }
 main()
 {
        $xxx i32;
-       double f;
+       double f, g;
        int result = 0;
        signal(SIGFPE, blech);
 
-       f = (double) 0x7fffffff;
-       f = 10 * f;
-       i32  = ($xxx) f;
+       /* Don't let compiler optimize the test away */
+       sscanf("2147483647", "%lf", &f); /* f = (double) 0x7fffffff; */
+       g = 10 * f;
+       i32  = ($xxx) g;
 
+       /* x86 processors will probably give 0x8000 0000, which is a
+       sign change.  We don't want that.  We want to mimic SPARC
+          behavior here, which is to preserve the sign and give
+          back 0x7fff ffff.
+       */
        if (i32 != ($xxx) f)
                result |= 1;
        exit(result);
 }
 EOCP
-if $cc -o try $ccflags try.c >/dev/null 2>&1; then
+set try
+if eval $compile_ok; then
        ./try
        yyy=$?
 else
@@ -5815,20 +6237,26 @@ $rm -f try try.*
 echo " "
 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
 $cat >try.c <<EOCP
+#include <stdio.h>
 #include <sys/types.h>
 #include <signal.h>
-$signal_t blech() { exit(7); }
-$signal_t blech_in_list() { exit(4); }
+$signal_t blech(s) int s; { exit(7); }
+$signal_t blech_in_list(s) int s; { 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.;
+       double f;
        unsigned long along;
        unsigned int aint;
        unsigned short ashort;
        int result = 0;
+       /* Frustrate gcc-2.7.2's optimizer which failed this test with
+          a direct f = -123. assignment.  gcc-2.8.0 reportedly
+          optimized the whole file away
+       */
+       sscanf("-123.", "%lf", &f);  /* f = -123.; */
 
        signal(SIGFPE, blech);
        along = (unsigned long)f;
@@ -5840,7 +6268,7 @@ main()
                result |= 1;
        if (ashort != (unsigned short)-123)
                result |= 1;
-       f = (double)0x40000000;
+       sscanf("1073741824.", "%lf", &f); /* f = (double)0x40000000; */
        f = f + f;
        along = 0;
        along = (unsigned long)f;
@@ -5859,7 +6287,7 @@ main()
        if (result)
                exit(result);
        signal(SIGFPE, blech_in_list);
-       f = 123.;
+       sscanf("123.", "%lf", &f);  /* f = 123.; */
        along = dummy_long((unsigned long)f);
        aint = dummy_int((unsigned int)f);
        ashort = dummy_short((unsigned short)f);
@@ -5873,7 +6301,8 @@ main()
 
 }
 EOCP
-if $cc -o try $ccflags try.c >/dev/null 2>&1; then
+set try
+if eval $compile_ok; then
        ./try
        castflags=$?
 else
@@ -5912,7 +6341,8 @@ va_dcl
        exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
 }
 EOF
-       if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
+       set vprintf
+       if eval $compile && ./vprintf; then
                echo "Your vsprintf() returns (int)." >&4
                val2="$undef"
        else
@@ -5970,19 +6400,19 @@ if set crypt val -f d_crypt; eval $csym; $val; then
        val="$define"
        cryptlib=''
 else
-       cryptlib=`./loc Slibcrypt$lib_ext "" $xlibpth`
+       cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
        if $test -z "$cryptlib"; then
-               cryptlib=`./loc Mlibcrypt$lib_ext "" $xlibpth`
+               cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
        else
                cryptlib=-lcrypt
        fi
        if $test -z "$cryptlib"; then
-               cryptlib=`./loc Llibcrypt$lib_ext "" $xlibpth`
+               cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
        else
                cryptlib=-lcrypt
        fi
        if $test -z "$cryptlib"; then
-               cryptlib=`./loc libcrypt$lib_ext "" $libpth`
+               cryptlib=`./loc libcrypt$_a "" $libpth`
        else
                cryptlib=-lcrypt
        fi
@@ -5996,15 +6426,6 @@ 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
@@ -6132,7 +6553,7 @@ $define|y|true)
        $cat << EOM
 
 On a few systems, the dynamically loaded modules that perl generates and uses
-will need a different extension then shared libs. The default will probably
+will need a different extension than shared libs. The default will probably
 be appropriate.
 
 EOM
@@ -6208,8 +6629,8 @@ main()
 EOM
        : Call the object file tmp-dyna.o in case dlext=o.
        if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
-               mv dyna${obj_ext} tmp-dyna${obj_ext} > /dev/null 2>&1 && 
-               $ld $lddlflags -o dyna.$dlext tmp-dyna${obj_ext} > /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
@@ -6236,6 +6657,22 @@ eval $setvar
 set dup2 d_dup2
 eval $inlibc
 
+: see if endhostent exists
+set endhostent d_endhent
+eval $inlibc
+
+: see if endnetent exists
+set endnetent d_endnent
+eval $inlibc
+
+: see if endprotoent exists
+set endprotoent d_endpent
+eval $inlibc
+
+: see if endservent exists
+set endservent d_endsent
+eval $inlibc
+
 : Locate the flags for 'open()'
 echo " "
 $cat >open3.c <<'EOCP'
@@ -6257,7 +6694,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
@@ -6268,7 +6705,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
@@ -6318,7 +6755,8 @@ main() {
        exit(0);
 }
 EOCP
-       if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
+       set try
+       if eval $compile_ok; then
                o_nonblock=`./try`
                case "$o_nonblock" in
                '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
@@ -6342,7 +6780,9 @@ case "$eagain" in
 #include <sys/types.h>
 #include <signal.h>
 #define MY_O_NONBLOCK $o_nonblock
+#ifndef errno  /* XXX need better Configure test */
 extern int errno;
+#endif
 $signal_t blech(x) int x; { exit(3); }
 EOCP
        $cat >> try.c <<'EOCP'
@@ -6396,7 +6836,8 @@ main()
        exit(0);                                /* Bye bye, thank you for playing! */
 }
 EOCP
-       if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
+       set try
+       if eval $compile_ok; then
                echo "$startsh" >mtry
                echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
                chmod +x mtry
@@ -6433,7 +6874,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
@@ -6495,14 +6936,80 @@ 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
 
+hasproto='varname=$1; func=$2; shift; shift;
+while $test $# -ge 2; do
+       case "$1" in
+       $define) echo "#include <$2>";;
+       esac ;
+    shift 2;
+done > try.c;
+$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
+if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
+       echo "$func() prototype found.";
+       val="$define";
+else
+       echo "$func() prototype NOT found.";
+       val="$undef";
+fi;
+set $varname;
+eval $setvar;
+$rm -f try.c tryout.c'
+
+: see if this is a netdb.h system
+set netdb.h i_netdb
+eval $inhdr
+
+: see if prototypes for various gethostxxx netdb.h functions are available
+echo " "
+set d_gethostprotos gethostent $i_netdb netdb.h
+eval $hasproto
+
 : see if getlogin exists
 set getlogin d_getlogin
 eval $inlibc
 
+: see if getnetbyaddr exists
+set getnetbyaddr d_getnbyaddr
+eval $inlibc
+
+: see if getnetbyname exists
+set getnetbyname d_getnbyname
+eval $inlibc
+
+: see if getnetent exists
+set getnetent d_getnent
+eval $inlibc
+
+: see if prototypes for various getnetxxx netdb.h functions are available
+echo " "
+set d_getnetprotos getnetent $i_netdb netdb.h
+eval $hasproto
+
+
+: see if getprotobyname exists
+set getprotobyname d_getpbyname
+eval $inlibc
+
+: see if getprotobynumber exists
+set getprotobynumber d_getpbynumber
+eval $inlibc
+
+: see if getprotoent exists
+set getprotoent d_getpent
+eval $inlibc
+
 : see if getpgid exists
 set getpgid d_getpgid
 eval $inlibc
@@ -6519,6 +7026,29 @@ eval $inlibc
 set getpriority d_getprior
 eval $inlibc
 
+: see if prototypes for various getprotoxxx netdb.h functions are available
+echo " "
+set d_getprotoprotos getprotoent $i_netdb netdb.h
+eval $hasproto
+
+
+: see if getservbyname exists
+set getservbyname d_getsbyname
+eval $inlibc
+
+: see if getservbyport exists
+set getservbyport d_getsbyport
+eval $inlibc
+
+: see if getservent exists
+set getservent d_getsent
+eval $inlibc
+
+: see if prototypes for various getservxxx netdb.h functions are available
+echo " "
+set d_getservprotos getservent $i_netdb netdb.h
+eval $hasproto
+
 : see if gettimeofday or ftime exists
 set gettimeofday d_gettimeod
 eval $inlibc
@@ -6648,7 +7178,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
@@ -6663,17 +7194,135 @@ $rm -f isascii*
 set killpg d_killpg
 eval $inlibc
 
+: see if lchown exists
+echo " "
+$cat > try.c <<'EOCP'
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char lchown(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char lchown();
+int main() {
+    /*  The GNU C library defines this for functions which it implements
+        to always fail with ENOSYS.  Some functions are actually named
+       something starting with __ and the normal name is an alias.  */
+#if defined (__stub_lchown) || defined (__stub___lchown)
+choke me
+#else
+lchown();
+#endif
+; return 0; }
+EOCP
+set try
+if eval $compile; then
+    $echo "lchown() found." >&4
+    val="$define"
+else
+    $echo "lchown() NOT found." >&4
+    val="$undef"
+fi
+set d_lchown
+eval $setvar
+
 : see if link exists
 set link d_link
 eval $inlibc
 
-: see if localeconv exists
-set localeconv d_locconv
-eval $inlibc
+: see if localeconv exists
+set localeconv d_locconv
+eval $inlibc
+
+: see if lockf exists
+set lockf d_lockf
+eval $inlibc
+
+: check for long doubles
+echo " "
+echo $n "Checking to see if your system supports long doubles...$c" >&4
+echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+       val="$define"
+       echo " Yup, it does." >&4
+else
+       val="$undef"
+       echo " Nope, it doesn't." >&4
+fi
+$rm try.*
+set d_longdbl
+eval $setvar
+
+: check for length of long double
+case "${d_longdbl}${longdblsize}" in
+$define)
+       echo " "
+       $echo $n "Checking to see how big your long doubles are...$c" >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(long double));
+}
+EOCP
+       set try
+       if eval $compile; then
+               longdblsize=`./try`
+               $echo " $longdblsize bytes." >&4
+       else
+               dflt='8'
+               echo " "
+               echo "(I can't seem to compile the test program.  Guessing...)" >&4
+               rp="What is the size of a long double (in bytes)?"
+               . ./myread
+               longdblsize="$ans"
+       fi
+       ;;
+esac
+$rm -f try.c try
+
+: check for long long
+echo " "
+echo $n "Checking to see if your system supports long long...$c" >&4
+echo 'long long foo() { long long x; x = 7; return x; }' > try.c
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+       val="$define"
+       echo " Yup, it does." >&4
+else
+       val="$undef"
+       echo " Nope, it doesn't." >&4
+fi
+$rm try.*
+set d_longlong
+eval $setvar
 
-: see if lockf exists
-set lockf d_lockf
-eval $inlibc
+: check for length of long long
+case "${d_longlong}${longlongsize}" in
+$define)
+       echo " "
+       $echo $n "Checking to see how big your long longs are...$c" >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(long long));
+}
+EOCP
+       set try
+       if eval $compile_ok; then
+               longlongsize=`./try`
+               $echo " $longlongsize bytes." >&4
+       else
+               dflt='8'
+               echo " "
+               echo "(I can't seem to compile the test program.  Guessing...)"
+               rp="What is the size of a long long (in bytes)?"
+               . ./myread
+               longlongsize="$ans"
+       fi
+       ;;
+esac
+$rm -f try.c try
 
 : see if lstat exists
 set lstat d_lstat
@@ -6715,6 +7364,10 @@ eval $inlibc
 set mkfifo d_mkfifo
 eval $inlibc
 
+: see if mkstemp exists
+set mkstemp d_mkstemp
+eval $inlibc
+
 : see if mktime exists
 set mktime d_mktime
 eval $inlibc
@@ -6774,7 +7427,7 @@ case "$ans" in
 y*|true)
        usemymalloc='y'
        mallocsrc='malloc.c'
-       mallocobj='malloc.o'
+       mallocobj="malloc$_o"
        d_mymalloc="$define"
        case "$libs" in
        *-lmalloc*)
@@ -6853,6 +7506,82 @@ 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$define"; then
+       echo $n "Checking whether pthreads are created joinable. $c" >&4 
+       $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." >&4 ;;
+                       *) echo "Yup, they are." >&4 ;;
+               esac
+       else
+               echo " "
+               echo "(I can't execute the test program--assuming they are.)" >&4
+               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
@@ -6910,6 +7639,14 @@ $define)
        set d_pwcomment
        eval $setvar
 
+       if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwgecos
+       eval $setvar
+
        $rm -f $$.h
        ;;
 *)
@@ -6920,6 +7657,7 @@ $define)
        set d_pwclass; eval $setvar
        set d_pwexpire; eval $setvar
        set d_pwcomment; eval $setvar
+       set d_pwgecos; eval $setvar
        ;;
 esac
 
@@ -6975,15 +7713,14 @@ 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 >>foo.c <<'EOCP'
+       $cat >>try.c <<'EOCP'
 #include <stdio.h>
-
 #ifdef I_MEMORY
 #  include <memory.h>
 #endif
@@ -7006,8 +7743,6 @@ 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.  */
 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
 
 for (align = 7; align >= 0; align--) {
@@ -7025,8 +7760,9 @@ 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_ok; then
+               if ./try 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
                else
@@ -7043,7 +7779,7 @@ EOCP
        fi
        ;;
 esac
-$rm -f foo.* safebcpy core
+$rm -f try.* try core
 set d_safebcpy
 eval $setvar
 
@@ -7053,15 +7789,14 @@ 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 >>foo.c <<'EOCP'
+       $cat >>try.c <<'EOCP'
 #include <stdio.h>
-
 #ifdef I_MEMORY
 #  include <memory.h>
 #endif
@@ -7103,8 +7838,9 @@ 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_ok; then
+               if ./try 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
                else
@@ -7121,7 +7857,7 @@ EOCP
        fi
        ;;
 esac
-$rm -f foo.* safemcpy core
+$rm -f try.* try core
 set d_safemcpy
 eval $setvar
 
@@ -7130,16 +7866,15 @@ val="$undef"
 case "$d_memcmp" in
 "$define")
        echo " "
-       echo "Checking to see if your memcmp() can compare relative magnitude..." >&4
-       $cat >foo.c <<EOCP
+       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 >>foo.c <<'EOCP'
+       $cat >>try.c <<'EOCP'
 #include <stdio.h>
-
 #ifdef I_MEMORY
 #  include <memory.h>
 #endif
@@ -7163,8 +7898,9 @@ if ((a < b) && memcmp(&a, &b, 1) < 0)
 exit(0);
 }
 EOCP
-       if $cc $ccflags $ldflags foo.c -o sanemcmp $libs >/dev/null 2>&1; then
-               if ./sanemcmp 2>/dev/null; then
+       set try
+       if eval $compile_ok; then
+               if ./try 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
                else
@@ -7175,7 +7911,7 @@ EOCP
        fi
        ;;
 esac
-$rm -f foo.* sanemcmp core
+$rm -f try.* try core
 set d_sanemcmp
 eval $setvar
 
@@ -7212,6 +7948,165 @@ fi
 set d_sem
 eval $setvar
 
+: see whether sys/sem.h defines union semun
+echo " "
+$cat > try.c <<'END'
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+int main () { union semun semun; semun.buf = 0; }
+END
+set try
+if eval $compile; then
+    echo "You have union semun in <sys/sem.h>." >&4
+    val="$define"
+else
+    echo "You do not have union semun in <sys/sem.h>." >&4
+    val="$undef"
+fi
+$rm -f try try.c
+set d_union_semun
+eval $setvar
+
+: see how to do semctl IPC_STAT
+case "$d_sem" in
+$define)
+    : see whether semctl IPC_STAT can use union semun
+    echo " "
+    $cat > try.c <<END
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#$d_union_semun HAS_UNION_SEMUN
+int main() {
+    union semun
+#ifndef HAS_UNION_SEMUN
+    {
+       int val;
+       struct semid_ds *buf;
+       unsigned short *array;
+    }
+#endif
+    arg;
+    int sem, st;
+
+#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
+    sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
+    if (sem > -1) {
+       struct semid_ds argbuf;
+       arg.buf = &argbuf;
+#      ifdef IPC_STAT
+       st = semctl(sem, 0, IPC_STAT, arg);
+       if (st == 0)
+           printf("semun\n");
+       else
+#      endif /* IPC_STAT */
+           printf("semctl IPC_STAT failed: errno = %d\n", errno);
+#      ifdef IPC_RMID
+       if (semctl(sem, 0, IPC_RMID, arg) != 0)
+#      endif /* IPC_RMID */
+           printf("semctl IPC_RMID failed: errno = %d\n", errno);
+    } else
+#endif /* IPC_PRIVATE && ... */
+       printf("semget failed: errno = %d\n", errno);
+  return 0;
+}
+END
+    val="$undef"
+    set try
+    if eval $compile; then
+       xxx=`./try`
+        case "$xxx" in
+        semun) val="$define" ;;
+        esac
+    fi
+    $rm -f try try.c
+    set d_semctl_semun
+    eval $setvar
+    case "$d_semctl_semun" in
+    $define)
+        echo "You can use union semun for semctl IPC_STAT." >&4
+       also='also'
+        ;;
+    *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
+       also=''
+        ;;
+    esac
+
+    : see whether semctl IPC_STAT can use struct semid_ds pointer
+    $cat > try.c <<'END'
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+int main() {
+    struct semid_ds arg;
+    int sem, st;
+
+#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
+    sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
+    if (sem > -1) {
+#      ifdef IPC_STAT
+       st = semctl(sem, 0, IPC_STAT, &arg);
+       if (st == 0)
+           printf("semid_ds\n");
+       else
+#      endif /* IPC_STAT */
+           printf("semctl IPC_STAT failed: errno = %d\n", errno);
+#      ifdef IPC_RMID
+       if (semctl(sem, 0, IPC_RMID, &arg) != 0)
+#      endif /* IPC_RMID */
+           printf("semctl IPC_RMID failed: errno = %d\n", errno);
+    } else
+#endif /* IPC_PRIVATE && ... */
+       printf("semget failed: errno = %d\n", errno);
+
+    return 0;
+}
+END
+    val="$undef"
+    set try
+    if eval $compile; then
+        xxx=`./try`
+        case "$xxx" in
+        semid_ds) val="$define" ;;
+        esac
+    fi
+    $rm -f try try.c
+    set d_semctl_semid_ds
+    eval $setvar
+    case "$d_semctl_semid_ds" in
+    $define)
+        echo "You can $also use struct semid_ds * for semctl IPC_STAT." >&4
+        ;;
+    *)  echo "You cannot use struct semid_ds * for semctl IPC_STAT." >&4
+        ;;
+    esac
+    ;;
+*)  val="$undef"
+
+    # We do not have the full sem*(2) library, so assume we can not
+    # use either.
+
+    set d_semctl_semun
+    eval $setvar
+
+    set d_semctl_semid_ds
+    eval $setvar
+    ;;
+esac
+
 : see if setegid exists
 set setegid d_setegid
 eval $inlibc
@@ -7220,6 +8115,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
@@ -7228,6 +8127,14 @@ eval $inlibc
 set setlocale d_setlocale
 eval $inlibc
 
+: see if setnetent exists
+set setnetent d_setnent
+eval $inlibc
+
+: see if setprotoent exists
+set setprotoent d_setpent
+eval $inlibc
+
 : see if setpgid exists
 set setpgid d_setpgid
 eval $inlibc
@@ -7260,10 +8167,18 @@ eval $inlibc
 set setruid d_setruid
 eval $inlibc
 
+: see if setservent exists
+set setservent d_setsent
+eval $inlibc
+
 : see if setsid exists
 set setsid d_setsid
 eval $inlibc
 
+: see if setvbuf exists
+set setvbuf d_setvbuf
+eval $inlibc
+
 : see if sfio.h is available
 set sfio.h i_sfio
 eval $inhdr
@@ -7294,6 +8209,11 @@ $define)
        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
        ;;
@@ -7378,17 +8298,7 @@ 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 > set.c <<'EOP'
-/* Solaris 2.5_x86 with SunWorks Pro C 3.0.1 doesn't have a complete
-   sigaction structure if compiled with cc -Xc.  This compile test
-   will fail then.  <doughera@lafcol.lafayette.edu>
-*/
+       $cat > try.c <<'EOP'
 #include <stdio.h>
 #include <sys/types.h>
 #include <signal.h>
@@ -7397,21 +8307,25 @@ main()
     struct sigaction act, oact;
 }
 EOP
-
-if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
-       :
+       set try
+       if eval $compile_ok; then
+               val="$define"
+       else
+               echo "But you don't seem to have a useable struct sigaction." >&4
+               val="$undef"
+       fi
 else
-       echo "But you don't seem to have a useable struct sigaction." >&4
+       echo 'sigaction NOT found.' >&4
        val="$undef"
 fi
 set d_sigaction; eval $setvar
-$rm -f set set.o set.c
+$rm -f try try$_o try.c
 
 : see if sigsetjmp exists
 echo " "
 case "$d_sigsetjmp" in
 '')
-       $cat >set.c <<'EOP'
+       $cat >try.c <<'EOP'
 #include <setjmp.h>
 sigjmp_buf env;
 int set = 1;
@@ -7424,8 +8338,9 @@ main()
        exit(1);
 }
 EOP
-       if $cc $ccflags $ldflags -o set set.c $libs > /dev/null 2>&1 ; then
-               if ./set >/dev/null 2>&1; then
+       set try
+       if eval $compile; then
+               if ./try >/dev/null 2>&1; then
                        echo "POSIX sigsetjmp found." >&4
                        val="$define"
                else
@@ -7449,7 +8364,7 @@ EOM
 esac
 set d_sigsetjmp
 eval $setvar
-$rm -f set.c set
+$rm -f try.c try
 
 socketlib=''
 sockethdr=''
@@ -7472,10 +8387,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$lib_ext..." >&4
-               if test -f /usr/lib/libnet$lib_ext; then
-                       ( (nm $nm_opt /usr/lib/libnet$lib_ext | eval $nm_extract) ||  \
-                       ar t /usr/lib/libnet$lib_ext) 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"
@@ -7488,7 +8403,7 @@ else
                                        d_oldsock="$define"
                                fi
                        else
-                               echo "or even in libnet$lib_ext, which is peculiar." >&4
+                               echo "or even in libnet$_a, which is peculiar." >&4
                                d_socket="$undef"
                                d_oldsock="$undef"
                        fi
@@ -7582,7 +8497,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"
@@ -7612,48 +8528,6 @@ esac
 set d_stdio_cnt_lval
 eval $setvar
 
-: How to access the stdio _filbuf or __filbuf function.
-: If this fails, check how the getc macro in stdio.h works.
-case "${d_stdio_ptr_lval}${d_stdio_cnt_lval}" in
-${define}${define})
-       : Try $hint value, if any, then _filbuf, __filbuf, _fill, then punt.
-       : _fill is for os/2.
-       xxx='notok'
-       for filbuf in $stdio_filbuf '_filbuf(fp)' '__filbuf(fp) ' '_fill(fp)' ; do
-               $cat >try.c <<EOP
-#include <stdio.h>
-#define FILE_ptr(fp)   $stdio_ptr
-#define FILE_cnt(fp)   $stdio_cnt
-#define FILE_filbuf(fp)        $filbuf
-main() {
-       FILE *fp = fopen("try.c", "r");
-       int c;
-       c = getc(fp);
-       c = FILE_filbuf(fp);  /* Just looking for linker errors.*/
-       exit(0);
-}
-EOP
-               if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 && ./try; then
-                       echo "Your stdio appears to use $filbuf"
-                       stdio_filbuf="$filbuf"
-                       xxx='ok'
-                       break
-               else
-                       echo "Hmm.  $filbuf doesn't seem to work."
-               fi
-               $rm -f try.c try
-       done
-       case "$xxx" in
-       notok)  echo "I can't figure out how to access _filbuf"
-                       echo "I'll just have to work around it."
-                       d_stdio_ptr_lval="$undef"
-                       d_stdio_cnt_lval="$undef"
-                       ;;
-       esac
-       ;;
-esac
-
-
 : see if _base is also standard
 val="$undef"
 case "$d_stdstdio" in
@@ -7673,7 +8547,8 @@ 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 "And its _base field acts std."
                        val="$define"
@@ -7806,6 +8681,9 @@ case "$varval" in
        for inc in $inclist; do
                echo "#include <$inc>" >>temp.c;
        done;
+       echo "#ifdef $type" >> temp.c;
+       echo "printf(\"We have $type\");" >> temp.c;
+       echo "#endif" >> temp.c;
        $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
        if $contains $type temp.E >/dev/null 2>&1; then
                eval "$var=\$type";
@@ -7816,6 +8694,37 @@ case "$varval" in
 *) eval "$var=\$varval";;
 esac'
 
+: define an is-a-typedef? function that prompts if the type is not available.
+typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
+case "$inclist" in
+"") inclist="sys/types.h";;
+esac;
+eval "varval=\$$var";
+case "$varval" in
+"")
+       $rm -f temp.c;
+       for inc in $inclist; do
+               echo "#include <$inc>" >>temp.c;
+       done;
+       echo "#ifdef $type" >> temp.c;
+       echo "printf(\"We have $type\");" >> temp.c;
+       echo "#endif" >> temp.c;
+       $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
+       echo " " ;
+       echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
+       if $contains $type temp.E >/dev/null 2>&1; then
+               echo "$type found." >&4;
+               eval "$var=\$type";
+       else
+               echo "$type NOT found." >&4;
+               dflt="$def";
+               . ./myread ;
+               eval "$var=\$ans";
+       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
@@ -7829,13 +8738,9 @@ if set times val -f d_times; eval $csym; $val; then
        case "$i_systimes" in
        "$define") inc='sys/times.h';;
        esac
+       rp="What is the type returned by times() on this system?"
        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"
+       eval $typedef_ask
 else
        echo 'times() NOT found, hope that will do.' >&4
        d_times="$undef"
@@ -7977,7 +8882,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_ok; then
                if ./closedir > /dev/null 2>&1 ; then
                        echo "Yes, it does."
                        val="$undef"
@@ -8065,11 +8971,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_ok; 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"
@@ -8113,7 +9020,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)
@@ -8154,11 +9062,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
@@ -8176,6 +9084,82 @@ set db.h i_db
 eval $inhdr
 
 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
+
+case "$i_db" in
 define)
        : Check the return type needed for hash 
        echo " "
@@ -8187,6 +9171,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;
@@ -8197,6 +9183,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
@@ -8205,16 +9192,18 @@ 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
+               $cat try.out >&4
+               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 the return type needed for prefix 
@@ -8227,6 +9216,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;
@@ -8237,6 +9228,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
@@ -8245,13 +9237,16 @@ 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.
+               $cat try.out >&4
+               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
 
@@ -8339,7 +9334,6 @@ echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
                fi
        fi
 esac
-: Only prompt user if support does not match the level we want
 case "$voidflags" in
 "$defvoidused") ;;
 *)
@@ -8351,19 +9345,56 @@ case "$voidflags" in
 esac
 $rm -f try.* .out
 
-: see what type file positions are declared as in the library
-set fpos_t fpostype long stdio.h sys/types.h
-eval $typedef
+: check for length of double
 echo " "
-dflt="$fpostype"
+case "$doublesize" in
+'')
+       $echo $n "Checking to see how big your double precision numbers are...$c" >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(double));
+}
+EOCP
+       set try
+       if eval $compile_ok; then
+               doublesize=`./try`
+               $echo " $doublesize bytes." >&4
+       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
 rp="What is the type for file position used by fsetpos()?"
-. ./myread
-fpostype="$ans"
+set fpos_t fpostype long stdio.h sys/types.h
+eval $typedef_ask
+
+: 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
 
 : Store the full pathname to the sed program for use in the C program
 full_sed=$sed
 
 : see what type gids are declared as in the kernel
+echo " "
+echo "Looking for the type for group ids returned by getgid()."
 set gid_t gidtype xxx stdio.h sys/types.h
 eval $typedef
 case "$gidtype" in
@@ -8377,29 +9408,37 @@ xxx)
        ;;
 *) dflt="$gidtype";;
 esac
-echo " "
-rp="What is the type for group ids returned by getgid()?"
-. ./myread
-gidtype="$ans"
+case "$gidtype" in
+gid_t) echo "gid_t found." ;;
+*)     rp="What is the type for group ids returned by getgid()?"
+       . ./myread
+       gidtype="$ans"
+       ;;
+esac
 
 : see if getgroups exists
 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 type of pointer is 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 pointer is the second argument to getgroups() and setgroups()?'
        . ./myread
        groupstype="$ans"
        ;;
@@ -8407,59 +9446,208 @@ EOM
 esac
 
 : see what type lseek is declared as in the kernel
+rp="What is the type used for lseek's offset on this system?"
 set off_t lseektype long stdio.h sys/types.h
-eval $typedef
-echo " "
-dflt="$lseektype"
-rp="What type is lseek's offset on this system declared as?"
-. ./myread
-lseektype="$ans"
+eval $typedef_ask
 
 echo " "
-case "$make" in
-'')
-       make=`./loc make make $pth`
-       case "$make" in
-       /*)     echo make is in $make.  ;;
-       ?:[\\/]*)       echo make is in $make.  ;;
-       *)      echo "I don't know where 'make' is, and my life depends on it." >&4
-               echo "Go find a make program or fix your PATH setting!" >&4
-               exit 1
-               ;;
-       esac
-       ;;
-*)     echo make is in $make. ;;
-esac
-
-$echo $n "Checking if your $make program sets \$(MAKE)... $c" >&4
+echo "Checking if your $make program sets \$(MAKE)..." >&4
 case "$make_set_make" in
 '')
        $sed 's/^X //' > testmake.mak << 'EOF'
 Xall:
-X      @echo 'ac_maketemp="$(MAKE)"'
+X      @echo 'maketemp="$(MAKE)"'
 EOF
-       : GNU make sometimes prints "make[1]: Entering...", which would confuse us.
        case "`$make -f testmake.mak 2>/dev/null`" in
-       *ac_maketemp=*) make_set_make='#' ;;
+       *maketemp=*) make_set_make='#' ;;
        *)      make_set_make="MAKE=$make" ;;
        esac
        $rm -f testmake.mak
        ;;
 esac
 case "$make_set_make" in
-'#')   echo "Yup, it does." >&4 ;;
-*)     echo "Nope, it doesn't." >&4 ;;
+'#') echo "Yup, it does.";;
+*) echo "Nope, it doesn't.";;
 esac
 
 : see what type is used for mode_t
+rp="What is the type used for file modes for system calls (e.g. fchmod())?"
 set mode_t modetype int stdio.h sys/types.h
-eval $typedef
-dflt="$modetype"
-echo " "
-rp="What type is used for file modes?"
-. ./myread
-modetype="$ans"
+eval $typedef_ask
+
+: 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 what type is used for size_t
+rp="What is the type used for the length parameter for string functions?"
+set size_t sizetype 'unsigned int' stdio.h sys/types.h
+eval $typedef_ask
+
+: 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_net_type='long'
+               ;;
+       esac
+fi
 : locate the preferred pager for this system
 case "$pager" in
 '')
@@ -8485,23 +9673,43 @@ rp='What pager is used on your system?'
 . ./getfile
 pager="$ans"
 
-: Cruising for prototypes
+: see what type pids are declared as in the kernel
+rp="What is the type of process ids on this system?"
+set pid_t pidtype int stdio.h sys/types.h
+eval $typedef_ask
+
+: 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 $n "Checking to see how big your pointers are...$c" >&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_ok; then
+               ptrsize=`./try`
+               $echo " $ptrsize bytes." >&4
+       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 " "
@@ -8535,8 +9743,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_ok; then
+               dflt=`./try$_exe`
        else
                dflt='?'
                echo "(I can't seem to compile the test program...)"
@@ -8549,7 +9758,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 " "
@@ -8562,18 +9771,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$lib_ext bar2.o bar1.o >/dev/null 2>&1
-if $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $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$lib_ext >/dev/null 2>&1 &&
-       $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $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='';;
@@ -8643,10 +9852,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 " "
@@ -8714,7 +9922,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
@@ -8731,7 +9940,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
@@ -8753,73 +9963,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>
-#endif
-#ifdef I_SYS_SELECT
-#include <sys/select.h>
-#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
 
@@ -8854,9 +10041,10 @@ xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
 : generate a few handy files for later
-$cat > signal.c <<'EOP'
+$cat > signal.c <<'EOCP'
 #include <sys/types.h>
 #include <signal.h>
+#include <stdio.h>
 int main() {
 
 /* Strange style to avoid deeply-nested #if/#else/#endif */
@@ -8911,7 +10099,10 @@ int main() {
 
 printf("NSIG %d\n", NSIG);
 
-EOP
+#ifndef JUST_NSIG
+
+EOCP
+
 echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
 {
        printf "#ifdef SIG"; printf $1; printf "\n"
@@ -8920,6 +10111,7 @@ echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
        printf "#endif\n"
 }
 END {
+       printf "#endif /* JUST_NSIG */\n";
        printf "}\n";
 }
 ' >>signal.c
@@ -8956,42 +10148,87 @@ END {
 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 $test -s signal.lst; then
+    echo "Using your existing signal.lst file"
+       exit 0
+fi
+xxx="$xxx"
+EOS
+$cat >>signal_cmd <<'EOS'
+
+set signal
+if eval $compile_ok; then
+       ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
+else
+       echo "(I can't seem be able to compile the whole test program)" >&4
+       echo "(I'll try it in little pieces.)" >&4
+       set signal -DJUST_NSIG
+       if eval $compile_ok; then
+               ./signal$_exe > signal.nsg
+               $cat signal.nsg
+       else
+               echo "I can't seem to figure out how many signals you have." >&4
+               echo "Guessing 50." >&4
+               echo 'NSIG 50' > signal.nsg
+       fi
+       : Now look at all the signal names, one at a time.
+       for xx in `echo $xxx | $tr ' ' '\012' | $sort | $uniq`; do
+               $cat > signal.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+int main() {
+printf("$xx %d\n", SIG${xx});
+return 0;
+}
+EOCP
+               set signal
+               if eval $compile; then
+                       echo "SIG${xx} found."
+                       ./signal$_exe  >> signal.ls1
+               else
+                       echo "SIG${xx} NOT found."
+               fi
+       done
+       if $test -s signal.ls1; then
+               $cat signal.nsg signal.ls1 |
+                       $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
+       fi
+
+fi
+if $test -s signal.lst; then
+       :
 else
-       echo "(I can't seem be able to compile the test program -- Guessing)"
+       echo "(AAK! I can't compile the test programs -- Guessing)" >&4
        echo 'kill -l' >signal
-       set X \`csh -f <signal\`
+       set X `csh -f <signal`
        $rm -f signal
        shift
-       case \$# in
+       case $# in
        0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
        esac
-       echo \$@ | $tr ' ' '\012' | \
+       echo $@ | $tr ' ' '\012' | \
                $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
 fi
-$rm -f signal.c signal signal.o
+$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
 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
+       . ./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:"
@@ -9012,15 +10249,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
@@ -9038,28 +10266,29 @@ main()
                printf("int\n");
        else 
                printf("long\n");
-       fflush(stdout);
        exit(0);
 }
 EOM
 echo " "
-if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1  &&
-               ./ssize > /dev/null 2>&1 ; then
+set ssize
+if eval $compile_ok && ./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 and run 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 " "
@@ -9076,13 +10305,9 @@ echo " "
 if set time val -f d_time; eval $csym; $val; then
        echo 'time() found.' >&4
        val="$define"
+       rp="What is the type returned by time() on this system?"
        set time_t timetype long stdio.h sys/types.h
-       eval $typedef
-       dflt="$timetype"
-       echo " "
-       rp="What type is returned by time() on this system?"
-       . ./myread
-       timetype="$ans"
+       eval $typedef_ask
 else
        echo 'time() not found, hope that will do.' >&4
        val="$undef"
@@ -9092,6 +10317,8 @@ set d_time
 eval $setvar
 
 : see what type uids are declared as in the kernel
+echo " "
+echo "Looking for the type for user ids returned by getuid()."
 set uid_t uidtype xxx stdio.h sys/types.h
 eval $typedef
 case "$uidtype" in
@@ -9105,10 +10332,13 @@ xxx)
        ;;
 *) dflt="$uidtype";;
 esac
-echo " "
-rp="What is the type for user ids returned by getuid()?"
-. ./myread
-uidtype="$ans"
+case "$uidtype" in
+uid_t) echo "uid_t found." ;;
+*)     rp="What is the type for user ids returned by getuid()?"
+       . ./myread
+       uidtype="$ans"
+       ;;
+esac
 
 : see if dbm.h is available
 : see if dbmclose exists
@@ -9470,7 +10700,7 @@ if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
 else
        echo "false"
 fi
-$rm -f varargs.o
+$rm -f varargs$_o
 EOP
 chmod +x varargs
 
@@ -9604,7 +10834,8 @@ eval $setvar
 
 echo " "
 echo "Looking for extensions..." >&4
-cd ../ext
+tdir=`pwd`
+cd $rsrc/ext
 : If we are using the old config.sh, known_extensions may contain
 : old or inaccurate or duplicate values.
 known_extensions=''
@@ -9613,63 +10844,76 @@ known_extensions=''
 : some additional extensions into the source tree and expect them
 : to be built.
 for xxx 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
-               cd ..
-           fi
-       fi ;;
-    esac
+       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
+                               cd ..
+                       fi
+               fi 
+               ;;
+       esac
 done
 set X $known_extensions
 shift
 known_extensions="$*"
-cd ../UU
+cd $tdir
 
 : 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
-           ;;
-    Opcode) case "$useopcode" 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
@@ -9683,11 +10927,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;;
@@ -9731,13 +10992,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
@@ -9797,7 +11074,9 @@ case "$d_portable" in
        echo " "
        echo "Stripping down executable paths..." >&4
        for file in $loclist $trylist; do
-               eval $file="\$file"
+               if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
+                       eval $file="\$file"
+               fi
        done
        ;;
 esac
@@ -9814,9 +11093,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'
@@ -9829,8 +11110,12 @@ RCSfile='$RCSfile'
 Revision='$Revision'
 Source='$Source'
 State='$State'
+_a='$_a'
+_exe='$_exe'
+_o='$_o'
 afs='$afs'
 alignbytes='$alignbytes'
+ansi2knr='$ansi2knr'
 aphostname='$aphostname'
 ar='$ar'
 archlib='$archlib'
@@ -9841,7 +11126,6 @@ awk='$awk'
 baserev='$baserev'
 bash='$bash'
 bin='$bin'
-bincompat3='$bincompat3'
 binexp='$binexp'
 bison='$bison'
 byacc='$byacc'
@@ -9881,10 +11165,8 @@ 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_bsdgetpgrp='$d_bsdgetpgrp'
-d_bsdpgrp='$d_bsdpgrp'
 d_bsdsetpgrp='$d_bsdsetpgrp'
 d_bzero='$d_bzero'
 d_casti32='$d_casti32'
@@ -9906,6 +11188,10 @@ d_dlopen='$d_dlopen'
 d_dlsymun='$d_dlsymun'
 d_dosuid='$d_dosuid'
 d_dup2='$d_dup2'
+d_endhent='$d_endhent'
+d_endnent='$d_endnent'
+d_endpent='$d_endpent'
+d_endsent='$d_endsent'
 d_eofnblk='$d_eofnblk'
 d_eunice='$d_eunice'
 d_fchmod='$d_fchmod'
@@ -9922,14 +11208,29 @@ 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_gethostprotos='$d_gethostprotos'
 d_getlogin='$d_getlogin'
+d_getnbyaddr='$d_getnbyaddr'
+d_getnbyname='$d_getnbyname'
+d_getnent='$d_getnent'
+d_getnetprotos='$d_getnetprotos'
+d_getpbyname='$d_getpbyname'
+d_getpbynumber='$d_getpbynumber'
+d_getpent='$d_getpent'
 d_getpgid='$d_getpgid'
 d_getpgrp2='$d_getpgrp2'
 d_getpgrp='$d_getpgrp'
 d_getppid='$d_getppid'
 d_getprior='$d_getprior'
+d_getprotoprotos='$d_getprotoprotos'
+d_getsbyname='$d_getsbyname'
+d_getsbyport='$d_getsbyport'
+d_getsent='$d_getsent'
+d_getservprotos='$d_getservprotos'
 d_gettimeod='$d_gettimeod'
 d_gnulibc='$d_gnulibc'
 d_htonl='$d_htonl'
@@ -9937,9 +11238,12 @@ d_index='$d_index'
 d_inetaton='$d_inetaton'
 d_isascii='$d_isascii'
 d_killpg='$d_killpg'
+d_lchown='$d_lchown'
 d_link='$d_link'
 d_locconv='$d_locconv'
 d_lockf='$d_lockf'
+d_longdbl='$d_longdbl'
+d_longlong='$d_longlong'
 d_lstat='$d_lstat'
 d_mblen='$d_mblen'
 d_mbstowcs='$d_mbstowcs'
@@ -9950,6 +11254,7 @@ d_memmove='$d_memmove'
 d_memset='$d_memset'
 d_mkdir='$d_mkdir'
 d_mkfifo='$d_mkfifo'
+d_mkstemp='$d_mkstemp'
 d_mktime='$d_mktime'
 d_msg='$d_msg'
 d_msgctl='$d_msgctl'
@@ -9958,7 +11263,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'
@@ -9967,11 +11272,14 @@ 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'
 d_pwcomment='$d_pwcomment'
 d_pwexpire='$d_pwexpire'
+d_pwgecos='$d_pwgecos'
 d_pwquota='$d_pwquota'
 d_readdir='$d_readdir'
 d_readlink='$d_readlink'
@@ -9981,16 +11289,23 @@ 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'
 d_semctl='$d_semctl'
+d_semctl_semid_ds='$d_semctl_semid_ds'
+d_semctl_semun='$d_semctl_semun'
 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_setnent='$d_setnent'
+d_setpent='$d_setpent'
 d_setpgid='$d_setpgid'
 d_setpgrp2='$d_setpgrp2'
 d_setpgrp='$d_setpgrp'
@@ -10001,7 +11316,9 @@ d_setresuid='$d_setresuid'
 d_setreuid='$d_setreuid'
 d_setrgid='$d_setrgid'
 d_setruid='$d_setruid'
+d_setsent='$d_setsent'
 d_setsid='$d_setsid'
+d_setvbuf='$d_setvbuf'
 d_sfio='$d_sfio'
 d_shm='$d_shm'
 d_shmat='$d_shmat'
@@ -10043,6 +11360,7 @@ d_truncate='$d_truncate'
 d_tzname='$d_tzname'
 d_umask='$d_umask'
 d_uname='$d_uname'
+d_union_semun='$d_union_semun'
 d_vfork='$d_vfork'
 d_void_closedir='$d_void_closedir'
 d_voidsig='$d_voidsig'
@@ -10061,6 +11379,7 @@ defvoidused='$defvoidused'
 direntrytype='$direntrytype'
 dlext='$dlext'
 dlsrc='$dlsrc'
+doublesize='$doublesize'
 dynamic_ext='$dynamic_ext'
 eagain='$eagain'
 echo='$echo'
@@ -10077,7 +11396,6 @@ fpostype='$fpostype'
 freetype='$freetype'
 full_csh='$full_csh'
 full_sed='$full_sed'
-gcc='$gcc'
 gccversion='$gccversion'
 gidtype='$gidtype'
 glibpth='$glibpth'
@@ -10106,6 +11424,7 @@ 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'
@@ -10173,6 +11492,9 @@ ln='$ln'
 lns='$lns'
 locincpth='$locincpth'
 loclibpth='$loclibpth'
+longdblsize='$longdblsize'
+longlongsize='$longlongsize'
+longsize='$longsize'
 lp='$lp'
 lpr='$lpr'
 ls='$ls'
@@ -10203,13 +11525,16 @@ 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'
@@ -10224,6 +11549,7 @@ perladmin='$perladmin'
 perlpath='$perlpath'
 pg='$pg'
 phostname='$phostname'
+pidtype='$pidtype'
 plibpth='$plibpth'
 pmake='$pmake'
 pr='$pr'
@@ -10232,6 +11558,7 @@ prefixexp='$prefixexp'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
+ptrsize='$ptrsize'
 randbits='$randbits'
 ranlib='$ranlib'
 rd_nodata='$rd_nodata'
@@ -10247,9 +11574,11 @@ sh='$sh'
 shar='$shar'
 sharpbang='$sharpbang'
 shmattype='$shmattype'
+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'
@@ -10267,6 +11596,7 @@ sort='$sort'
 spackage='$spackage'
 spitshell='$spitshell'
 split='$split'
+src='$src'
 ssizetype='$ssizetype'
 startperl='$startperl'
 startsh='$startsh'
@@ -10284,6 +11614,7 @@ sysman='$sysman'
 tail='$tail'
 tar='$tar'
 tbl='$tbl'
+tee='$tee'
 test='$test'
 timeincl='$timeincl'
 timetype='$timetype'
@@ -10301,6 +11632,7 @@ useperlio='$useperlio'
 useposix='$useposix'
 usesfio='$usesfio'
 useshrplib='$useshrplib'
+usethreads='$usethreads'
 usevfork='$usevfork'
 usrinc='$usrinc'
 uuname='$uuname'
@@ -10312,8 +11644,8 @@ 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
@@ -10407,6 +11739,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