This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Mumble about _yields() only when threaded.
[perl5.git] / Configure
index 8dd8d9a..1452c03 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,8 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Tue Jun  9 14:56:54 EDT 1998 [metaconfig 3.0 PL70]
+# Generated on Tue Oct 20 11:18:44 EET DST 1998 [metaconfig 3.0 PL70]
+# (with additional metaconfig patches by jhi@iki.fi)
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -138,16 +139,25 @@ true)
        ;;
 esac
 
+: if needed set CDPATH to a harmless value that is not chatty
+: avoid bash 2.02 problems with empty CDPATH.
+case "$CDPATH" in
+'')    ;;
+*)     case "$SHELL" in
+       *bash*) CDPATH='.' ;;
+       *)              CDPATH='' ;;
+       esac
+       ;;
+esac
 : Configure runs within the UU subdirectory
 test -d UU || mkdir UU
-CDPATH='.'
 cd UU && rm -f ./*
 
 dynamic_ext=''
 extensions=''
 known_extensions=''
-static_ext=''
 nonxs_ext=''
+static_ext=''
 useopcode=''
 useposix=''
 d_bsd=''
@@ -280,6 +290,7 @@ cppminus=''
 cpprun=''
 cppstdin=''
 d_access=''
+d_accessx=''
 d_alarm=''
 d_attribut=''
 d_bcmp=''
@@ -306,10 +317,14 @@ d_dlopen=''
 d_dlsymun=''
 d_dosuid=''
 d_suidsafe=''
+d_drand48proto=''
 d_dup2=''
+d_eaccess=''
+d_endgrent=''
 d_endhent=''
 d_endnent=''
 d_endpent=''
+d_endpwent=''
 d_endsent=''
 d_fchmod=''
 d_fchown=''
@@ -321,10 +336,13 @@ d_fgetpos=''
 d_flexfnam=''
 d_flock=''
 d_fork=''
+d_fseeko=''
 d_fsetpos=''
+d_ftello=''
 d_ftime=''
 d_gettimeod=''
 d_Gconvert=''
+d_getgrent=''
 d_getgrps=''
 d_gethbyaddr=''
 d_gethbyname=''
@@ -349,6 +367,7 @@ d_getprior=''
 d_getpbyname=''
 d_getpbynumber=''
 d_getprotoprotos=''
+d_getpwent=''
 d_getsent=''
 d_getservprotos=''
 d_getsbyname=''
@@ -392,6 +411,7 @@ d_poll=''
 d_portable=''
 d_pthread_yield=''
 d_sched_yield=''
+sched_yield=''
 d_pthreads_created_joinable=''
 d_readdir=''
 d_rewinddir=''
@@ -410,6 +430,7 @@ d_semget=''
 d_semop=''
 d_setegid=''
 d_seteuid=''
+d_setgrent=''
 d_setgrps=''
 d_sethent=''
 d_setlinebuf=''
@@ -421,6 +442,7 @@ d_setpgrp2=''
 d_bsdsetpgrp=''
 d_setpgrp=''
 d_setprior=''
+d_setpwent=''
 d_setregid=''
 d_setresgid=''
 d_setresuid=''
@@ -495,6 +517,13 @@ d_wait4=''
 d_waitpid=''
 d_wcstombs=''
 d_wctomb=''
+d_dbmclose64=''
+d_dbminit64=''
+d_delete64=''
+d_fetch64=''
+d_firstkey64=''
+d_nextkey64=''
+d_store64=''
 dlext=''
 cccdlflags=''
 ccdlflags=''
@@ -503,11 +532,13 @@ ld=''
 lddlflags=''
 usedl=''
 doublesize=''
+ebcdic=''
 fpostype=''
 gidtype=''
 groupstype=''
 h_fcntl=''
 h_sysfile=''
+i_arpainet=''
 db_hashtype=''
 db_prefixtype=''
 i_db=''
@@ -521,7 +552,10 @@ i_dlfcn=''
 i_fcntl=''
 i_float=''
 i_gdbm=''
+d_grpasswd=''
 i_grp=''
+d_int64t=''
+i_inttypes=''
 i_limits=''
 i_locale=''
 i_malloc=''
@@ -538,6 +572,7 @@ d_pwclass=''
 d_pwcomment=''
 d_pwexpire=''
 d_pwgecos=''
+d_pwpasswd=''
 d_pwquota=''
 i_pwd=''
 i_sfio=''
@@ -545,6 +580,7 @@ i_stddef=''
 i_stdlib=''
 i_string=''
 strings=''
+i_sysaccess=''
 i_sysdir=''
 i_sysfile=''
 d_voidtty=''
@@ -555,6 +591,7 @@ i_syssockio=''
 i_sysndir=''
 i_sysparam=''
 i_sysresrc=''
+i_syssecrt=''
 i_sysselct=''
 i_sysstat=''
 i_systimes=''
@@ -578,6 +615,22 @@ i_vfork=''
 intsize=''
 longsize=''
 shortsize=''
+d_dirent64s=''
+d_flock64s=''
+d_fstat64=''
+d_ftruncate64=''
+d_ino64t=''
+d_lockf64=''
+d_lseek64=''
+d_lstat64=''
+d_off64t=''
+d_open64=''
+d_opendir64=''
+d_readdir64=''
+d_seekdir64=''
+d_stat64=''
+d_telldir64=''
+d_truncate64=''
 libc=''
 libperl=''
 shrpenv=''
@@ -587,8 +640,10 @@ libpth=''
 loclibpth=''
 plibpth=''
 xlibpth=''
+ignore_versioned_solibs=''
 libs=''
 lns=''
+lseeksize=''
 lseektype=''
 make_set_make=''
 d_mymalloc=''
@@ -633,8 +688,10 @@ ranlib=''
 package=''
 spackage=''
 pager=''
+apiversion=''
 patchlevel=''
 subversion=''
+version=''
 perladmin=''
 perlpath=''
 pidtype=''
@@ -644,11 +701,17 @@ installprivlib=''
 privlib=''
 privlibexp=''
 prototype=''
+pthread_setdetachstate_pointer=''
 ptrsize=''
+drand01=''
 randbits=''
+randfunc=''
+randseedtype=''
+seedfunc=''
 installscript=''
 scriptdir=''
 scriptdirexp=''
+selectminbits=''
 selecttype=''
 sh=''
 sig_name=''
@@ -670,8 +733,21 @@ ssizetype=''
 startperl=''
 startsh=''
 stdchar=''
+d_fgetpos64=''
+d_fopen64=''
+d_freopen64=''
+d_fseek64=''
+d_fseeko64=''
+d_fsetpos64=''
+d_ftell64=''
+d_ftello64=''
+d_tmpfile64=''
 sysman=''
+trnl=''
 uidtype=''
+archname64=''
+use64bits=''
+usemultiplicity=''
 nm_opt=''
 nm_so_opt=''
 runnm=''
@@ -701,6 +777,33 @@ if test -f /etc/unixtovms.exe; then
        eunicefix=/etc/unixtovms.exe
 fi
 
+i_whoami=''
+: change the next line if compiling for Xenix/286 on Xenix/386
+xlibpth='/usr/lib/386 /lib/386'
+
+: Possible local library directories to search.
+loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
+loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
+
+: general looking path for locating libraries
+glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
+glibpth="$glibpth /lib /usr/lib $xlibpth"
+glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
+glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
+
+: Private path used by Configure to find libraries.  Its value
+: is prepended to libpth. This variable takes care of special
+: machines, like the mips.  Usually, it should be empty.
+plibpth=''
+
+: 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=''
+
 : list of known cpp symbols, sorted alphabetically
 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
@@ -712,8 +815,8 @@ al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
 al="$al VMS Xenix286"
-al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
-al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
+al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
+al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
@@ -766,47 +869,22 @@ 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"
 
-i_whoami=''
-: change the next line if compiling for Xenix/286 on Xenix/386
-xlibpth='/usr/lib/386 /lib/386'
-
-: Possible local library directories to search.
-loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
-loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
-
-: general looking path for locating libraries
-glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
-glibpth="$glibpth /lib /usr/lib $xlibpth"
-glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
-glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
-
-: Private path used by Configure to find libraries.  Its value
-: is prepended to libpth. This variable takes care of special
-: machines, like the mips.  Usually, it should be empty.
-plibpth=''
-
-: default library list
-libswanted=''
-: full support for void wanted by default
-defvoidused=15
-
-: Possible local include directories to search.
-: Set locincpth to "" in a hint file to defeat local include searches.
-locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
-locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
-:
-: no include file wanted by default
-inclwanted=''
-
 : Trailing extension.  Override this in a hint file, if needed.
 _exe=''
 : Extra object files, if any, needed on this platform.
 archobjs=''
 groupstype=''
+: default library list
+libswanted=''
+ignore_versioned_solibs=''
+: full support for void wanted by default
+defvoidused=15
+
 : 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 usemultiplicity on the Configure command line to enable multiplicity.
 : set usethreads on the Configure command line to enable threads.
 : List of libraries we want.
 : If anyone needs -lnet, put it in a hint file.
@@ -855,7 +933,7 @@ case "$sh" in
 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
 
 Usually it's in /bin/sh.  How did you even get this far?
-Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and 
+Please contact me (Jarkko Hietaniemi) at jhi@iki.fi and 
 we'll try to straighten this all out.
 EOM
        exit 1
@@ -1191,7 +1269,7 @@ 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'`
+       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)`
@@ -1324,7 +1402,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 (doughera@lafcol.lafayette.edu).
+and contact the author (jhi@iki.fi).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -1347,6 +1425,30 @@ else
 fi
 rm -f missing x??
 
+echo " "
+: Find the appropriate value for a newline for tr
+if test -n "$DJGPP"; then
+       trnl='\012'
+fi
+if test X"$trnl" = X; then
+       case "`echo foo|tr '\n' x 2>/dev/null`" in
+       foox) trnl='\n' ;;
+       esac
+fi
+if test X"$trnl" = X; then
+       case "`echo foo|tr '\012' x 2>/dev/null`" in
+       foox) trnl='\012' ;;
+       esac
+fi
+if test X"$trnl" = X; then
+       cat <<EOM >&2
+
+$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
+
+EOM
+       exit 1
+fi
+
 : compute the number of columns on the terminal for proper question formatting
 case "$COLUMNS" in
 '') COLUMNS='80';;
@@ -1430,7 +1532,7 @@ while expr "X\$ans" : "X!" >/dev/null; do
                y)
                        echo "*** Substitution done -- please confirm."
                        xxxm="\$ans"
-                       ans=\`echo $n "\$ans$c" | tr '\012' ' '\`
+                       ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
                        xxxm="\$ans"
                        ans=!
                        ;;
@@ -1525,7 +1627,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 (doughera@lafcol.lafayette.edu) know how I blew it.
+have, let me (jhi@iki.fi) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1597,7 +1699,6 @@ comm
 cp
 echo
 expr
-find
 grep
 ls
 make
@@ -1619,14 +1720,11 @@ date
 egrep
 gzip
 less
-line
 ln
 more
 nm
 nroff
-perl
 pg
-sendmail
 tee
 test
 uname
@@ -1765,17 +1863,59 @@ $rm -f blurfl sym
 
 : see whether [:lower:] and [:upper:] are supported character classes
 echo " "
-up='[A-Z]'
-low='[a-z]'
 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
 ABYZ)
        echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
        up='[:upper:]'
        low='[:lower:]'
        ;;
+*)     # There is a discontinuity in EBCDIC between 'I' and 'J'
+        # (0xc9 and 0xd1), therefore that is a nice testing point.
+        if test "X$up" = X -o "X$low" = X; then
+           case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
+           ij) up='[A-Z]'
+               low='[a-z]'
+               ;;
+           esac
+        fi
+       if test "X$up" = X -o "X$low" = X; then
+           case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
+           ij) up='A-Z'
+               low='a-z'
+               ;;
+           esac
+        fi
+       if test "X$up" = X -o "X$low" = X; then
+           case "`echo IJ | od -x 2>/dev/null`" in
+           *C9D1*|*c9d1*)
+               echo "Hey, this might be EBCDIC." >&4
+               if test "X$up" = X -o "X$low" = X; then
+                   case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+                   ij) up='[A-IJ-RS-Z]'
+                       low='[a-ij-rs-z]'
+                       ;;
+                   esac
+               fi
+               if test "X$up" = X -o "X$low" = X; then
+                   case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+                   ij) up='A-IJ-RS-Z'
+                       low='a-ij-rs-z'
+                       ;;
+                   esac
+               fi
+               ;;
+           esac
+       fi
+esac
+case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
+ij)
+    echo "Using $up and $low to convert case." >&4
+    ;;
 *)
-       echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
-       ;;
+    echo "I don't know how to translate letters from upper to lower case." >&4
+    echo "Your tr is not acting any way I know of." >&4
+    exit 1
+    ;;
 esac
 : set up the translation script tr, must be called with ./tr of course
 cat >tr <<EOSC
@@ -1793,8 +1933,10 @@ $eunicefix tr
 case "$config_sh" in
 '')
 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
+# tr '[A-Z]' '[a-z]' would not work in EBCDIC
+# because the A-Z/a-z are not consecutive.
 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
-       ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
+       ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
 newmyuname="$myuname"
 dflt=n
 case "$knowitall" in
@@ -1848,7 +1990,7 @@ EOM
        (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 doughera@lafcol.lafayette.edu
+       : tests or hints, please send them to jhi@iki.fi
        : The metaconfig authors would also appreciate a copy...
        $test -f /irix && osname=irix
        $test -f /xenix && osname=sco_xenix
@@ -1863,7 +2005,7 @@ EOM
        $test -d /usr/apollo/bin && osname=apollo
        $test -f /etc/saf/_sactab && osname=svr4
        $test -d /usr/include/minix && osname=minix
-       if $test -d /MachTen; then
+       if $test -d /MachTen -o -d /MachTen_Folder; then
                osname=machten
                if $test -x /sbin/version; then
                        osvers=`/sbin/version | $awk '{print $2}' |
@@ -1875,6 +2017,12 @@ EOM
                        osvers="$2.$3"
                fi
        fi
+       $test -f /sys/posix.dll &&
+              $test -f /usr/bin/what &&
+              set X `/usr/bin/what /sys/posix.dll` &&
+              $test "$3" = UWIN &&
+              osname=uwin &&
+              osvers="$5"
        if $test -f $uname; then
                set X $myuname
                shift
@@ -1938,14 +2086,7 @@ EOM
                        osvers="$3" ;;
                genix) osname=genix ;;
                hp*) osname=hpux 
-                       case "$3" in
-                       *.08.*) osvers=9 ;;
-                       *.09.*) osvers=9 ;;
-                       *.10.*) osvers=10 ;;
-                       *.11.*) osvers=11 ;;
-                       *.12.*) osvers=12 ;;
-                       *)      osvers="$3" ;;
-                       esac
+                       osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
                        ;;
                irix*) osname=irix
                        case "$3" in
@@ -1959,7 +2100,9 @@ EOM
                        *)      osvers="$3" ;;
                        esac
                        ;;
-               netbsd*) osname=netbsd 
+               MiNT) osname=mint
+                       ;;
+               netbsd*) osname=netbsd
                        osvers="$3"
                        ;;
                news-os) osvers="$3"
@@ -1971,6 +2114,9 @@ EOM
                bsd386) osname=bsd386
                        osvers=`$uname -r`
                        ;;
+                POSIX-BC | posix-bc ) osname=posix-bc
+                        osvers="$3"
+                        ;;
                powerux | power_ux | powermax_os | powermaxos | \
                powerunix | power_unix) osname=powerux
                        osvers="$3"
@@ -2326,6 +2472,54 @@ esac
 set d_oldpthreads
 eval $setvar
 
+cat <<EOM
+
+Perl can be built so that multiple Perl interpreters can coexist
+within the same Perl executable.  To do so, Configure must be run with
+-Dusemultiplicity.
+
+Normally you do not need this and you should answer no.
+
+EOM
+case "$usemultiplicity" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Build Perl for multiplicity?'
+. ./myread
+case "$ans" in
+y|Y)   val="$define" ;;     
+*)      val="$undef" ;;
+esac
+set usemultiplicity
+eval $setvar 
+
+cat <<EOM
+
+Perl can be built to take advantage of explicit 64-bit interfaces,
+on some systems.  To do so, Configure must be run with -Duse64bits.
+
+If this doesn't make any sense to you, just accept the default 'n'.
+EOM
+case "$use64bits" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Try to use explicit 64-bit interfaces, if available?'
+. ./myread
+case "$ans" in
+y|Y) 
+       val="$define"
+       ;;     
+*)      
+       val="$undef"
+       ;;
+esac
+set use64bits
+eval $setvar
+
+archname64=''
+
 : determine the architecture name
 echo " "
 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
@@ -2348,26 +2542,56 @@ case "$myarchname" in
        archname=''
        ;;
 esac
+myarchname="$tarch"
 case "$archname" in
 '') dflt="$tarch";;
 *) dflt="$archname";;
 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" ;;
+$define)
+       echo "Threads selected." >&4
+       case "$archname" in
+        *-thread*) echo "...and architecture name already has -thread." >&4
+                ;;
+        *)      archname="$archname-thread"
+                echo "...setting architecture name to $archname." >&4
+                ;;
+        esac
+       ;;
 esac
-myarchname="$tarch"
+case "$usemultiplicity" in
+$define)
+       echo "Multiplicity selected." >&4
+       case "$archname" in
+        *-multi*) echo "...and architecture name already has -multi." >&4
+                ;;
+        *)      archname="$archname-multi"
+                echo "...setting architecture name to $archname." >&4
+                ;;
+        esac
+       ;;
+esac
+case "$use64bits" in
+$define)
+       echo "Explicit 64-bitness selected." >&4
+       case "$archname64" in
+       '')
+               ;;
+       *)
+               case "$archname" in
+               *-$archname64*) echo "...and architecture name already has $archname64." >&4
+                       ;;
+               *)      archname="$archname-$archname64"
+                       echo "...setting architecture name to $archname." >&4
+                       ;;
+               esac
+               ;;
+       esac
+esac
+
 : is AFS running?
 echo " "
 case "$afs" in
@@ -2449,7 +2673,7 @@ orig_dflt="$dflt"
 
 case "$fn" in
 *\(*)
-       expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
+       expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
        fn=`echo $fn | sed 's/(.*)//'`
        ;;
 esac
@@ -2702,12 +2926,53 @@ prefixit='case "$3" in
        esac;;
 esac'
 
+: set the base revision
+baserev=5.0
+
+: get the patchlevel
+echo " "
+echo "Getting the current patchlevel..." >&4
+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
+fi
+$echo $n "(You have $package" $c
+case "$package" in
+"*$baserev")   ;;
+*)             $echo $n " $baserev" $c ;;
+esac
+$echo $n " patchlevel $patchlevel" $c
+test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
+echo ".)"
+
+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
+: Figure out perl API version.  Perhaps this should be in patchlevel.h
+if test "$subversion" -lt 50; then
+       apiversion=`LC_ALL=C; export LC_ALL; \
+                echo $baserev $patchlevel | \
+                $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
+else
+       apiversion="$version"
+fi
+
 : determine where private library files go
-: Usual default is /usr/local/lib/perl5.  Also allow things like 
-: /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
+: Usual default is /usr/local/lib/perl5/$version.
+: Also allow things like /opt/perl/lib/$version, since 
+: /opt/perl/lib/perl5... would be redundant.
 case "$prefix" in
-*perl*) set dflt privlib lib ;;
-*)      set dflt privlib lib/$package ;;
+*perl*) set dflt privlib lib/$version ;;
+*)      set dflt privlib lib/$package/$version ;;
 esac
 eval $prefixit
 $cat <<EOM
@@ -2744,28 +3009,6 @@ else
        installprivlib="$privlibexp"
 fi
 
-: set the base revision
-baserev=5.0
-
-: get the patchlevel
-echo " "
-echo "Getting the current patchlevel..." >&4
-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
-fi
-$echo $n "(You have $package" $c
-case "$package" in
-"*$baserev")   ;;
-*)             $echo $n " $baserev" $c ;;
-esac
-$echo $n " patchlevel $patchlevel" $c
-test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
-echo ".)"
-
 : set the prefixup variable, to restore leading tilda escape
 prefixup='case "$prefixexp" in
 "$prefix") ;;
@@ -2775,28 +3018,15 @@ esac'
 : determine where public architecture dependent libraries go
 set archlib archlib
 eval $prefixit
+: privlib default is /usr/local/lib/$package/$version
+: archlib default is /usr/local/lib/$package/$version/$archname
+: privlib may have an optional trailing /share.
+tdflt=`echo $privlib | $sed 's,/share$,,'`
+tdflt=$tdflt/$archname
 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=`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=$tdflt
        ;;
-    esac
-    ;;
-*)
-    dflt="$archlib"
+*)     dflt="$archlib"
     ;;
 esac
 cat <<EOM
@@ -3348,7 +3578,11 @@ cat <<'EOT' >testcpp.c
 ABC.XYZ
 EOT
 cd ..
-echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+if test ! -f cppstdin; then
+       echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+else
+       echo "Keeping your $hint cppstdin wrapper."
+fi
 chmod 755 cppstdin
 wrapper=`pwd`/cppstdin
 ok='false'
@@ -3599,7 +3833,8 @@ case "$libswanted" in
 esac
 for thislib in $libswanted; do
        
-       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
+               $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
                echo "Found -l$thislib (shared)."
                case " $dflt " in
                *"-l$thislib "*);;
@@ -3886,10 +4121,21 @@ rmlist="$rmlist pdp11"
 : coherency check
 echo " "
 echo "Checking your choice of C compiler and flags for coherency..." >&4
-set X $cc $optimize $ccflags $ldflags -o try try.c $libs
+$cat > try.c <<'EOF'
+#include <stdio.h>
+main() { printf("Ok\n"); exit(0); }
+EOF
+set X $cc $optimize $ccflags -o try $ldflags try.c $libs
 shift
-$cat >try.msg <<EOM
-I've tried to compile and run a simple program with:
+$cat >try.msg <<'EOM'
+I've tried to compile and run the following simple program:
+
+EOM
+$cat try.c
+
+$cat >> try.msg <<EOM
+
+I used the command:
 
        $*
        ./try
@@ -3897,12 +4143,8 @@ I've tried to compile and run a simple program with:
 and I got the following output:
 
 EOM
-$cat > try.c <<'EOF'
-#include <stdio.h>
-main() { printf("Ok\n"); exit(0); }
-EOF
 dflt=y
-if sh -c "$cc $optimize $ccflags $ldflags -o try try.c $libs" >>try.msg 2>&1; then
+if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
        if sh -c './try' >>try.msg 2>&1; then
                xxx=`./try`
                case "$xxx" in
@@ -3937,7 +4179,7 @@ y)
        $cat try.msg >&4
        case "$knowitall" in
        '')
-               echo "(The supplied flags might be incorrect with this C compiler.)"
+               echo "(The supplied flags or libraries might be incorrect.)"
                ;;
        *) dflt=n;;
        esac
@@ -3954,40 +4196,214 @@ n) echo "OK, that should do.";;
 esac
 $rm -f try try.* core
 
-: Cruising for prototypes
+: determine filename position in cpp output
 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>.
+echo "Computing filename position in cpp output for #include directives..." >&4
+echo '#include <stdio.h>' > foo.c
+$cat >fieldn <<EOF
+$startsh
+$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
+$grep '^[      ]*#.*stdio\.h' | \
+while read cline; do
+       pos=1
+       set \$cline
+       while $test \$# -gt 0; do
+               if $test -r \`echo \$1 | $tr -d '"'\`; then
+                       echo "\$pos"
+                       exit 0
+               fi
+               shift
+               pos=\`expr \$pos + 1\`
+       done
+done
+EOF
+chmod +x fieldn
+fieldn=`./fieldn`
+$rm -f foo.c fieldn
+case $fieldn in
+'') pos='???';;
+1) pos=first;;
+2) pos=second;;
+3) pos=third;;
+*) pos="${fieldn}th";;
+esac
+echo "Your cpp writes the filename in the $pos field of the line."
+
+: locate header file
+$cat >findhdr <<EOF
+$startsh
+wanted=\$1
+name=''
+if test -f $usrinc/\$wanted; then
+       echo "$usrinc/\$wanted"
+       exit 0
+fi
+awkprg='{ print \$$fieldn }'
+echo "#include <\$wanted>" > foo\$\$.c
+$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
+$grep "^[      ]*#.*\$wanted" | \
+while read cline; do
+       name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
+       case "\$name" in
+       */\$wanted) echo "\$name"; exit 0;;
+       *) name='';;
+       esac;
+done;
+$rm -f foo\$\$.c;
+case "\$name" in
+'') exit 1;;
+esac
+EOF
+chmod +x findhdr
+
+: define an alternate in-header-list? function
+inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
+cont=true; xxf="echo \"<\$1> found.\" >&4";
+case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
+*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
+esac;
+case $# in 4) instead=instead;; *) instead="at last";; esac;
+while $test "$cont"; do
+       xxx=`./findhdr $1`
+       var=$2; eval "was=\$$2";
+       if $test "$xxx" && $test -r "$xxx";
+       then eval $xxf;
+       eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
+               cont="";
+       else eval $xxnf;
+       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
+       set $yyy; shift; shift; yyy=$@;
+       case $# in 0) cont="";;
+       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
+               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
+       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
+               xxnf="echo \"there is no <\$1>, ...\" >&4";;
+       esac;
+done;
+while $test "$yyy";
+do set $yyy; var=$2; eval "was=\$$2";
+       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
+       set $yyy; shift; shift; yyy=$@;
+done'
+
+: see if this is a malloc.h system
+set malloc.h i_malloc
+eval $inhdr
+
+: see if stdlib is available
+set stdlib.h i_stdlib
+eval $inhdr
+
+: determine which malloc to compile in
+echo " "
+case "$usemymalloc" in
+''|[yY]*|true|$define) dflt='y' ;;
+*)     dflt='n' ;;
+esac
+rp="Do you wish to attempt to use the malloc that comes with $package?"
+. ./myread
+usemymalloc="$ans"
+case "$ans" in
+y*|true)
+       usemymalloc='y'
+       mallocsrc='malloc.c'
+       mallocobj="malloc$_o"
+       d_mymalloc="$define"
+       case "$libs" in
+       *-lmalloc*)
+               : Remove malloc from list of libraries to use
+               echo "Removing unneeded -lmalloc from library list" >&4
+               set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
+               shift
+               libs="$*"
+               echo "libs = $libs" >&4
+               ;;
+       esac
+       ;;
+*)
+       usemymalloc='n'
+       mallocsrc=''
+       mallocobj=''
+       d_mymalloc="$undef"
+       ;;
+esac
+
+: compute the return types of malloc and free
+echo " "
+$cat >malloc.c <<END
+#$i_malloc I_MALLOC
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef I_MALLOC
+#include <malloc.h>
+#endif
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#ifdef TRY_MALLOC
+void *malloc();
+#endif
+#ifdef TRY_FREE
+void free();
+#endif
+END
+case "$malloctype" in
+'')
+       if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
+               malloctype='void *'
+       else
+               malloctype='char *'
+       fi
+       ;;
+esac
+echo "Your system wants malloc to return '$malloctype', it would seem." >&4
+
+case "$freetype" in
+'')
+       if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
+               freetype='void'
+       else
+               freetype='int'
+       fi
+       ;;
+esac
+echo "Your system uses $freetype free(), it would seem." >&4
+$rm -f malloc.[co]
+: 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 available 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
@@ -4209,7 +4625,7 @@ 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 ' ' $trnl | 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
@@ -4275,7 +4691,7 @@ compiler, or your machine supports multiple models), you can override it here.
 EOM
 else
        dflt=''
-       echo $libpth | tr ' ' '\012' | sort | uniq > libpath
+       echo $libpth | tr ' ' $trnl | sort | uniq > libpath
        cat >&4 <<EOM
 I can't seem to find your C library.  I've looked in the following places:
 
@@ -4293,7 +4709,7 @@ rp='Where is your C library?'
 libc="$ans"
 
 echo " "
-echo $libc $libnames | tr ' ' '\012' | sort | uniq > libnames
+echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
 set X `cat libnames`
 shift
 xxx=files
@@ -4430,96 +4846,6 @@ fi
 esac
 $rm -f libnames libpath
 
-: determine filename position in cpp output
-echo " "
-echo "Computing filename position in cpp output for #include directives..." >&4
-echo '#include <stdio.h>' > foo.c
-$cat >fieldn <<EOF
-$startsh
-$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
-$grep '^[      ]*#.*stdio\.h' | \
-while read cline; do
-       pos=1
-       set \$cline
-       while $test \$# -gt 0; do
-               if $test -r \`echo \$1 | $tr -d '"'\`; then
-                       echo "\$pos"
-                       exit 0
-               fi
-               shift
-               pos=\`expr \$pos + 1\`
-       done
-done
-EOF
-chmod +x fieldn
-fieldn=`./fieldn`
-$rm -f foo.c fieldn
-case $fieldn in
-'') pos='???';;
-1) pos=first;;
-2) pos=second;;
-3) pos=third;;
-*) pos="${fieldn}th";;
-esac
-echo "Your cpp writes the filename in the $pos field of the line."
-
-: locate header file
-$cat >findhdr <<EOF
-$startsh
-wanted=\$1
-name=''
-if test -f $usrinc/\$wanted; then
-       echo "$usrinc/\$wanted"
-       exit 0
-fi
-awkprg='{ print \$$fieldn }'
-echo "#include <\$wanted>" > foo\$\$.c
-$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
-$grep "^[      ]*#.*\$wanted" | \
-while read cline; do
-       name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
-       case "\$name" in
-       */\$wanted) echo "\$name"; exit 0;;
-       *) name='';;
-       esac;
-done;
-$rm -f foo\$\$.c;
-case "\$name" in
-'') exit 1;;
-esac
-EOF
-chmod +x findhdr
-
-: define an alternate in-header-list? function
-inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
-cont=true; xxf="echo \"<\$1> found.\" >&4";
-case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
-*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
-esac;
-case $# in 4) instead=instead;; *) instead="at last";; esac;
-while $test "$cont"; do
-       xxx=`./findhdr $1`
-       var=$2; eval "was=\$$2";
-       if $test "$xxx" && $test -r "$xxx";
-       then eval $xxf;
-       eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
-               cont="";
-       else eval $xxnf;
-       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
-       set $yyy; shift; shift; yyy=$@;
-       case $# in 0) cont="";;
-       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
-               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
-       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
-               xxnf="echo \"there is no <\$1>, ...\" >&4";;
-       esac;
-done;
-while $test "$yyy";
-do set $yyy; var=$2; eval "was=\$$2";
-       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
-       set $yyy; shift; shift; yyy=$@;
-done'
-
 : see if dld is available
 set dld.h i_dld
 eval $inhdr
@@ -4663,26 +4989,17 @@ EOM
                        hpux)   dflt='+z' ;;
                        next)   dflt='none' ;;
                        irix*)  dflt='-KPIC' ;;
-                       svr4*|esix*|solaris)
-                               case "$ccflags" in
-                                       *-DDEBUGGING*)  dflt='-KPIC' ;;
-                                       *)      dflt='-Kpic' ;;
-                               esac 
-                               ;;
+                       svr4*|esix*|solaris) dflt='-KPIC' ;;
                        sunos)  dflt='-pic' ;;
                        *)      dflt='none' ;;
                    esac
                        ;;
                *)  case "$osname" in
-                       svr4*|esix*|solaris)
-                               case "$ccflags" in
-                                       *-DDEBUGGING*)  dflt='-fPIC' ;;
-                                       *)      dflt='-fpic' ;;
-                               esac 
-                               ;;
+                       svr4*|esix*|solaris) dflt='-fPIC' ;;
                        *)      dflt='-fpic' ;;
                    esac ;;
            esac ;;
+       ' ') dflt='none' ;;
     *) dflt="$cccdlflags" ;;
     esac
     rp="Any special flags to pass to $cc -c to compile shared library modules?"
@@ -4756,21 +5073,21 @@ EOM
     *) dflt="$lddlflags" ;;
     esac
 
-: Try to guess additional flags to pick up local libraries.
-for thisflag in $ldflags; do
-       case "$thisflag" in
-       -L*)
-               case " $dflt " in
-               *" $thisflag "*) ;;
-               *) dflt="$dflt $thisflag" ;;
+       : Try to guess additional flags to pick up local libraries.
+       for thisflag in $ldflags; do
+               case "$thisflag" in
+               -L*)
+                       case " $dflt " in
+                       *" $thisflag "*) ;;
+                       *) dflt="$dflt $thisflag" ;;
+                       esac
+                       ;;
                esac
-               ;;
-       esac
-done
+       done
 
-case "$dflt" in
-'') dflt='none' ;;
-esac
+       case "$dflt" in
+       ''|' ') dflt='none' ;;
+       esac
 
     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
     . ./myread
@@ -4794,6 +5111,7 @@ EOM
                sunos)  dflt='none' ;;
                *)      dflt='none' ;;
            esac ;;
+    ' ')  dflt='none' ;;
     *)  dflt="$ccdlflags" ;;
     esac
     rp="Any special flags to pass to $cc to use dynamic loading?"
@@ -4950,7 +5268,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 (doughera@lafcol.lafayette.edu)
+will not work in this version.  Let me (jhi@iki.fi)
 know of any problems this may cause.
 
 EOM
@@ -5684,14 +6002,13 @@ else
 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" ;;
+: Usual default is /usr/local/lib/perl5/site_perl/$apiversion
+prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+case "$prefix" in
+*perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
+*)      set dflt sitelib lib/$package/site_$prog/$apiversion ;;
 esac
+eval $prefixit
 $cat <<EOM
 
 The installation process will also create a directory for
@@ -5730,12 +6047,15 @@ else
 fi
 
 : determine where site specific architecture-dependent libraries go.
-xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
-: xxx is usuually lib/site_perl/archname.
+: sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
+: sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
+: sitelib may have an optional trailing /share.
+tdflt=`echo $sitelib | $sed 's,/share$,,'`
+tdflt="$tdflt/$archname"
 set sitearch sitearch none
 eval $prefixit
 case "$sitearch" in
-'')    dflt="$sitelib/$archname" ;;
+'')    dflt="$tdflt" ;;
 *)     dflt="$sitearch" ;;
 esac
 $cat <<EOM
@@ -5804,9 +6124,10 @@ set useperlio
 eval $setvar 
 
 : Check how to convert floats to strings.
-echo " "
-echo "Checking for an efficient way to convert floats to strings."
-$cat >try.c <<'EOP'
+if test "X$d_Gconvert" = X; then
+       echo " "
+       echo "Checking for an efficient way to convert floats to strings."
+       $cat >try.c <<'EOP'
 #ifdef TRY_gconvert
 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
 char *myname = "gconvert";
@@ -5865,35 +6186,36 @@ main()
        exit(0);
 }
 EOP
-case "$d_Gconvert" in
-gconvert*) xxx_list='gconvert gcvt sprintf' ;;
-gcvt*) xxx_list='gcvt gconvert sprintf' ;;
-sprintf*) xxx_list='sprintf gconvert gcvt' ;;
-*) xxx_list='gconvert gcvt sprintf' ;;
-esac
+       case "$d_Gconvert" in
+       gconvert*) xxx_list='gconvert gcvt sprintf' ;;
+       gcvt*) xxx_list='gcvt gconvert sprintf' ;;
+       sprintf*) xxx_list='sprintf gconvert gcvt' ;;
+       *) xxx_list='gconvert gcvt sprintf' ;;
+       esac
 
-for xxx_convert in $xxx_list; do
-       echo "Trying $xxx_convert"
-       $rm -f try try$_o
-       set try -DTRY_$xxx_convert
-       if eval $compile; then
-               echo "$xxx_convert" found. >&4
-               if ./try; then
-                       echo "I'll use $xxx_convert to convert floats into a string." >&4
-                       break;
+       for xxx_convert in $xxx_list; do
+               echo "Trying $xxx_convert"
+               $rm -f try try$_o
+               set try -DTRY_$xxx_convert
+               if eval $compile; then
+                       echo "$xxx_convert" found. >&4
+                       if ./try; then
+                               echo "I'll use $xxx_convert to convert floats into a string." >&4
+                               break;
+                       else
+                               echo "...But $xxx_convert didn't work as I expected."
+                       fi
                else
-                       echo "...But $xxx_convert didn't work as I expected."
+                       echo "$xxx_convert NOT found." >&4
                fi
-       else
-               echo "$xxx_convert NOT found." >&4
-       fi
-done
+       done
                
-case "$xxx_convert" in
-gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
-gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
-*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
-esac
+       case "$xxx_convert" in
+       gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
+       gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
+       *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
+       esac
+fi
 
 : Initialize h_fcntl
 h_fcntl=false
@@ -5943,6 +6265,10 @@ EOCP
 esac
 $rm -f access*
 
+: see if accessx exists
+set accessx d_accessx
+eval $inlibc
+
 : see if alarm exists
 set alarm d_alarm
 eval $inlibc
@@ -6498,10 +6824,52 @@ $rm -f dbl_dig.?
 set d_dbl_dig
 eval $setvar
 
+
+if $test X"$use64bits" = X"$define"; then
+       : see if dbminit64 exists
+       set dbminit64 d_dbminit64
+       eval $inlibc
+
+       : see if dbmclose64 exists
+       set dbmclose64 d_dbmclose64
+       eval $inlibc
+
+       : see if fetch64 exists
+       set fetch64 d_fetch64
+       eval $inlibc
+
+       : see if store64 exists
+       set store64 d_store64
+       eval $inlibc
+
+       : see if delete64 exists
+       set delete64 d_delete64
+       eval $inlibc
+
+       : see if firstkey64 exists
+       set firstkey64 d_firstkey64
+       eval $inlibc
+
+       : see if nextkey64 exists
+       set nextkey64 d_nextkey64
+       eval $inlibc
+else
+       val="$undef"
+       for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
+       do
+               set $xxx
+               eval $setvar
+       done
+fi
+
 : see if difftime exists
 set difftime d_difftime
 eval $inlibc
 
+: see if sys/stat.h is available
+set sys/stat.h i_sysstat
+eval $inhdr
+
 : see if this is a dirent system
 echo " "
 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
@@ -6570,6 +6938,155 @@ set d_dirnamlen
 eval $setvar
 $rm -f try.c
 
+hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
+while $test $# -ge 2; do
+       case "$1" in
+       $define) echo "#include <$2>";;
+       esac ;
+    shift 2;
+done > try.c;
+echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
+if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+       val="$define";
+else
+       val="$undef";
+fi;
+set $varname;
+eval $setvar;
+$rm -f try.c try.o'
+
+
+if $test X"$use64bits" = X"$define"; then
+       : see if fstat64 exists
+       set fstat64 d_fstat64
+       eval $inlibc
+
+       : see if ftruncate64 exists
+       set ftruncate64 d_ftruncate64
+       eval $inlibc
+
+       : see if lockf64 exists
+       set lockf64 d_lockf64
+       eval $inlibc
+
+       : see if lseek64 exists
+       set lseek64 d_lseek64
+       eval $inlibc
+
+       : see if lstat64 exists
+       set lstat64 d_lstat64
+       eval $inlibc
+
+       : see if open64 exists
+       set open64 d_open64
+       eval $inlibc
+
+       : see if opendir64 exists
+       set opendir64 d_opendir64
+       eval $inlibc
+
+       : see if readdir64 exists
+       set readdir64 d_readdir64
+       eval $inlibc
+
+       : see if seekdir64 exists
+       set seekdir64 d_seekdir64
+       eval $inlibc
+
+       : see if stat64 exists
+       set stat64 d_stat64
+       eval $inlibc
+
+       : see if telldir64 exists
+       set telldir64 d_telldir64
+       eval $inlibc
+
+       : see if truncate64 exists
+       set truncate64 d_truncate64
+       eval $inlibc
+
+       : check for off64_t
+       echo " "
+       echo $n "Checking to see if your system supports off64_t...$c" >&4
+       $cat >try.c <<EOCP
+#include <sys/types.h>
+off64_t foo() { off64_t x; x = 7; return x; }'
+EOCP
+       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 -f try.*
+       set d_off64t
+       eval $setvar
+
+       : check for ino64_t
+       echo " "
+       echo $n "Checking to see if your system supports ino64_t...$c" >&4
+       val="$undef"
+       case "$i_sysstat" in
+       "$define" )
+               $cat >try.c <<EOCP
+#include <sys/types.h>
+#include <sys/stat.h>
+ino64_t foo() { ino64_t x; x = 7; return x; }'
+EOCP
+               if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+                       val="$define"
+               fi
+               $rm -f try.*
+               ;;
+       esac
+       if $test "X$val" = X"$define"; then
+               echo " Yup, it does." >&4
+       else
+               echo " Nope, it doesn't." >&4
+       fi
+       set d_ino64t
+       eval $setvar
+
+       : check for struct flock64
+       echo " "
+       echo "Checking to see if your system supports struct flock64..." >&4
+       if $h_fcntl; then
+               set d_flock64s flock64 l_len define fcntl.h
+               eval $hasfield
+       else
+               val="$undef"
+               set d_flock64s
+               eval $setvar
+       fi
+       case "$d_flock64s" in
+       "$define")      echo "Yup, it does." >&4
+                       ;;
+       *)              echo "Nope, it doesn't." >&4
+                       ;;
+       esac
+
+       : check for struct dirent64
+       echo " "
+       echo "Checking to see if your system supports struct dirent64..." >&4
+       set d_dirent64s dirent64 d_off $i_dirent dirent.h
+       eval $hasfield
+       case "$d_flock64s" in
+       "$define")      echo "Yup, it does." >&4
+                       ;;
+       *)              echo "Nope, it doesn't." >&4
+                       ;;
+       esac
+
+else
+       val="$undef"
+       for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64s d_dirent64s
+       do
+               set $xxx
+               eval $setvar
+       done
+fi
+
 : see if dlerror exists
 xxx_runnm="$runnm"
 runnm=false
@@ -6664,7 +7181,7 @@ EOM
        if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
                mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
                $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
-               $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
+               $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
                xxx=`./fred`
                case $xxx in
                1)      echo "Test program failed using dlopen." >&4
@@ -6686,10 +7203,42 @@ $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
 set d_dlsymun
 eval $setvar
 
+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 prototype for drand48 is available
+echo " "
+set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
+eval $hasproto
+
 : see if dup2 exists
 set dup2 d_dup2
 eval $inlibc
 
+: see if eaccess exists
+set eaccess d_eaccess
+eval $inlibc
+
+: see if endgrent exists
+set endgrent d_endgrent
+eval $inlibc
+
 : see if endhostent exists
 set endhostent d_endhent
 eval $inlibc
@@ -6702,6 +7251,10 @@ eval $inlibc
 set endprotoent d_endpent
 eval $inlibc
 
+: see if endpwent exists
+set endpwent d_endpwent
+eval $inlibc
+
 : see if endservent exists
 set endservent d_endsent
 eval $inlibc
@@ -6949,6 +7502,52 @@ eval $inlibc
 set fgetpos d_fgetpos
 eval $inlibc
 
+
+if $test X"$use64bits" = X"$define"; then
+       : see if fgetpos64 exists
+       set fgetpos64 d_fgetpos64
+       eval $inlibc
+
+       : see if fopen64 exists
+       set freopen64 d_fopen64
+       eval $inlibc
+
+       : see if freopen64 exists
+       set freopen64 d_freopen64
+       eval $inlibc
+
+       : see if fseek64 exists
+       set fseek64 d_fseek64
+       eval $inlibc
+
+       : see if fseeko64 exists
+       set fseeko64 d_fseeko64
+       eval $inlibc
+
+       : see if fsetpos64 exists
+       set fsetpos64 d_fsetpos64
+       eval $inlibc
+
+       : see if ftell64 exists
+       set ftell64 d_ftell64
+       eval $inlibc
+
+       : see if ftello64 exists
+       set ftello64 d_ftello64
+       eval $inlibc
+
+       : see if tmpfile64 exists
+       set tmpfile64 d_tmpfile64
+       eval $inlibc
+else
+       val="$undef"
+       for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
+       do
+               set $xxx
+               eval $setvar
+       done
+fi
+
 : see if flock exists
 set flock d_flock
 eval $inlibc
@@ -6965,10 +7564,22 @@ eval $inlibc
 set fpathconf d_fpathconf
 eval $inlibc
 
+: see if fseeko exists
+set fseeko d_fseeko
+eval $inlibc
+
 : see if fsetpos exists
 set fsetpos d_fsetpos
 eval $inlibc
 
+: see if ftello exists
+set ftello d_ftello
+eval $inlibc
+
+: see if getgrent exists
+set getgrent d_getgrent
+eval $inlibc
+
 : see if gethostbyaddr exists
 set gethostbyaddr d_gethbyaddr
 eval $inlibc
@@ -6981,25 +7592,6 @@ eval $inlibc
 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
@@ -7064,6 +7656,10 @@ echo " "
 set d_getprotoprotos getprotoent $i_netdb netdb.h
 eval $hasproto
 
+: see if getpwent exists
+set getpwent d_getpwent
+eval $inlibc
+
 
 : see if getservbyname exists
 set getservbyname d_getsbyname
@@ -7101,10 +7697,39 @@ case "$d_gettimeod$d_ftime" in
        ;;
 esac
 
+: see if this is an grp system
+set grp.h i_grp
+eval $inhdr
+
+case "$i_grp" in
+$define)
+       xxx=`./findhdr grp.h`
+       $cppstdin $cppflags $cppminus < $xxx >$$.h
+
+       if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_grpasswd
+       eval $setvar
+
+       $rm -f $$.h
+       ;;
+*)
+       val="$undef";
+       set d_grpasswd; eval $setvar
+       ;;
+esac
+
 : see if this is a netinet/in.h or sys/in.h system
 set netinet/in.h i_niin sys/in.h i_sysin
 eval $inhdr
 
+: see if arpa/inet.h has to be included
+set arpa/inet.h i_arpainet
+eval $inhdr
+
 : see if htonl --and friends-- exists
 val=''
 set htonl val
@@ -7118,12 +7743,16 @@ $undef)
 #include <sys/types.h>
 #$i_niin I_NETINET_IN
 #$i_sysin I_SYS_IN
+#$i_arpainet I_ARPA_INET
 #ifdef I_NETINET_IN
 #include <netinet/in.h>
 #endif
 #ifdef I_SYS_IN
 #include <sys/in.h>
 #endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.h>
+#endif
 #ifdef htonl
 printf("Defined as a macro.");
 #endif
@@ -7198,6 +7827,38 @@ set d_index; eval $setvar
 set inet_aton d_inetaton
 eval $inlibc
 
+: see if inttypes.h is available
+set inttypes.h i_inttypes
+eval $inhdr
+: check for int64_t
+case "$use64bits" in
+"$define" )
+       echo " "
+       echo $n "Checking to see if your system supports int64_t...$c" >&4
+       $cat >try.c <<EOCP
+#include <sys/types.h>
+#$i_inttypes I_INTTYPES
+#ifdef I_INTTYPES
+#include <inttypes.h>
+#endif
+int64_t foo() { int64_t x; x = 7; return x; }
+EOCP
+       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 -f try.*
+       ;;
+*)     val="$undef"
+       ;;
+esac
+set d_int64t
+eval $setvar
+
+
 : Look for isascii
 echo " "
 $cat >isascii.c <<'EOCP'
@@ -7271,6 +7932,33 @@ eval $inlibc
 set lockf d_lockf
 eval $inlibc
 
+: check for length of double
+echo " "
+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
+
 : check for long doubles
 echo " "
 echo $n "Checking to see if your system supports long doubles...$c" >&4
@@ -7310,6 +7998,9 @@ EOCP
                . ./myread
                longdblsize="$ans"
        fi
+       if $test "X$doublesize" = "X$longdblsize"; then
+               echo "(That isn't any different from an ordinary double.)"
+       fi      
        ;;
 esac
 $rm -f try.c try
@@ -7353,6 +8044,9 @@ EOCP
                . ./myread
                longlongsize="$ans"
        fi
+       if $test "X$longsize" = "X$longlongsize"; then
+               echo "(That isn't any different from an ordinary long.)"
+       fi      
        ;;
 esac
 $rm -f try.c try
@@ -7423,6 +8117,25 @@ echo " "
 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
 *"$undef"*) h_msg=false;;
 esac
+case "$osname" in
+freebsd)
+    case "`ipcs 2>&1`" in
+    "SVID messages"*"not configured"*)
+       echo "Your $osname does not have the msg*(2) configured." >&4
+        h_msg=false
+       val="$undef"
+       set msgctl d_msgctl
+       eval $setvar
+       set msgget d_msgget
+       eval $setvar
+       set msgsnd d_msgsnd
+       eval $setvar
+       set msgrcv d_msgrcv
+       eval $setvar
+       ;;
+    esac
+    ;;
+esac
 : we could also check for sys/ipc.h ...
 if $h_msg && $test `./findhdr sys/msg.h`; then
        echo "You have the full msg*(2) library." >&4
@@ -7434,91 +8147,6 @@ fi
 set d_msg
 eval $setvar
 
-: see if this is a malloc.h system
-set malloc.h i_malloc
-eval $inhdr
-
-: see if stdlib is available
-set stdlib.h i_stdlib
-eval $inhdr
-
-: determine which malloc to compile in
-echo " "
-case "$usemymalloc" in
-''|y*|true)    dflt='y' ;;
-n*|false)      dflt='n' ;;
-*)     dflt="$usemymalloc" ;;
-esac
-rp="Do you wish to attempt to use the malloc that comes with $package?"
-. ./myread
-usemymalloc="$ans"
-case "$ans" in
-y*|true)
-       usemymalloc='y'
-       mallocsrc='malloc.c'
-       mallocobj="malloc$_o"
-       d_mymalloc="$define"
-       case "$libs" in
-       *-lmalloc*)
-               : Remove malloc from list of libraries to use
-               echo "Removing unneeded -lmalloc from library list" >&4
-               set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
-               shift
-               libs="$*"
-               echo "libs = $libs" >&4
-               ;;
-       esac
-       ;;
-*)
-       usemymalloc='n'
-       mallocsrc=''
-       mallocobj=''
-       d_mymalloc="$undef"
-       ;;
-esac
-
-: compute the return types of malloc and free
-echo " "
-$cat >malloc.c <<END
-#$i_malloc I_MALLOC
-#$i_stdlib I_STDLIB
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef I_MALLOC
-#include <malloc.h>
-#endif
-#ifdef I_STDLIB
-#include <stdlib.h>
-#endif
-#ifdef TRY_MALLOC
-void *malloc();
-#endif
-#ifdef TRY_FREE
-void free();
-#endif
-END
-case "$malloctype" in
-'')
-       if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
-               malloctype='void *'
-       else
-               malloctype='char *'
-       fi
-       ;;
-esac
-echo "Your system wants malloc to return '$malloctype', it would seem." >&4
-
-case "$freetype" in
-'')
-       if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
-               freetype='void'
-       else
-               freetype='int'
-       fi
-       ;;
-esac
-echo "Your system uses $freetype free(), it would seem." >&4
-$rm -f malloc.[co]
 : see if nice exists
 set nice d_nice
 eval $inlibc
@@ -7535,42 +8163,6 @@ 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 
@@ -7676,6 +8268,14 @@ $define)
        set d_pwgecos
        eval $setvar
 
+       if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwpasswd
+       eval $setvar
+
        $rm -f $$.h
        ;;
 *)
@@ -7687,6 +8287,7 @@ $define)
        set d_pwexpire; eval $setvar
        set d_pwcomment; eval $setvar
        set d_pwgecos; eval $setvar
+       set d_pwpasswd; eval $setvar
        ;;
 esac
 
@@ -7966,6 +8567,23 @@ echo " "
 case "$d_semctl$d_semget$d_semop" in
 *"$undef"*) h_sem=false;;
 esac
+case "$osname" in
+freebsd)
+    case "`ipcs 2>&1`" in
+    "SVID messages"*"not configured"*)
+       echo "Your $osname does not have the sem*(2) configured." >&4
+        h_sem=false
+       val="$undef"
+       set semctl d_semctl
+       eval $setvar
+       set semget d_semget
+       eval $setvar
+       set semop d_semop
+       eval $setvar
+       ;;
+    esac
+    ;;
+esac
 : we could also check for sys/ipc.h ...
 if $h_sem && $test `./findhdr sys/sem.h`; then
        echo "You have the full sem*(2) library." >&4
@@ -7993,7 +8611,7 @@ else
     echo "You do not have union semun in <sys/sem.h>." >&4
     val="$undef"
 fi
-$rm -f try try.c
+$rm -f try try.c try.h
 set d_union_semun
 eval $setvar
 
@@ -8002,6 +8620,31 @@ case "$d_sem" in
 $define)
     : see whether semctl IPC_STAT can use union semun
     echo " "
+    $cat > try.h <<END
+#ifndef S_IRUSR
+#   ifdef S_IREAD
+#      define S_IRUSR S_IREAD
+#      define S_IWUSR S_IWRITE
+#      define S_IXUSR S_IEXEC
+#   else
+#      define S_IRUSR 0400
+#      define S_IWUSR 0200
+#      define S_IXUSR 0100
+#   endif
+#   define S_IRGRP (S_IRUSR>>3)
+#   define S_IWGRP (S_IWUSR>>3)
+#   define S_IXGRP (S_IXUSR>>3)
+#   define S_IROTH (S_IRUSR>>6)
+#   define S_IWOTH (S_IWUSR>>6)
+#   define S_IXOTH (S_IXUSR>>6)
+#endif
+#ifndef S_IRWXU
+#   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
+#   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
+#   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
+#endif
+END
+
     $cat > try.c <<END
 #include <sys/types.h>
 #include <sys/ipc.h>
@@ -8009,6 +8652,7 @@ $define)
 #include <sys/stat.h>
 #include <stdio.h>
 #include <errno.h>
+#include "try.h"
 #ifndef errno
 extern int errno;
 #endif
@@ -8074,6 +8718,7 @@ END
 #include <sys/ipc.h>
 #include <sys/sem.h>
 #include <sys/stat.h>
+#include "try.h"
 #include <stdio.h>
 #include <errno.h>
 #ifndef errno
@@ -8122,6 +8767,7 @@ END
     *)  echo "You cannot use struct semid_ds * for semctl IPC_STAT." >&4
         ;;
     esac
+    $rm -f try.h
     ;;
 *)  val="$undef"
 
@@ -8144,6 +8790,10 @@ eval $inlibc
 set seteuid d_seteuid
 eval $inlibc
 
+: see if setgrent exists
+set setgrent d_setgrent
+eval $inlibc
+
 : see if sethostent exists
 set sethostent d_sethent
 eval $inlibc
@@ -8176,6 +8826,10 @@ eval $inlibc
 set setpriority d_setprior
 eval $inlibc
 
+: see if setpwent exists
+set setpwent d_setpwent
+eval $inlibc
+
 : see if setregid exists
 set setregid d_setregid
 eval $inlibc
@@ -8312,6 +8966,25 @@ echo " "
 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
 *"$undef"*) h_shm=false;;
 esac
+case "$osname" in
+freebsd)
+    case "`ipcs 2>&1`" in
+    "SVID shared memory"*"not configured"*)
+       echo "Your $osname does not have the shm*(2) configured." >&4
+        h_shm=false
+       val="$undef"
+       set shmctl d_shmctl
+       evat $setvar
+       set shmget d_shmget
+       evat $setvar
+       set shmat d_shmat
+       evat $setvar
+       set shmdt d_shmdt
+       evat $setvar
+       ;;
+    esac
+    ;;
+esac
 : we could also check for sys/ipc.h ...
 if $h_shm && $test `./findhdr sys/shm.h`; then
        echo "You have the full shm*(2) library." >&4
@@ -8450,21 +9123,8 @@ eval $inlibc
 
 : see if stat knows about block sizes
 echo " "
-xxx=`./findhdr sys/stat.h`
-if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
-       if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
-               echo "Your stat() knows about block sizes." >&4
-               val="$define"
-       else
-               echo "Your stat() doesn't know about block sizes." >&4
-               val="$undef"
-       fi
-else
-       echo "Your stat() doesn't know about block sizes." >&4
-       val="$undef"
-fi
-set d_statblks
-eval $setvar
+set d_statblks stat st_blocks $i_sysstat sys/stat.h
+eval $hasfield
 
 : see if _ptr and _cnt from stdio act std
 echo " "
@@ -8623,39 +9283,41 @@ $rm -f try.*
 
 : see if strerror and/or sys_errlist[] exist
 echo " "
-if set strerror val -f d_strerror; eval $csym; $val; then
-       echo 'strerror() found.' >&4
-       d_strerror="$define"
-       d_strerrm='strerror(e)'
-       if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
-               echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
-               d_syserrlst="$define"
-       else
-       echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
-               d_syserrlst="$undef"
-       fi
-elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
-       $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
-       echo 'strerror() found in string header.' >&4
-       d_strerror="$define"
-       d_strerrm='strerror(e)'
-       if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
-               echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
+if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
+    if set strerror val -f d_strerror; eval $csym; $val; then
+               echo 'strerror() found.' >&4
+               d_strerror="$define"
+               d_strerrm='strerror(e)'
+               if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
+                       echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
+                       d_syserrlst="$define"
+               else
+                       echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
+                       d_syserrlst="$undef"
+               fi
+    elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
+                       $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
+               echo 'strerror() found in string header.' >&4
+               d_strerror="$define"
+               d_strerrm='strerror(e)'
+               if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
+                       echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
+                               d_syserrlst="$define"
+               else
+                       echo "(You don't appear to have any sys_errlist[], how can this be?)"
+                       d_syserrlst="$undef"
+               fi
+    elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+               echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
+               d_strerror="$undef"
                d_syserrlst="$define"
-       else
-               echo "(You don't appear to have any sys_errlist[], how can this be?)"
+               d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
+    else
+               echo 'strerror() and sys_errlist[] NOT found.' >&4
+               d_strerror="$undef"
                d_syserrlst="$undef"
-       fi
-elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
-echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
-       d_strerror="$undef"
-       d_syserrlst="$define"
-       d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
-else
-       echo 'strerror() and sys_errlist[] NOT found.' >&4
-       d_strerror="$undef"
-       d_syserrlst="$undef"
-       d_strerrm='"unknown"'
+               d_strerrm='"unknown"'
+    fi
 fi
 
 : see if strtod exists
@@ -8878,6 +9540,10 @@ eval $inhdr
 set sys/ndir.h i_sysndir
 eval $inhdr
 
+: see if sys/types.h has to be included
+set sys/types.h i_systypes
+eval $inhdr
+
 : see if closedir exists
 set closedir d_closedir
 eval $inlibc
@@ -8890,7 +9556,11 @@ case "$d_closedir" in
 #$i_dirent I_DIRENT            /**/
 #$i_sysdir I_SYS_DIR           /**/
 #$i_sysndir I_SYS_NDIR         /**/
+#$i_systypes I_SYS_TYPES       /**/
 
+#if defined(I_SYS_TYPES)
+#include <sys/types.h>
+#endif
 #if defined(I_DIRENT)
 #include <dirent.h>
 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
@@ -9282,15 +9952,6 @@ esac
 : check for void type
 echo " "
 echo "Checking to see how well your C compiler groks the void type..." >&4
-echo " "
-$cat >&4 <<EOM
-  Support flag bits are:
-    1: basic void declarations.
-    2: arrays of pointers to functions returning void.
-    4: operations between pointers to and addresses of void functions.
-    8: generic void pointers.
-EOM
-echo " "
 case "$voidflags" in
 '')
        $cat >try.c <<'EOCP'
@@ -9319,7 +9980,7 @@ main() { sub(); }
 EOCP
        if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
                voidflags=$defvoidused
-       echo "It appears to support void to the level $package wants ($defvoidused)."
+       echo "Good.  It appears to support void to the level $package wants.">&4
                if $contains warning .out >/dev/null 2>&1; then
                        echo "However, you might get some warnings that look like this:"
                        $cat .out
@@ -9365,7 +10026,13 @@ echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
 esac
 case "$voidflags" in
 "$defvoidused") ;;
-*)
+*)     $cat >&4 <<'EOM'
+  Support flag bits are:
+    1: basic void declarations.
+    2: arrays of pointers to functions returning void.
+    4: operations between pointers to and addresses of void functions.
+    8: generic void pointers.
+EOM
        dflt="$voidflags";
        rp="Your void support flags add up to what?"
        . ./myread
@@ -9374,32 +10041,162 @@ case "$voidflags" in
 esac
 $rm -f try.* .out
 
-: check for length of double
+
+: How can we generate normalized random numbers ?
+echo " "
+case "$randfunc" in
+'')
+       if set drand48 val -f; eval $csym; $val; then
+               dflt="drand48"
+               echo "Good, found drand48()." >&4
+       elif set random val -f; eval $csym; $val; then
+               dflt="random"
+               echo "OK, found random()." >&4
+       else
+               dflt="rand"
+               echo "Yick, looks like I have to use rand()." >&4
+       fi
+       echo " "
+       ;;
+*)
+       dflt="$randfunc"
+       ;;
+esac
+cont=true
+
+case "$ccflags" in
+*-Dmy_rand=*|*-Dmy_srand=*)
+       echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
+       ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
+       ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
+       ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
+       ;;
+esac
+
+while $test "$cont"; do
+       rp="Use which function to generate random numbers?"
+       . ./myread
+       if $test "$ans" = "$dflt"; then
+               : null
+       else
+               randbits=''
+       fi
+       randfunc="$ans"
+       if set $ans val -f; eval $csym; $val; then
+               cont=''
+       else
+               dflt=n
+               rp="Function $ans does not exists. Use that name anyway?"
+               . ./myread
+               dflt=rand
+               case "$ans" in
+                       [yY]*) cont='';;
+               esac
+       fi
+       case "$cont" in
+       '')
+               case "$randfunc" in
+               drand48)
+                       drand01="drand48()"
+                       seedfunc="srand48"
+                       randbits=48
+                       randseedtype=long
+                       ;;
+               rand|random)
+                       case "$randbits" in
+                       '')
+echo "Checking to see how many bits your $randfunc() function produces..." >&4
+                               $cat >try.c <<EOCP
+#$i_unistd I_UNISTD
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#ifdef I_UNISTD
+#  include <unistd.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+main()
+{
+       register int i;
+       register unsigned long tmp;
+       register unsigned long max = 0L;
+
+       for (i = 1000; i; i--) {
+               tmp = (unsigned long) $randfunc();
+               if (tmp > max) max = tmp;
+       }
+       for (i = 0; max; i++)
+               max /= 2;
+       printf("%d\n",i);
+}
+EOCP
+                               set try
+                               if eval $compile_ok; then
+                                       dflt=`try`
+                               else
+                                       dflt='?'
+                                       echo "(I can't seem to compile the test program...)"
+                               fi
+                               ;;
+                       *)
+                               dflt="$randbits"
+                               ;;
+                       esac
+                       rp="How many bits does your $randfunc() function produce?"
+                       . ./myread
+                       randbits="$ans"
+                       $rm -f try.c try
+                       drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
+                       seedfunc="s$randfunc"
+                       randseedtype=unsigned
+                       ;;
+               *)
+                       dflt="31"
+                       rp="How many bits does your $randfunc() function produce?"
+                       . ./myread
+                       randbits="$ans"
+                       seedfunc="s$randfunc"
+                       drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
+                       if set $seedfunc val -f; eval $csym; $val; then
+                               echo "(Using $seedfunc() to seed random generator)"
+                       else
+                               echo "(Warning: no $seedfunc() to seed random generator)"
+                               seedfunc=rand
+                       fi
+                       randseedtype=unsigned
+                       ;;
+               esac
+               ;;
+       esac
+done
+
 echo " "
-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()
+echo "Determining whether or not we are on an EBCDIC system..." >&4
+$cat >tebcdic.c <<'EOM'
+int main()
 {
-       printf("%d\n", sizeof(double));
+  if ('M'==0xd4) return 0;
+  return 1;
 }
-EOCP
-       set try
-       if eval $compile_ok; then
-               doublesize=`./try`
-               $echo " $doublesize bytes." >&4
+EOM
+
+val=$undef
+set tebcdic
+if eval $compile_ok; then
+       if ./tebcdic; then
+               echo "You have EBCDIC." >&4
+               val="$define"
        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"
+               echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
        fi
-       ;;
-esac
-$rm -f try.c try
+else
+       echo "$me: I'm unable to compile the test program." >&4
+       echo "I'll assume ASCII or some ISO Latin." >&4
+fi
+$rm -f tebcdic.c tebcdic
+set ebcdic
+eval $setvar
 
 : see what type file positions are declared as in the library
 rp="What is the type for file position used by fsetpos()?"
@@ -9480,6 +10277,30 @@ set off_t lseektype long stdio.h sys/types.h
 eval $typedef_ask
 
 echo " "
+$echo $n "Checking to see how big your file offsets are...$c" >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof($lseektype));
+}
+EOCP
+set try
+if eval $compile_ok; then
+       lseeksize=`./try`
+       $echo " $lseeksize bytes." >&4
+else
+       dflt='4'
+       echo " "
+       echo "(I can't seem to compile the test program.  Guessing...)"
+       rp="What is the size of your file offsets (in bytes)?"
+       . ./myread
+       lseeksize="$ans"
+fi
+$rm -f try.c try
+
+echo " "
 echo "Checking if your $make program sets \$(MAKE)..." >&4
 case "$make_set_make" in
 '')
@@ -9707,6 +10528,37 @@ rp="What is the type of process ids on this system?"
 set pid_t pidtype int stdio.h sys/types.h
 eval $typedef_ask
 
+
+: see whether the state of pthread_attr_setdetachstate is an int pointer
+$cat >try.c <<EOP
+#include <pthread.h>
+main() {
+    pthread_attr_t attr;
+    int state = 0;     
+    pthread_attr_init(&attr);
+#ifdef POINTER
+    pthread_attr_setdetachstate(&attr, &state);
+#else
+    pthread_attr_setdetachstate(&attr, state);
+#endif
+}
+EOP
+set try
+if eval $compile; then
+    val="$undef"
+else
+    set try -DPOINTER
+    if eval $compile; then
+        val="$define"
+    else
+        val="$undef"
+    fi
+fi
+set pthread_setdetachstate_pointer
+eval $setvar
+
+$rm -f try try.*
+
 : check for length of pointer
 echo " "
 case "$ptrsize" in
@@ -9740,55 +10592,6 @@ EOCP
 esac
 $rm -f try.c try
 
-: check for size of random number generator
-echo " "
-case "$randbits" in
-'')
-       echo "Checking to see how many bits your rand function produces..." >&4
-       $cat >try.c <<EOCP
-#$i_unistd I_UNISTD
-#$i_stdlib I_STDLIB
-#include <stdio.h>
-#ifdef I_UNISTD
-#  include <unistd.h>
-#endif
-#ifdef I_STDLIB
-#  include <stdlib.h>
-#endif
-EOCP
-       $cat >>try.c <<'EOCP'
-main()
-{
-       register int i;
-       register unsigned long tmp;
-       register unsigned long max = 0L;
-
-       for (i = 1000; i; i--) {
-               tmp = (unsigned long)rand();
-               if (tmp > max) max = tmp;
-       }
-       for (i = 0; max; i++)
-               max /= 2;
-       printf("%d\n",i);
-}
-EOCP
-       set try
-       if eval $compile_ok; then
-               dflt=`./try$_exe`
-       else
-               dflt='?'
-               echo "(I can't seem to compile the test program...)"
-       fi
-       ;;
-*)
-       dflt="$randbits"
-       ;;
-esac
-rp='How many bits does your rand() function produce?'
-. ./myread
-randbits="$ans"
-$rm -f try.* try
-
 : see if ar generates random libraries by itself
 echo " "
 echo "Checking how to generate random libraries on your machine..." >&4
@@ -9832,15 +10635,88 @@ else
 fi
 $rm -f foo* bar* 
 
+
+: see whether the various POSIXish _yields exist
+$cat >try.c <<EOP
+#include <pthread.h>
+#include <stdio.h>
+main() {
+#ifdef SCHED_YIELD
+       sched_yield();
+#else
+#ifdef PTHREAD_YIELD
+       pthread_yield();
+#else
+#ifdef PTHREAD_YIELD_NULL
+       pthread_yield(NULL);
+#endif
+#endif
+#endif
+}
+EOP
+: see if sched_yield exists
+set try -DSCHED_YIELD
+if eval $compile; then
+    val="$define"
+    sched_yield='sched_yield()'
+else
+    val="$undef"
+fi
+case "$usethreads" in
+$define)
+       case "$val" in
+       $define) echo 'sched_yield() found.' >&4        ;;
+       *)       echo 'sched_yield() NOT found.' >&4    ;;
+       esac
+esac
+set d_sched_yield
+eval $setvar
+
+: see if pthread_yield exists
+set try -DPTHREAD_YIELD
+if eval $compile; then
+    val="$define"
+    case "$sched_yield" in
+    '') sched_yield='pthread_yield()' ;;
+    esac
+else
+    set try -DPTHREAD_YIELD_NULL
+    if eval $compile; then
+       val="$define"
+       case "$sched_yield" in
+       '') sched_yield='pthread_yield(NULL)' ;;
+       esac
+    else
+       val="$undef"
+    fi
+fi
+case "$usethreads" in
+$define)
+       case "$val" in
+       $define) echo 'pthread_yield() found.' >&4      ;;
+       *)       echo 'pthread_yield() NOT found.' >&4  ;;
+       esac
+       ;;
+esac
+set d_pthread_yield
+eval $setvar
+
+case "$sched_yield" in
+'') sched_yield=undef ;;
+esac
+
+$rm -f try try.*
+
 : see if sys/select.h has to be included
 set sys/select.h i_sysselct
 eval $inhdr
 
 : see if we should include time.h, sys/time.h, or both
 echo " "
-echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
-$echo $n "I'm now running the test program...$c"
-$cat >try.c <<'EOCP'
+if test "X$timeincl" = X; then
+       echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
+       $echo $n "I'm now running the test program...$c"
+       $cat >try.c <<'EOCP'
 #include <sys/types.h>
 #ifdef I_TIME
 #include <time.h>
@@ -9872,51 +10748,52 @@ main()
        exit(1);
 }
 EOCP
-flags=''
-for s_timezone in '-DS_TIMEZONE' ''; do
-sysselect=''
-for s_timeval in '-DS_TIMEVAL' ''; do
-for i_systimek in '' '-DSYSTIMEKERNEL'; do
-for i_time in '' '-DI_TIME'; do
-for i_systime in '-DI_SYSTIME' ''; do
-       case "$flags" in
-       '') $echo $n ".$c"
-               set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
-               if eval $compile; then
+       flags=''
+       for s_timezone in '-DS_TIMEZONE' ''; do
+       sysselect=''
+       for s_timeval in '-DS_TIMEVAL' ''; do
+       for i_systimek in '' '-DSYSTIMEKERNEL'; do
+       for i_time in '' '-DI_TIME'; do
+       for i_systime in '-DI_SYSTIME' ''; do
+               case "$flags" in
+               '') $echo $n ".$c"
+                       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 " "
-                       $echo $n "Succeeded with $flags$c"
-               fi
-               ;;
+                               shift
+                               flags="$*"
+                               echo " "
+                               $echo $n "Succeeded with $flags$c"
+                       fi
+                       ;;
+               esac
+       done
+       done
+       done
+       done
+       done
+       timeincl=''
+       echo " "
+       case "$flags" in
+       *SYSTIMEKERNEL*) i_systimek="$define"
+               timeincl=`./findhdr sys/time.h`
+               echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
+       *) i_systimek="$undef";;
        esac
-done
-done
-done
-done
-done
-timeincl=''
-echo " "
-case "$flags" in
-*SYSTIMEKERNEL*) i_systimek="$define"
-       timeincl=`./findhdr sys/time.h`
-       echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
-*) i_systimek="$undef";;
-esac
-case "$flags" in
-*I_TIME*) i_time="$define"
-       timeincl=`./findhdr time.h`" $timeincl"
-       echo "We'll include <time.h>." >&4;;
-*) i_time="$undef";;
-esac
-case "$flags" in
-*I_SYSTIME*) i_systime="$define"
-       timeincl=`./findhdr sys/time.h`" $timeincl"
-       echo "We'll include <sys/time.h>." >&4;;
-*) i_systime="$undef";;
-esac
-$rm -f try.c try
+       case "$flags" in
+       *I_TIME*) i_time="$define"
+               timeincl=`./findhdr time.h`" $timeincl"
+               echo "We'll include <time.h>." >&4;;
+       *) i_time="$undef";;
+       esac
+       case "$flags" in
+       *I_SYSTIME*) i_systime="$define"
+               timeincl=`./findhdr sys/time.h`" $timeincl"
+               echo "We'll include <sys/time.h>." >&4;;
+       *) i_systime="$undef";;
+       esac
+       $rm -f try.c try
+fi
 
 : check for fd_set items
 $cat <<EOM
@@ -10006,8 +10883,8 @@ EOM
                : 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 xxx in 'fd_set *' 'int *' 'void *'; do
+                       for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
                                for tmo in 'struct timeval *' 'const struct timeval *'; do
                                        case "$val" in
                                        '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
@@ -10039,6 +10916,100 @@ EOM
        ;;
 esac
 
+: check for the select 'width'
+case "$selectminbits" in
+'') case "$d_select" in
+       $define)
+               $cat <<EOM
+
+Checking to see on how many bits at a time your select() operates...
+EOM
+               $cat >try.c <<EOCP
+#include <sys/types.h>
+#$i_time I_TIME
+#$i_systime I_SYS_TIME
+#$i_systimek I_SYS_TIME_KERNEL
+#ifdef I_TIME
+#   include <time.h>
+#endif
+#ifdef I_SYS_TIME
+#   ifdef I_SYS_TIME_KERNEL
+#      define KERNEL
+#   endif
+#   include <sys/time.h>
+#   ifdef I_SYS_TIME_KERNEL
+#      undef KERNEL
+#   endif
+#endif
+#$i_sysselct I_SYS_SELECT
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+#include <stdio.h>
+$selecttype b;
+#define S sizeof(*(b))
+#define MINBITS        64
+#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
+#define NBITS  (NBYTES * 8)
+int main() {
+    char s[NBYTES];
+    struct timeval t;
+    int i;
+    FILE* fp;
+    int fd;
+
+    fclose(stdin);
+    fp = fopen("try.c", "r");
+    if (fp == 0)
+      exit(1);
+    fd = fileno(fp);
+    if (fd < 0)
+      exit(2);
+    b = ($selecttype)s;
+    for (i = 0; i < NBITS; i++)
+       FD_SET(i, b);
+    t.tv_sec  = 0;
+    t.tv_usec = 0;
+    select(fd + 1, b, 0, 0, &t);
+    for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
+    printf("%d\n", i + 1);
+    return 0;
+}
+EOCP
+               set try
+               if eval $compile_ok; then
+                       selectminbits=`./try`
+                       case "$selectminbits" in
+                       '')     cat >&4 <<EOM
+Cannot figure out on how many bits at a time your select() operates.
+I'll play safe and guess it is 32 bits.
+EOM
+                               selectminbits=32
+                               bits="32 bits"
+                               ;;
+                       1)      bits="1 bit" ;;
+                       *)      bits="$selectminbits bits" ;;
+                       esac
+                       echo "Your select() operates on $bits at a time." >&4
+               else
+                       rp='What is the minimum number of bits your select() operates on?'
+                       case "$byteorder" in
+                       1234|12345678)  dflt=32 ;;
+                       *)              dflt=1  ;;
+                       esac
+                       . ./myread
+                       val=$ans
+                       selectminbits="$val"
+               fi
+               $rm -f try.* try
+               ;;
+       *)      : no select, so pick a harmless default
+               selectminbits='32'
+               ;;
+       esac
+       ;;
+esac
+
 : Trace out the files included by signal.h, then look for SIGxxx names.
 : Remove SIGARRAYSIZE used by HPUX.
 : Remove SIGTYP void lines used by OS2.
@@ -10132,7 +11103,7 @@ printf("NSIG %d\n", NSIG);
 
 EOCP
 
-echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
+echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
 {
        printf "#ifdef SIG"; printf $1; printf "\n"
        printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
@@ -10201,7 +11172,7 @@ else
                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
+       for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
                $cat > signal.c <<EOCP
 #include <sys/types.h>
 #include <signal.h>
@@ -10236,7 +11207,7 @@ else
        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 ' ' $trnl | \
                $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
 fi
 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
 
 : see if time exists
 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_ask
-else
-       echo 'time() not found, hope that will do.' >&4
-       val="$undef"
-       timetype='int';
+if test "X$d_time" = X -o X"$timetype" = X; then
+    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_ask
+    else
+               echo 'time() not found, hope that will do.' >&4
+               val="$undef"
+               timetype='int';
+    fi
+    set d_time
+    eval $setvar
 fi
-set d_time
-eval $setvar
 
 : see what type uids are declared as in the kernel
 echo " "
@@ -10452,10 +11425,6 @@ esac
 set i_fcntl
 eval $setvar
 
-: see if this is an grp system
-set grp.h i_grp
-eval $inhdr
-
 : see if locale.h is available
 set locale.h i_locale
 eval $inhdr
@@ -10516,7 +11485,7 @@ eval $setvar
 : get C preprocessor symbols handy
 echo " "
 $echo $n "Hmm... $c"
-echo $al | $tr ' ' '\012' >Cppsym.know
+echo $al | $tr ' ' $trnl >Cppsym.know
 $cat <<EOSS >Cppsym
 $startsh
 case "\$1" in
@@ -10543,7 +11512,7 @@ esac
 case \$# in
 0) exit 1;;
 esac
-echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
+echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
 #ifdef \1\\
 exit 0; _ _ _ _\1\\     \1\\
 #endif\\
@@ -10581,7 +11550,13 @@ $rm -f try.c
 EOS
 chmod +x ccsym
 $eunicefix ccsym
-./ccsym | $sort | $uniq >ccsym.raw
+./ccsym > ccsym1.raw
+if $test -s ccsym1.raw; then
+       $sort ccsym1.raw | $uniq >ccsym.raw
+else
+       mv ccsym1.raw ccsym.raw
+fi
+
 $awk '/\=/ { print $0; next }
        { print $0"=1" }' ccsym.raw >ccsym.list
 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
@@ -10777,6 +11752,10 @@ $rm -f varargs*
 set stddef.h i_stddef
 eval $inhdr
 
+: see if sys/access.h is available
+set sys/access.h i_sysaccess
+eval $inhdr
+
 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
 set sys/filio.h i_sysfilio
 eval $inhdr
@@ -10806,12 +11785,8 @@ eval $inhdr
 set sys/resource.h i_sysresrc
 eval $inhdr
 
-: see if sys/stat.h is available
-set sys/stat.h i_sysstat
-eval $inhdr
-
-: see if sys/types.h has to be included
-set sys/types.h i_systypes
+: see if sys/security.h is available
+set sys/security.h i_syssecrt
 eval $inhdr
 
 : see if this is a sys/un.h system
@@ -10875,25 +11850,23 @@ nonxs_extensions=''
 : to be built.
 for xxx in * ; do
        case "$xxx" in
-       DynaLoader) ;;
+       DynaLoader|dynaload) ;;
        *)      if $test -f $xxx/$xxx.xs; then
                        known_extensions="$known_extensions $xxx"
+               elif $test -f $xxx/Makefile.PL; then
+                       nonxs_extensions="$nonxs_extensions $xxx"
                else
                        if $test -d $xxx; then
+                               # Look for nested extensions, eg. Devel/Dprof.
                                cd $xxx
-                               zzz=$known_extensions
                                for yyy in * ; do
                                if $test -f $yyy/$yyy.xs; then
                                        known_extensions="$known_extensions $xxx/$yyy"
+                               elif $test -f $yyy/Makefile.PL; then
+                                       nonxs_extensions="$nonxs_extensions $xxx/$yyy"
                                fi
                                done
                                cd ..
-                               if $test "$zzz" = "$known_extensions"; then
-                                       if $test -f $xxx/Makefile.PL; then
-                                               known_extensions="$known_extensions $xxx"
-                                               nonxs_extensions="$nonxs_extensions $xxx"
-                                       fi
-                               fi
                        fi
                fi 
                ;;
@@ -10951,12 +11924,14 @@ for xxx in $known_extensions ; do
                true|$define|y) avail_ext="$avail_ext $xxx" ;;
                esac
                ;;
-       *)
-               case " $nonxs_extensions " in
-               *" $xxx "*) ;;
-               *) avail_ext="$avail_ext $xxx" ;;
+       IPC/SysV|ipc/sysv)
+               : XXX Do we need a useipcsysv variable here
+               case "${d_msg}${d_sem}${d_shm}" in 
+               *"${define}"*) avail_ext="$avail_ext $xxx" ;;
                esac
                ;;
+       *)      avail_ext="$avail_ext $xxx"
+               ;;
        esac
 done
 
@@ -10965,6 +11940,7 @@ shift
 avail_ext="$*"
 
 : Now see which nonxs extensions are supported on this system.
+: For now assume all are.
 nonxs_ext=''
 for xxx in $nonxs_extensions ; do
        case "$xxx" in
@@ -11007,7 +11983,6 @@ EOM
                esac
                ;;
        esac
-       : Exclude those that are not xs extensions
        case "$dflt" in
        '')     dflt=none;;
        esac
@@ -11023,7 +11998,7 @@ EOM
                : Exclude those already listed in dynamic linking
                dflt=''
                for xxx in $avail_ext; do
-                       case " $dynamic_ext $nonxs_ext " in
+                       case " $dynamic_ext " in
                        *" $xxx "*) ;;
                        *) dflt="$dflt $xxx" ;;
                        esac
@@ -11073,6 +12048,7 @@ EOM
                esac
                ;;
        esac
+       : Exclude those that are not xs extensions
        case "$dflt" in
        '')     dflt=none;;
        esac
@@ -11085,7 +12061,7 @@ EOM
        ;;
 esac
 
-set X $dynamic_ext $static_ext
+set X $dynamic_ext $static_ext $nonxs_ext
 shift
 extensions="$*"
 
@@ -11175,9 +12151,11 @@ afs='$afs'
 alignbytes='$alignbytes'
 ansi2knr='$ansi2knr'
 aphostname='$aphostname'
+apiversion='$apiversion'
 ar='$ar'
 archlib='$archlib'
 archlibexp='$archlibexp'
+archname64='$archname64'
 archname='$archname'
 archobjs='$archobjs'
 awk='$awk'
@@ -11218,6 +12196,7 @@ cryptlib='$cryptlib'
 csh='$csh'
 d_Gconvert='$d_Gconvert'
 d_access='$d_access'
+d_accessx='$d_accessx'
 d_alarm='$d_alarm'
 d_archlib='$d_archlib'
 d_attribut='$d_attribut'
@@ -11239,16 +12218,24 @@ d_crypt='$d_crypt'
 d_csh='$d_csh'
 d_cuserid='$d_cuserid'
 d_dbl_dig='$d_dbl_dig'
+d_dbmclose64='$d_dbmclose64'
+d_dbminit64='$d_dbminit64'
+d_delete64='$d_delete64'
 d_difftime='$d_difftime'
+d_dirent64s='$d_dirent64s'
 d_dirnamlen='$d_dirnamlen'
 d_dlerror='$d_dlerror'
 d_dlopen='$d_dlopen'
 d_dlsymun='$d_dlsymun'
 d_dosuid='$d_dosuid'
+d_drand48proto='$d_drand48proto'
 d_dup2='$d_dup2'
+d_eaccess='$d_eaccess'
+d_endgrent='$d_endgrent'
 d_endhent='$d_endhent'
 d_endnent='$d_endnent'
 d_endpent='$d_endpent'
+d_endpwent='$d_endpwent'
 d_endsent='$d_endsent'
 d_eofnblk='$d_eofnblk'
 d_eunice='$d_eunice'
@@ -11258,13 +12245,29 @@ d_fcntl='$d_fcntl'
 d_fd_macros='$d_fd_macros'
 d_fd_set='$d_fd_set'
 d_fds_bits='$d_fds_bits'
+d_fetch64='$d_fetch64'
+d_fgetpos64='$d_fgetpos64'
 d_fgetpos='$d_fgetpos'
+d_firstkey64='$d_firstkey64'
 d_flexfnam='$d_flexfnam'
+d_flock64s='$d_flock64s'
 d_flock='$d_flock'
+d_fopen64='$d_fopen64'
 d_fork='$d_fork'
 d_fpathconf='$d_fpathconf'
+d_freopen64='$d_freopen64'
+d_fseek64='$d_fseek64'
+d_fseeko64='$d_fseeko64'
+d_fseeko='$d_fseeko'
+d_fsetpos64='$d_fsetpos64'
 d_fsetpos='$d_fsetpos'
+d_fstat64='$d_fstat64'
+d_ftell64='$d_ftell64'
+d_ftello64='$d_ftello64'
+d_ftello='$d_ftello'
 d_ftime='$d_ftime'
+d_ftruncate64='$d_ftruncate64'
+d_getgrent='$d_getgrent'
 d_getgrps='$d_getgrps'
 d_gethbyaddr='$d_gethbyaddr'
 d_gethbyname='$d_gethbyname'
@@ -11285,23 +12288,30 @@ d_getpgrp='$d_getpgrp'
 d_getppid='$d_getppid'
 d_getprior='$d_getprior'
 d_getprotoprotos='$d_getprotoprotos'
+d_getpwent='$d_getpwent'
 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_grpasswd='$d_grpasswd'
 d_htonl='$d_htonl'
 d_index='$d_index'
 d_inetaton='$d_inetaton'
+d_ino64t='$d_ino64t'
+d_int64t='$d_int64t'
 d_isascii='$d_isascii'
 d_killpg='$d_killpg'
 d_lchown='$d_lchown'
 d_link='$d_link'
 d_locconv='$d_locconv'
+d_lockf64='$d_lockf64'
 d_lockf='$d_lockf'
 d_longdbl='$d_longdbl'
 d_longlong='$d_longlong'
+d_lseek64='$d_lseek64'
+d_lstat64='$d_lstat64'
 d_lstat='$d_lstat'
 d_mblen='$d_mblen'
 d_mbstowcs='$d_mbstowcs'
@@ -11319,10 +12329,14 @@ d_msgget='$d_msgget'
 d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
 d_mymalloc='$d_mymalloc'
+d_nextkey64='$d_nextkey64'
 d_nice='$d_nice'
+d_off64t='$d_off64t'
 d_oldpthreads='$d_oldpthreads'
 d_oldsock='$d_oldsock'
 d_open3='$d_open3'
+d_open64='$d_open64'
+d_opendir64='$d_opendir64'
 d_pathconf='$d_pathconf'
 d_pause='$d_pause'
 d_phostname='$d_phostname'
@@ -11337,7 +12351,9 @@ d_pwclass='$d_pwclass'
 d_pwcomment='$d_pwcomment'
 d_pwexpire='$d_pwexpire'
 d_pwgecos='$d_pwgecos'
+d_pwpasswd='$d_pwpasswd'
 d_pwquota='$d_pwquota'
+d_readdir64='$d_readdir64'
 d_readdir='$d_readdir'
 d_readlink='$d_readlink'
 d_rename='$d_rename'
@@ -11347,6 +12363,7 @@ d_safebcpy='$d_safebcpy'
 d_safemcpy='$d_safemcpy'
 d_sanemcmp='$d_sanemcmp'
 d_sched_yield='$d_sched_yield'
+d_seekdir64='$d_seekdir64'
 d_seekdir='$d_seekdir'
 d_select='$d_select'
 d_sem='$d_sem'
@@ -11357,6 +12374,7 @@ d_semget='$d_semget'
 d_semop='$d_semop'
 d_setegid='$d_setegid'
 d_seteuid='$d_seteuid'
+d_setgrent='$d_setgrent'
 d_setgrps='$d_setgrps'
 d_sethent='$d_sethent'
 d_setlinebuf='$d_setlinebuf'
@@ -11367,6 +12385,7 @@ d_setpgid='$d_setpgid'
 d_setpgrp2='$d_setpgrp2'
 d_setpgrp='$d_setpgrp'
 d_setprior='$d_setprior'
+d_setpwent='$d_setpwent'
 d_setregid='$d_setregid'
 d_setresgid='$d_setresgid'
 d_setresuid='$d_setresuid'
@@ -11387,11 +12406,13 @@ d_sigaction='$d_sigaction'
 d_sigsetjmp='$d_sigsetjmp'
 d_socket='$d_socket'
 d_sockpair='$d_sockpair'
+d_stat64='$d_stat64'
 d_statblks='$d_statblks'
 d_stdio_cnt_lval='$d_stdio_cnt_lval'
 d_stdio_ptr_lval='$d_stdio_ptr_lval'
 d_stdiobase='$d_stdiobase'
 d_stdstdio='$d_stdstdio'
+d_store64='$d_store64'
 d_strchr='$d_strchr'
 d_strcoll='$d_strcoll'
 d_strctcpy='$d_strctcpy'
@@ -11410,9 +12431,12 @@ d_syserrlst='$d_syserrlst'
 d_system='$d_system'
 d_tcgetpgrp='$d_tcgetpgrp'
 d_tcsetpgrp='$d_tcsetpgrp'
+d_telldir64='$d_telldir64'
 d_telldir='$d_telldir'
 d_time='$d_time'
 d_times='$d_times'
+d_tmpfile64='$d_tmpfile64'
+d_truncate64='$d_truncate64'
 d_truncate='$d_truncate'
 d_tzname='$d_tzname'
 d_umask='$d_umask'
@@ -11437,8 +12461,10 @@ direntrytype='$direntrytype'
 dlext='$dlext'
 dlsrc='$dlsrc'
 doublesize='$doublesize'
+drand01='$drand01'
 dynamic_ext='$dynamic_ext'
 eagain='$eagain'
+ebcdic='$ebcdic'
 echo='$echo'
 egrep='$egrep'
 emacs='$emacs'
@@ -11465,6 +12491,7 @@ h_sysfile='$h_sysfile'
 hint='$hint'
 hostcat='$hostcat'
 huge='$huge'
+i_arpainet='$i_arpainet'
 i_bsdioctl='$i_bsdioctl'
 i_db='$i_db'
 i_dbm='$i_dbm'
@@ -11475,6 +12502,7 @@ i_fcntl='$i_fcntl'
 i_float='$i_float'
 i_gdbm='$i_gdbm'
 i_grp='$i_grp'
+i_inttypes='$i_inttypes'
 i_limits='$i_limits'
 i_locale='$i_locale'
 i_malloc='$i_malloc'
@@ -11492,6 +12520,7 @@ i_stdarg='$i_stdarg'
 i_stddef='$i_stddef'
 i_stdlib='$i_stdlib'
 i_string='$i_string'
+i_sysaccess='$i_sysaccess'
 i_sysdir='$i_sysdir'
 i_sysfile='$i_sysfile'
 i_sysfilio='$i_sysfilio'
@@ -11500,6 +12529,7 @@ i_sysioctl='$i_sysioctl'
 i_sysndir='$i_sysndir'
 i_sysparam='$i_sysparam'
 i_sysresrc='$i_sysresrc'
+i_syssecrt='$i_syssecrt'
 i_sysselct='$i_sysselct'
 i_syssockio='$i_syssockio'
 i_sysstat='$i_sysstat'
@@ -11518,6 +12548,7 @@ i_values='$i_values'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
+ignore_versioned_solibs='$ignore_versioned_solibs'
 incpath='$incpath'
 inews='$inews'
 installarchlib='$installarchlib'
@@ -11555,6 +12586,7 @@ longsize='$longsize'
 lp='$lp'
 lpr='$lpr'
 ls='$ls'
+lseeksize='$lseeksize'
 lseektype='$lseektype'
 mail='$mail'
 mailx='$mailx'
@@ -11589,6 +12621,7 @@ netdb_net_type='$netdb_net_type'
 nm='$nm'
 nm_opt='$nm_opt'
 nm_so_opt='$nm_so_opt'
+nonxs_ext='$nonxs_ext'
 nroff='$nroff'
 o_nonblock='$o_nonblock'
 obj_ext='$obj_ext'
@@ -11604,7 +12637,6 @@ path_sep='$path_sep'
 perl='$perl'
 perladmin='$perladmin'
 perlpath='$perlpath'
-nonxs_ext='$nonxs_ext'
 pg='$pg'
 phostname='$phostname'
 pidtype='$pidtype'
@@ -11616,16 +12648,22 @@ prefixexp='$prefixexp'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
+pthread_setdetachstate_pointer='$pthread_setdetachstate_pointer'
 ptrsize='$ptrsize'
 randbits='$randbits'
+randfunc='$randfunc'
+randseedtype='$randseedtype'
 ranlib='$ranlib'
 rd_nodata='$rd_nodata'
 rm='$rm'
 rmail='$rmail'
 runnm='$runnm'
+sched_yield='$sched_yield'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
 sed='$sed'
+seedfunc='$seedfunc'
+selectminbits='$selectminbits'
 selecttype='$selecttype'
 sendmail='$sendmail'
 sh='$sh'
@@ -11678,11 +12716,14 @@ timeincl='$timeincl'
 timetype='$timetype'
 touch='$touch'
 tr='$tr'
+trnl='$trnl'
 troff='$troff'
 uidtype='$uidtype'
 uname='$uname'
 uniq='$uniq'
+use64bits='$use64bits'
 usedl='$usedl'
+usemultiplicity='$usemultiplicity'
 usemymalloc='$usemymalloc'
 usenm='$usenm'
 useopcode='$useopcode'
@@ -11694,6 +12735,7 @@ usethreads='$usethreads'
 usevfork='$usevfork'
 usrinc='$usrinc'
 uuname='$uuname'
+version='$version'
 vi='$vi'
 voidflags='$voidflags'
 xlibpth='$xlibpth'
@@ -11776,26 +12818,26 @@ if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
        *)
                $cat <<EOM
 
-Now you need to generate make dependencies by running "make depend".
-You might prefer to run it in background: "make depend > makedepend.out &"
+Now you need to generate make dependencies by running "$make depend".
+You might prefer to run it in background: "$make depend > makedepend.out &"
 It can take a while, so you might not want to run it right now.
 
 EOM
                ;;
        esac
-       rp="Run make depend now?"
+       rp="Run $make depend now?"
        . UU/myread
        case "$ans" in
        y*)
-               make depend && echo "Now you must run a make."
+               $make depend && echo "Now you must run a $make."
                ;;
        *)
-               echo "You must run 'make depend' then 'make'."
+               echo "You must run '$make depend' then '$make'."
                ;;
        esac
 elif test -f [Mm]akefile; then
        echo " "
-       echo "Now you must run a make."
+       echo "Now you must run a $make."
 else
        echo "Done."
 fi