Use (file PerlIO::Layer 'perlio') rather than $Config{useperlio}
[p5sagit/p5-mst-13.2.git] / Configure
index 4cdd0c2..011cdc0 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Wed Mar 20 05:22:55 EET 2002 [metaconfig 3.0 PL70]
+# Generated on Wed Apr 24 03:05:12 EET DST 2002 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
@@ -2387,7 +2387,16 @@ EOM
                     fi
                 fi  
                 case "$ans" in
-                [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
+                [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
+                       if $test -f usethreads.cbu; then
+                           $cat >&4 <<EOM 
+
+*** However, any setting of the C compiler flags (e.g. for thread support)
+*** has been lost.  It may be necessary to pass -Dcc=gcc to Configure
+*** (together with e.g. -Dusethreads).
+
+EOM
+                       fi;;
                 esac
             fi
         fi
@@ -3066,6 +3075,9 @@ EOM
                        ;;
                next*) osname=next ;;
                nonstop-ux) osname=nonstopux ;;
+               openbsd) osname=openbsd
+                       osvers="$3"
+                       ;;
                POSIX-BC | posix-bc ) osname=posix-bc
                        osvers="$3"
                        ;;
@@ -3412,7 +3424,13 @@ esac'
 
 case "$usethreads" in
 $define|true|[yY]*)     dflt='y';;
-*) dflt='n';;
+*)     # Catch case where user specified ithreads or 5005threads but
+       # forgot -Dusethreads (A.D. 4/2002)
+       case "$useithreads$use5005threads" in
+       *$define*)      dflt='y' ;;
+       *)      dflt='n';;
+       esac
+       ;;
 esac
 cat <<EOM
 
@@ -5690,7 +5708,7 @@ done >libc.tmp
 $echo $n ".$c"
 $grep fprintf libc.tmp > libc.ptf
 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
-xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
+xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4'
 xxx='[ADTSIW]'
 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
        eval $xscan;\
@@ -8378,6 +8396,12 @@ esac
 set versiononly
 eval $setvar
 
+case "$versiononly" in
+"$define") inc_version_list=''
+           inc_version_list_init=0
+           ;;
+esac
+
 : figure out how to guarantee perl startup
 case "$startperl" in
 '')
@@ -9066,6 +9090,10 @@ eval $inlibc
 set alarm d_alarm
 eval $inlibc
 
+: see if POSIX threads are available
+set pthread.h i_pthread
+eval $inhdr
+
 : define a fucntion to check prototypes
 $cat > protochk <<EOSH
 $startsh
@@ -9075,6 +9103,9 @@ ccflags="$ccflags"
 prototype="$prototype"
 define="$define"
 rm=$rm
+usethreads=$usethreads
+i_pthread=$i_pthread
+pthread_h_first=$pthread_h_first
 EOSH
 
 $cat >> protochk <<'EOSH'
@@ -9087,6 +9118,14 @@ while test $# -ge 2; do
                $define) echo "#include <$2>" >> try.c ;;
                literal) echo "$2" >> try.c ;;
        esac
+    # Extra magic for the benefit of systems that need pthread.h
+    # to be included early to correctly detect threadsafe functions.
+    # Such functions must guarantee themselves, though, that the usethreads
+    # and i_pthread have been defined, before calling protochk.
+    if test "$usethreads" = "$define" -a "$i_pthread" = "$define" -a "$pthread_h_first" = "$define" -a "$pthread_h_done" = ""; then
+       echo "#include <pthread.h>" >> try.c
+       pthread_h_done=yes
+    fi
     shift 2
 done
 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
@@ -9275,7 +9314,7 @@ set asctime_r d_asctime_r
 eval $inlibc
 case "$d_asctime_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h"
+       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
        case "$d_asctime_r_proto:$usethreads" in
        ":define")      d_asctime_r_proto=define
                set d_asctime_r_proto asctime_r $hdrs
@@ -9301,7 +9340,7 @@ case "$d_asctime_r" in
        ./protochk "extern $try" $hdrs && asctime_r_proto=I_SBI ;;
        esac
        case "$asctime_r_proto" in
-       '')     d_asctime_r=undef
+       ''|0)   d_asctime_r=undef
                asctime_r_proto=0
                echo "Disabling asctime_r, cannot determine prototype." >&4 ;;
        * )     case "$asctime_r_proto" in
@@ -9314,6 +9353,8 @@ case "$d_asctime_r" in
        *)      case "$usethreads" in
                define) echo "asctime_r has no prototype, not using it." >&4 ;;
                esac
+               d_asctime_r=undef
+               asctime_r_proto=0
                ;;
        esac
        ;;
@@ -9949,7 +9990,7 @@ case "$d_crypt_r" in
        ./protochk "extern $try" $hdrs && crypt_r_proto=B_CCD ;;
        esac
        case "$crypt_r_proto" in
-       '')     d_crypt_r=undef
+       ''|0)   d_crypt_r=undef
                crypt_r_proto=0
                echo "Disabling crypt_r, cannot determine prototype." >&4 ;;
        * )     case "$crypt_r_proto" in
@@ -9962,6 +10003,8 @@ case "$d_crypt_r" in
        *)      case "$usethreads" in
                define) echo "crypt_r has no prototype, not using it." >&4 ;;
                esac
+               d_crypt_r=undef
+               crypt_r_proto=0
                ;;
        esac
        ;;
@@ -9986,7 +10029,7 @@ set ctermid_r d_ctermid_r
 eval $inlibc
 case "$d_ctermid_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_stdio stdio.h"
+       hdrs="$i_systypes sys/types.h define stdio.h "
        case "$d_ctermid_r_proto:$usethreads" in
        ":define")      d_ctermid_r_proto=define
                set d_ctermid_r_proto ctermid_r $hdrs
@@ -10000,7 +10043,7 @@ case "$d_ctermid_r" in
        ./protochk "extern $try" $hdrs && ctermid_r_proto=B_B ;;
        esac
        case "$ctermid_r_proto" in
-       '')     d_ctermid_r=undef
+       ''|0)   d_ctermid_r=undef
                ctermid_r_proto=0
                echo "Disabling ctermid_r, cannot determine prototype." >&4 ;;
        * )     case "$ctermid_r_proto" in
@@ -10013,6 +10056,8 @@ case "$d_ctermid_r" in
        *)      case "$usethreads" in
                define) echo "ctermid_r has no prototype, not using it." >&4 ;;
                esac
+               d_ctermid_r=undef
+               ctermid_r_proto=0
                ;;
        esac
        ;;
@@ -10025,7 +10070,7 @@ set ctime_r d_ctime_r
 eval $inlibc
 case "$d_ctime_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h"
+       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
        case "$d_ctime_r_proto:$usethreads" in
        ":define")      d_ctime_r_proto=define
                set d_ctime_r_proto ctime_r $hdrs
@@ -10051,7 +10096,7 @@ case "$d_ctime_r" in
        ./protochk "extern $try" $hdrs && ctime_r_proto=I_SBI ;;
        esac
        case "$ctime_r_proto" in
-       '')     d_ctime_r=undef
+       ''|0)   d_ctime_r=undef
                ctime_r_proto=0
                echo "Disabling ctime_r, cannot determine prototype." >&4 ;;
        * )     case "$ctime_r_proto" in
@@ -10064,6 +10109,8 @@ case "$d_ctime_r" in
        *)      case "$usethreads" in
                define) echo "ctime_r has no prototype, not using it." >&4 ;;
                esac
+               d_ctime_r=undef
+               ctime_r_proto=0
                ;;
        esac
        ;;
@@ -10410,7 +10457,7 @@ case "$d_drand48_r" in
        ./protochk "extern $try" $hdrs && drand48_r_proto=I_ST ;;
        esac
        case "$drand48_r_proto" in
-       '')     d_drand48_r=undef
+       ''|0)   d_drand48_r=undef
                drand48_r_proto=0
                echo "Disabling drand48_r, cannot determine prototype." >&4 ;;
        * )     case "$drand48_r_proto" in
@@ -10423,6 +10470,8 @@ case "$d_drand48_r" in
        *)      case "$usethreads" in
                define) echo "drand48_r has no prototype, not using it." >&4 ;;
                esac
+               d_drand48_r=undef
+               drand48_r_proto=0
                ;;
        esac
        ;;
@@ -10495,7 +10544,7 @@ case "$d_endgrent_r" in
        ./protochk "extern $try" $hdrs && endgrent_r_proto=V_H ;;
        esac
        case "$endgrent_r_proto" in
-       '')     d_endgrent_r=undef
+       ''|0)   d_endgrent_r=undef
                endgrent_r_proto=0
                echo "Disabling endgrent_r, cannot determine prototype." >&4 ;;
        * )     case "$endgrent_r_proto" in
@@ -10508,6 +10557,8 @@ case "$d_endgrent_r" in
        *)      case "$usethreads" in
                define) echo "endgrent_r has no prototype, not using it." >&4 ;;
                esac
+               d_endgrent_r=undef
+               endgrent_r_proto=0
                ;;
        esac
        ;;
@@ -10539,14 +10590,14 @@ case "$d_endhostent_r" in
        define)
        case "$endhostent_r_proto" in
        ''|0) try='int endhostent_r(struct hostent_data*);'
-       ./protochk "extern $try" $hdrs && endhostent_r_proto=I_S ;;
+       ./protochk "extern $try" $hdrs && endhostent_r_proto=I_D ;;
        esac
        case "$endhostent_r_proto" in
        ''|0) try='void endhostent_r(struct hostent_data*);'
-       ./protochk "extern $try" $hdrs && endhostent_r_proto=V_S ;;
+       ./protochk "extern $try" $hdrs && endhostent_r_proto=V_D ;;
        esac
        case "$endhostent_r_proto" in
-       '')     d_endhostent_r=undef
+       ''|0)   d_endhostent_r=undef
                endhostent_r_proto=0
                echo "Disabling endhostent_r, cannot determine prototype." >&4 ;;
        * )     case "$endhostent_r_proto" in
@@ -10559,6 +10610,8 @@ case "$d_endhostent_r" in
        *)      case "$usethreads" in
                define) echo "endhostent_r has no prototype, not using it." >&4 ;;
                esac
+               d_endhostent_r=undef
+               endhostent_r_proto=0
                ;;
        esac
        ;;
@@ -10586,14 +10639,14 @@ case "$d_endnetent_r" in
        define)
        case "$endnetent_r_proto" in
        ''|0) try='int endnetent_r(struct netent_data*);'
-       ./protochk "extern $try" $hdrs && endnetent_r_proto=I_S ;;
+       ./protochk "extern $try" $hdrs && endnetent_r_proto=I_D ;;
        esac
        case "$endnetent_r_proto" in
        ''|0) try='void endnetent_r(struct netent_data*);'
-       ./protochk "extern $try" $hdrs && endnetent_r_proto=V_S ;;
+       ./protochk "extern $try" $hdrs && endnetent_r_proto=V_D ;;
        esac
        case "$endnetent_r_proto" in
-       '')     d_endnetent_r=undef
+       ''|0)   d_endnetent_r=undef
                endnetent_r_proto=0
                echo "Disabling endnetent_r, cannot determine prototype." >&4 ;;
        * )     case "$endnetent_r_proto" in
@@ -10606,6 +10659,8 @@ case "$d_endnetent_r" in
        *)      case "$usethreads" in
                define) echo "endnetent_r has no prototype, not using it." >&4 ;;
                esac
+               d_endnetent_r=undef
+               endnetent_r_proto=0
                ;;
        esac
        ;;
@@ -10633,14 +10688,14 @@ case "$d_endprotoent_r" in
        define)
        case "$endprotoent_r_proto" in
        ''|0) try='int endprotoent_r(struct protoent_data*);'
-       ./protochk "extern $try" $hdrs && endprotoent_r_proto=I_S ;;
+       ./protochk "extern $try" $hdrs && endprotoent_r_proto=I_D ;;
        esac
        case "$endprotoent_r_proto" in
        ''|0) try='void endprotoent_r(struct protoent_data*);'
-       ./protochk "extern $try" $hdrs && endprotoent_r_proto=V_S ;;
+       ./protochk "extern $try" $hdrs && endprotoent_r_proto=V_D ;;
        esac
        case "$endprotoent_r_proto" in
-       '')     d_endprotoent_r=undef
+       ''|0)   d_endprotoent_r=undef
                endprotoent_r_proto=0
                echo "Disabling endprotoent_r, cannot determine prototype." >&4 ;;
        * )     case "$endprotoent_r_proto" in
@@ -10653,6 +10708,8 @@ case "$d_endprotoent_r" in
        *)      case "$usethreads" in
                define) echo "endprotoent_r has no prototype, not using it." >&4 ;;
                esac
+               d_endprotoent_r=undef
+               endprotoent_r_proto=0
                ;;
        esac
        ;;
@@ -10775,7 +10832,7 @@ case "$d_endpwent_r" in
        ./protochk "extern $try" $hdrs && endpwent_r_proto=V_H ;;
        esac
        case "$endpwent_r_proto" in
-       '')     d_endpwent_r=undef
+       ''|0)   d_endpwent_r=undef
                endpwent_r_proto=0
                echo "Disabling endpwent_r, cannot determine prototype." >&4 ;;
        * )     case "$endpwent_r_proto" in
@@ -10788,6 +10845,8 @@ case "$d_endpwent_r" in
        *)      case "$usethreads" in
                define) echo "endpwent_r has no prototype, not using it." >&4 ;;
                esac
+               d_endpwent_r=undef
+               endpwent_r_proto=0
                ;;
        esac
        ;;
@@ -10815,14 +10874,14 @@ case "$d_endservent_r" in
        define)
        case "$endservent_r_proto" in
        ''|0) try='int endservent_r(struct servent_data*);'
-       ./protochk "extern $try" $hdrs && endservent_r_proto=I_S ;;
+       ./protochk "extern $try" $hdrs && endservent_r_proto=I_D ;;
        esac
        case "$endservent_r_proto" in
        ''|0) try='void endservent_r(struct servent_data*);'
-       ./protochk "extern $try" $hdrs && endservent_r_proto=V_S ;;
+       ./protochk "extern $try" $hdrs && endservent_r_proto=V_D ;;
        esac
        case "$endservent_r_proto" in
-       '')     d_endservent_r=undef
+       ''|0)   d_endservent_r=undef
                endservent_r_proto=0
                echo "Disabling endservent_r, cannot determine prototype." >&4 ;;
        * )     case "$endservent_r_proto" in
@@ -10835,6 +10894,8 @@ case "$d_endservent_r" in
        *)      case "$usethreads" in
                define) echo "endservent_r has no prototype, not using it." >&4 ;;
                esac
+               d_endservent_r=undef
+               endservent_r_proto=0
                ;;
        esac
        ;;
@@ -11512,7 +11573,7 @@ case "$d_getgrent_r" in
        ./protochk "extern $try" $hdrs && getgrent_r_proto=I_SBIH ;;
        esac
        case "$getgrent_r_proto" in
-       '')     d_getgrent_r=undef
+       ''|0)   d_getgrent_r=undef
                getgrent_r_proto=0
                echo "Disabling getgrent_r, cannot determine prototype." >&4 ;;
        * )     case "$getgrent_r_proto" in
@@ -11525,6 +11586,8 @@ case "$d_getgrent_r" in
        *)      case "$usethreads" in
                define) echo "getgrent_r has no prototype, not using it." >&4 ;;
                esac
+               d_getgrent_r=undef
+               getgrent_r_proto=0
                ;;
        esac
        ;;
@@ -11563,7 +11626,7 @@ case "$d_getgrgid_r" in
        ./protochk "extern $try" $hdrs && getgrgid_r_proto=S_TSBI ;;
        esac
        case "$getgrgid_r_proto" in
-       '')     d_getgrgid_r=undef
+       ''|0)   d_getgrgid_r=undef
                getgrgid_r_proto=0
                echo "Disabling getgrgid_r, cannot determine prototype." >&4 ;;
        * )     case "$getgrgid_r_proto" in
@@ -11576,6 +11639,8 @@ case "$d_getgrgid_r" in
        *)      case "$usethreads" in
                define) echo "getgrgid_r has no prototype, not using it." >&4 ;;
                esac
+               d_getgrgid_r=undef
+               getgrgid_r_proto=0
                ;;
        esac
        ;;
@@ -11618,7 +11683,7 @@ case "$d_getgrnam_r" in
        ./protochk "extern $try" $hdrs && getgrnam_r_proto=S_CSBI ;;
        esac
        case "$getgrnam_r_proto" in
-       '')     d_getgrnam_r=undef
+       ''|0)   d_getgrnam_r=undef
                getgrnam_r_proto=0
                echo "Disabling getgrnam_r, cannot determine prototype." >&4 ;;
        * )     case "$getgrnam_r_proto" in
@@ -11631,6 +11696,8 @@ case "$d_getgrnam_r" in
        *)      case "$usethreads" in
                define) echo "getgrnam_r has no prototype, not using it." >&4 ;;
                esac
+               d_getgrnam_r=undef
+               getgrnam_r_proto=0
                ;;
        esac
        ;;
@@ -11790,7 +11857,7 @@ case "$d_gethostbyaddr_r" in
        ./protochk "extern $try" $hdrs && gethostbyaddr_r_proto=I_CII ;;
        esac
        case "$gethostbyaddr_r_proto" in
-       '')     d_gethostbyaddr_r=undef
+       ''|0)   d_gethostbyaddr_r=undef
                gethostbyaddr_r_proto=0
                echo "Disabling gethostbyaddr_r, cannot determine prototype." >&4 ;;
        * )     case "$gethostbyaddr_r_proto" in
@@ -11803,6 +11870,8 @@ case "$d_gethostbyaddr_r" in
        *)      case "$usethreads" in
                define) echo "gethostbyaddr_r has no prototype, not using it." >&4 ;;
                esac
+               d_gethostbyaddr_r=undef
+               gethostbyaddr_r_proto=0
                ;;
        esac
        ;;
@@ -11837,7 +11906,7 @@ case "$d_gethostbyname_r" in
        ./protochk "extern $try" $hdrs && gethostbyname_r_proto=I_CSD ;;
        esac
        case "$gethostbyname_r_proto" in
-       '')     d_gethostbyname_r=undef
+       ''|0)   d_gethostbyname_r=undef
                gethostbyname_r_proto=0
                echo "Disabling gethostbyname_r, cannot determine prototype." >&4 ;;
        * )     case "$gethostbyname_r_proto" in
@@ -11850,6 +11919,8 @@ case "$d_gethostbyname_r" in
        *)      case "$usethreads" in
                define) echo "gethostbyname_r has no prototype, not using it." >&4 ;;
                esac
+               d_gethostbyname_r=undef
+               gethostbyname_r_proto=0
                ;;
        esac
        ;;
@@ -11896,7 +11967,7 @@ case "$d_gethostent_r" in
        ./protochk "extern $try" $hdrs && gethostent_r_proto=I_SD ;;
        esac
        case "$gethostent_r_proto" in
-       '')     d_gethostent_r=undef
+       ''|0)   d_gethostent_r=undef
                gethostent_r_proto=0
                echo "Disabling gethostent_r, cannot determine prototype." >&4 ;;
        * )     case "$gethostent_r_proto" in
@@ -11909,6 +11980,8 @@ case "$d_gethostent_r" in
        *)      case "$usethreads" in
                define) echo "gethostent_r has no prototype, not using it." >&4 ;;
                esac
+               d_gethostent_r=undef
+               gethostent_r_proto=0
                ;;
        esac
        ;;
@@ -11960,7 +12033,7 @@ case "$d_getlogin_r" in
        ./protochk "extern $try" $hdrs && getlogin_r_proto=B_BI ;;
        esac
        case "$getlogin_r_proto" in
-       '')     d_getlogin_r=undef
+       ''|0)   d_getlogin_r=undef
                getlogin_r_proto=0
                echo "Disabling getlogin_r, cannot determine prototype." >&4 ;;
        * )     case "$getlogin_r_proto" in
@@ -11973,6 +12046,8 @@ case "$d_getlogin_r" in
        *)      case "$usethreads" in
                define) echo "getlogin_r has no prototype, not using it." >&4 ;;
                esac
+               d_getlogin_r=undef
+               getlogin_r_proto=0
                ;;
        esac
        ;;
@@ -12043,7 +12118,7 @@ case "$d_getnetbyaddr_r" in
        ./protochk "extern $try" $hdrs && getnetbyaddr_r_proto=I_IISD ;;
        esac
        case "$getnetbyaddr_r_proto" in
-       '')     d_getnetbyaddr_r=undef
+       ''|0)   d_getnetbyaddr_r=undef
                getnetbyaddr_r_proto=0
                echo "Disabling getnetbyaddr_r, cannot determine prototype." >&4 ;;
        * )     case "$getnetbyaddr_r_proto" in
@@ -12056,6 +12131,8 @@ case "$d_getnetbyaddr_r" in
        *)      case "$usethreads" in
                define) echo "getnetbyaddr_r has no prototype, not using it." >&4 ;;
                esac
+               d_getnetbyaddr_r=undef
+               getnetbyaddr_r_proto=0
                ;;
        esac
        ;;
@@ -12094,7 +12171,7 @@ case "$d_getnetbyname_r" in
        ./protochk "extern $try" $hdrs && getnetbyname_r_proto=I_CSD ;;
        esac
        case "$getnetbyname_r_proto" in
-       '')     d_getnetbyname_r=undef
+       ''|0)   d_getnetbyname_r=undef
                getnetbyname_r_proto=0
                echo "Disabling getnetbyname_r, cannot determine prototype." >&4 ;;
        * )     case "$getnetbyname_r_proto" in
@@ -12107,6 +12184,8 @@ case "$d_getnetbyname_r" in
        *)      case "$usethreads" in
                define) echo "getnetbyname_r has no prototype, not using it." >&4 ;;
                esac
+               d_getnetbyname_r=undef
+               getnetbyname_r_proto=0
                ;;
        esac
        ;;
@@ -12153,7 +12232,7 @@ case "$d_getnetent_r" in
        ./protochk "extern $try" $hdrs && getnetent_r_proto=I_SD ;;
        esac
        case "$getnetent_r_proto" in
-       '')     d_getnetent_r=undef
+       ''|0)   d_getnetent_r=undef
                getnetent_r_proto=0
                echo "Disabling getnetent_r, cannot determine prototype." >&4 ;;
        * )     case "$getnetent_r_proto" in
@@ -12166,6 +12245,8 @@ case "$d_getnetent_r" in
        *)      case "$usethreads" in
                define) echo "getnetent_r has no prototype, not using it." >&4 ;;
                esac
+               d_getnetent_r=undef
+               getnetent_r_proto=0
                ;;
        esac
        ;;
@@ -12238,7 +12319,7 @@ case "$d_getprotobyname_r" in
        ./protochk "extern $try" $hdrs && getprotobyname_r_proto=I_CSD ;;
        esac
        case "$getprotobyname_r_proto" in
-       '')     d_getprotobyname_r=undef
+       ''|0)   d_getprotobyname_r=undef
                getprotobyname_r_proto=0
                echo "Disabling getprotobyname_r, cannot determine prototype." >&4 ;;
        * )     case "$getprotobyname_r_proto" in
@@ -12251,6 +12332,8 @@ case "$d_getprotobyname_r" in
        *)      case "$usethreads" in
                define) echo "getprotobyname_r has no prototype, not using it." >&4 ;;
                esac
+               d_getprotobyname_r=undef
+               getprotobyname_r_proto=0
                ;;
        esac
        ;;
@@ -12285,7 +12368,7 @@ case "$d_getprotobynumber_r" in
        ./protochk "extern $try" $hdrs && getprotobynumber_r_proto=I_ISD ;;
        esac
        case "$getprotobynumber_r_proto" in
-       '')     d_getprotobynumber_r=undef
+       ''|0)   d_getprotobynumber_r=undef
                getprotobynumber_r_proto=0
                echo "Disabling getprotobynumber_r, cannot determine prototype." >&4 ;;
        * )     case "$getprotobynumber_r_proto" in
@@ -12298,6 +12381,8 @@ case "$d_getprotobynumber_r" in
        *)      case "$usethreads" in
                define) echo "getprotobynumber_r has no prototype, not using it." >&4 ;;
                esac
+               d_getprotobynumber_r=undef
+               getprotobynumber_r_proto=0
                ;;
        esac
        ;;
@@ -12336,7 +12421,7 @@ case "$d_getprotoent_r" in
        ./protochk "extern $try" $hdrs && getprotoent_r_proto=I_SD ;;
        esac
        case "$getprotoent_r_proto" in
-       '')     d_getprotoent_r=undef
+       ''|0)   d_getprotoent_r=undef
                getprotoent_r_proto=0
                echo "Disabling getprotoent_r, cannot determine prototype." >&4 ;;
        * )     case "$getprotoent_r_proto" in
@@ -12349,6 +12434,8 @@ case "$d_getprotoent_r" in
        *)      case "$usethreads" in
                define) echo "getprotoent_r has no prototype, not using it." >&4 ;;
                esac
+               d_getprotoent_r=undef
+               getprotoent_r_proto=0
                ;;
        esac
        ;;
@@ -12408,7 +12495,7 @@ case "$d_getpwent_r" in
        ./protochk "extern $try" $hdrs && getpwent_r_proto=I_SBIH ;;
        esac
        case "$getpwent_r_proto" in
-       '')     d_getpwent_r=undef
+       ''|0)   d_getpwent_r=undef
                getpwent_r_proto=0
                echo "Disabling getpwent_r, cannot determine prototype." >&4 ;;
        * )     case "$getpwent_r_proto" in
@@ -12421,6 +12508,8 @@ case "$d_getpwent_r" in
        *)      case "$usethreads" in
                define) echo "getpwent_r has no prototype, not using it." >&4 ;;
                esac
+               d_getpwent_r=undef
+               getpwent_r_proto=0
                ;;
        esac
        ;;
@@ -12459,7 +12548,7 @@ case "$d_getpwnam_r" in
        ./protochk "extern $try" $hdrs && getpwnam_r_proto=I_CSBI ;;
        esac
        case "$getpwnam_r_proto" in
-       '')     d_getpwnam_r=undef
+       ''|0)   d_getpwnam_r=undef
                getpwnam_r_proto=0
                echo "Disabling getpwnam_r, cannot determine prototype." >&4 ;;
        * )     case "$getpwnam_r_proto" in
@@ -12472,6 +12561,8 @@ case "$d_getpwnam_r" in
        *)      case "$usethreads" in
                define) echo "getpwnam_r has no prototype, not using it." >&4 ;;
                esac
+               d_getpwnam_r=undef
+               getpwnam_r_proto=0
                ;;
        esac
        ;;
@@ -12510,7 +12601,7 @@ case "$d_getpwuid_r" in
        ./protochk "extern $try" $hdrs && getpwuid_r_proto=S_TSBI ;;
        esac
        case "$getpwuid_r_proto" in
-       '')     d_getpwuid_r=undef
+       ''|0)   d_getpwuid_r=undef
                getpwuid_r_proto=0
                echo "Disabling getpwuid_r, cannot determine prototype." >&4 ;;
        * )     case "$getpwuid_r_proto" in
@@ -12523,6 +12614,8 @@ case "$d_getpwuid_r" in
        *)      case "$usethreads" in
                define) echo "getpwuid_r has no prototype, not using it." >&4 ;;
                esac
+               d_getpwuid_r=undef
+               getpwuid_r_proto=0
                ;;
        esac
        ;;
@@ -12570,7 +12663,7 @@ case "$d_getservbyname_r" in
        ./protochk "extern $try" $hdrs && getservbyname_r_proto=I_CCSD ;;
        esac
        case "$getservbyname_r_proto" in
-       '')     d_getservbyname_r=undef
+       ''|0)   d_getservbyname_r=undef
                getservbyname_r_proto=0
                echo "Disabling getservbyname_r, cannot determine prototype." >&4 ;;
        * )     case "$getservbyname_r_proto" in
@@ -12583,6 +12676,8 @@ case "$d_getservbyname_r" in
        *)      case "$usethreads" in
                define) echo "getservbyname_r has no prototype, not using it." >&4 ;;
                esac
+               d_getservbyname_r=undef
+               getservbyname_r_proto=0
                ;;
        esac
        ;;
@@ -12617,7 +12712,7 @@ case "$d_getservbyport_r" in
        ./protochk "extern $try" $hdrs && getservbyport_r_proto=I_ICSD ;;
        esac
        case "$getservbyport_r_proto" in
-       '')     d_getservbyport_r=undef
+       ''|0)   d_getservbyport_r=undef
                getservbyport_r_proto=0
                echo "Disabling getservbyport_r, cannot determine prototype." >&4 ;;
        * )     case "$getservbyport_r_proto" in
@@ -12630,6 +12725,8 @@ case "$d_getservbyport_r" in
        *)      case "$usethreads" in
                define) echo "getservbyport_r has no prototype, not using it." >&4 ;;
                esac
+               d_getservbyport_r=undef
+               getservbyport_r_proto=0
                ;;
        esac
        ;;
@@ -12668,7 +12765,7 @@ case "$d_getservent_r" in
        ./protochk "extern $try" $hdrs && getservent_r_proto=I_SD ;;
        esac
        case "$getservent_r_proto" in
-       '')     d_getservent_r=undef
+       ''|0)   d_getservent_r=undef
                getservent_r_proto=0
                echo "Disabling getservent_r, cannot determine prototype." >&4 ;;
        * )     case "$getservent_r_proto" in
@@ -12681,6 +12778,8 @@ case "$d_getservent_r" in
        *)      case "$usethreads" in
                define) echo "getservent_r has no prototype, not using it." >&4 ;;
                esac
+               d_getservent_r=undef
+               getservent_r_proto=0
                ;;
        esac
        ;;
@@ -12724,7 +12823,7 @@ case "$d_getspnam_r" in
        ./protochk "extern $try" $hdrs && getspnam_r_proto=S_CSBI ;;
        esac
        case "$getspnam_r_proto" in
-       '')     d_getspnam_r=undef
+       ''|0)   d_getspnam_r=undef
                getspnam_r_proto=0
                echo "Disabling getspnam_r, cannot determine prototype." >&4 ;;
        * )     case "$getspnam_r_proto" in
@@ -12737,6 +12836,8 @@ case "$d_getspnam_r" in
        *)      case "$usethreads" in
                define) echo "getspnam_r has no prototype, not using it." >&4 ;;
                esac
+               d_getspnam_r=undef
+               getspnam_r_proto=0
                ;;
        esac
        ;;
@@ -12768,7 +12869,7 @@ set gmtime_r d_gmtime_r
 eval $inlibc
 case "$d_gmtime_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h"
+       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
        case "$d_gmtime_r_proto:$usethreads" in
        ":define")      d_gmtime_r_proto=define
                set d_gmtime_r_proto gmtime_r $hdrs
@@ -12786,7 +12887,7 @@ case "$d_gmtime_r" in
        ./protochk "extern $try" $hdrs && gmtime_r_proto=I_TS ;;
        esac
        case "$gmtime_r_proto" in
-       '')     d_gmtime_r=undef
+       ''|0)   d_gmtime_r=undef
                gmtime_r_proto=0
                echo "Disabling gmtime_r, cannot determine prototype." >&4 ;;
        * )     case "$gmtime_r_proto" in
@@ -12799,6 +12900,8 @@ case "$d_gmtime_r" in
        *)      case "$usethreads" in
                define) echo "gmtime_r has no prototype, not using it." >&4 ;;
                esac
+               d_gmtime_r=undef
+               gmtime_r_proto=0
                ;;
        esac
        ;;
@@ -13006,7 +13109,7 @@ set localtime_r d_localtime_r
 eval $inlibc
 case "$d_localtime_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h"
+       hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
        case "$d_localtime_r_proto:$usethreads" in
        ":define")      d_localtime_r_proto=define
                set d_localtime_r_proto localtime_r $hdrs
@@ -13024,7 +13127,7 @@ case "$d_localtime_r" in
        ./protochk "extern $try" $hdrs && localtime_r_proto=I_TS ;;
        esac
        case "$localtime_r_proto" in
-       '')     d_localtime_r=undef
+       ''|0)   d_localtime_r=undef
                localtime_r_proto=0
                echo "Disabling localtime_r, cannot determine prototype." >&4 ;;
        * )     case "$localtime_r_proto" in
@@ -13037,6 +13140,8 @@ case "$d_localtime_r" in
        *)      case "$usethreads" in
                define) echo "localtime_r has no prototype, not using it." >&4 ;;
                esac
+               d_localtime_r=undef
+               localtime_r_proto=0
                ;;
        esac
        ;;
@@ -13560,13 +13665,6 @@ $rm -f try.* try
 set d_off64_t
 eval $setvar
 
-: see if POSIX threads are available
-set pthread.h i_pthread
-eval $inhdr
-
-
-
-
 : how to create joinable pthreads
 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
        echo " "
@@ -13785,7 +13883,7 @@ case "$d_random_r" in
        ./protochk "extern $try" $hdrs && random_r_proto=I_TS ;;
        esac
        case "$random_r_proto" in
-       '')     d_random_r=undef
+       ''|0)   d_random_r=undef
                random_r_proto=0
                echo "Disabling random_r, cannot determine prototype." >&4 ;;
        * )     case "$random_r_proto" in
@@ -13798,6 +13896,8 @@ case "$d_random_r" in
        *)      case "$usethreads" in
                define) echo "random_r has no prototype, not using it." >&4 ;;
                esac
+               d_random_r=undef
+               random_r_proto=0
                ;;
        esac
        ;;
@@ -13838,7 +13938,7 @@ case "$d_readdir64_r" in
        ./protochk "extern $try" $hdrs && readdir64_r_proto=I_TS ;;
        esac
        case "$readdir64_r_proto" in
-       '')     d_readdir64_r=undef
+       ''|0)   d_readdir64_r=undef
                readdir64_r_proto=0
                echo "Disabling readdir64_r, cannot determine prototype." >&4 ;;
        * )     case "$readdir64_r_proto" in
@@ -13851,6 +13951,8 @@ case "$d_readdir64_r" in
        *)      case "$usethreads" in
                define) echo "readdir64_r has no prototype, not using it." >&4 ;;
                esac
+               d_readdir64_r=undef
+               readdir64_r_proto=0
                ;;
        esac
        ;;
@@ -13881,7 +13983,7 @@ case "$d_readdir_r" in
        ./protochk "extern $try" $hdrs && readdir_r_proto=I_TS ;;
        esac
        case "$readdir_r_proto" in
-       '')     d_readdir_r=undef
+       ''|0)   d_readdir_r=undef
                readdir_r_proto=0
                echo "Disabling readdir_r, cannot determine prototype." >&4 ;;
        * )     case "$readdir_r_proto" in
@@ -13894,6 +13996,8 @@ case "$d_readdir_r" in
        *)      case "$usethreads" in
                define) echo "readdir_r has no prototype, not using it." >&4 ;;
                esac
+               d_readdir_r=undef
+               readdir_r_proto=0
                ;;
        esac
        ;;
@@ -14428,7 +14532,7 @@ case "$d_setgrent_r" in
        ./protochk "extern $try" $hdrs && setgrent_r_proto=V_H ;;
        esac
        case "$setgrent_r_proto" in
-       '')     d_setgrent_r=undef
+       ''|0)   d_setgrent_r=undef
                setgrent_r_proto=0
                echo "Disabling setgrent_r, cannot determine prototype." >&4 ;;
        * )     case "$setgrent_r_proto" in
@@ -14441,6 +14545,8 @@ case "$d_setgrent_r" in
        *)      case "$usethreads" in
                define) echo "setgrent_r has no prototype, not using it." >&4 ;;
                esac
+               d_setgrent_r=undef
+               setgrent_r_proto=0
                ;;
        esac
        ;;
@@ -14475,7 +14581,7 @@ case "$d_sethostent_r" in
        ./protochk "extern $try" $hdrs && sethostent_r_proto=V_ID ;;
        esac
        case "$sethostent_r_proto" in
-       '')     d_sethostent_r=undef
+       ''|0)   d_sethostent_r=undef
                sethostent_r_proto=0
                echo "Disabling sethostent_r, cannot determine prototype." >&4 ;;
        * )     case "$sethostent_r_proto" in
@@ -14488,6 +14594,8 @@ case "$d_sethostent_r" in
        *)      case "$usethreads" in
                define) echo "sethostent_r has no prototype, not using it." >&4 ;;
                esac
+               d_sethostent_r=undef
+               sethostent_r_proto=0
                ;;
        esac
        ;;
@@ -14530,7 +14638,7 @@ case "$d_setlocale_r" in
        ./protochk "extern $try" $hdrs && setlocale_r_proto=I_ICBI ;;
        esac
        case "$setlocale_r_proto" in
-       '')     d_setlocale_r=undef
+       ''|0)   d_setlocale_r=undef
                setlocale_r_proto=0
                echo "Disabling setlocale_r, cannot determine prototype." >&4 ;;
        * )     case "$setlocale_r_proto" in
@@ -14543,6 +14651,8 @@ case "$d_setlocale_r" in
        *)      case "$usethreads" in
                define) echo "setlocale_r has no prototype, not using it." >&4 ;;
                esac
+               d_setlocale_r=undef
+               setlocale_r_proto=0
                ;;
        esac
        ;;
@@ -14577,7 +14687,7 @@ case "$d_setnetent_r" in
        ./protochk "extern $try" $hdrs && setnetent_r_proto=V_ID ;;
        esac
        case "$setnetent_r_proto" in
-       '')     d_setnetent_r=undef
+       ''|0)   d_setnetent_r=undef
                setnetent_r_proto=0
                echo "Disabling setnetent_r, cannot determine prototype." >&4 ;;
        * )     case "$setnetent_r_proto" in
@@ -14590,6 +14700,8 @@ case "$d_setnetent_r" in
        *)      case "$usethreads" in
                define) echo "setnetent_r has no prototype, not using it." >&4 ;;
                esac
+               d_setnetent_r=undef
+               setnetent_r_proto=0
                ;;
        esac
        ;;
@@ -14640,7 +14752,7 @@ case "$d_setprotoent_r" in
        ./protochk "extern $try" $hdrs && setprotoent_r_proto=V_ID ;;
        esac
        case "$setprotoent_r_proto" in
-       '')     d_setprotoent_r=undef
+       ''|0)   d_setprotoent_r=undef
                setprotoent_r_proto=0
                echo "Disabling setprotoent_r, cannot determine prototype." >&4 ;;
        * )     case "$setprotoent_r_proto" in
@@ -14653,6 +14765,8 @@ case "$d_setprotoent_r" in
        *)      case "$usethreads" in
                define) echo "setprotoent_r has no prototype, not using it." >&4 ;;
                esac
+               d_setprotoent_r=undef
+               setprotoent_r_proto=0
                ;;
        esac
        ;;
@@ -14687,7 +14801,7 @@ case "$d_setpwent_r" in
        ./protochk "extern $try" $hdrs && setpwent_r_proto=V_H ;;
        esac
        case "$setpwent_r_proto" in
-       '')     d_setpwent_r=undef
+       ''|0)   d_setpwent_r=undef
                setpwent_r_proto=0
                echo "Disabling setpwent_r, cannot determine prototype." >&4 ;;
        * )     case "$setpwent_r_proto" in
@@ -14700,6 +14814,8 @@ case "$d_setpwent_r" in
        *)      case "$usethreads" in
                define) echo "setpwent_r has no prototype, not using it." >&4 ;;
                esac
+               d_setpwent_r=undef
+               setpwent_r_proto=0
                ;;
        esac
        ;;
@@ -14754,7 +14870,7 @@ case "$d_setservent_r" in
        ./protochk "extern $try" $hdrs && setservent_r_proto=V_ID ;;
        esac
        case "$setservent_r_proto" in
-       '')     d_setservent_r=undef
+       ''|0)   d_setservent_r=undef
                setservent_r_proto=0
                echo "Disabling setservent_r, cannot determine prototype." >&4 ;;
        * )     case "$setservent_r_proto" in
@@ -14767,6 +14883,8 @@ case "$d_setservent_r" in
        *)      case "$usethreads" in
                define) echo "setservent_r has no prototype, not using it." >&4 ;;
                esac
+               d_setservent_r=undef
+               setservent_r_proto=0
                ;;
        esac
        ;;
@@ -15048,7 +15166,7 @@ case "$d_srand48_r" in
        ./protochk "extern $try" $hdrs && srand48_r_proto=I_LS ;;
        esac
        case "$srand48_r_proto" in
-       '')     d_srand48_r=undef
+       ''|0)   d_srand48_r=undef
                srand48_r_proto=0
                echo "Disabling srand48_r, cannot determine prototype." >&4 ;;
        * )     case "$srand48_r_proto" in
@@ -15061,6 +15179,8 @@ case "$d_srand48_r" in
        *)      case "$usethreads" in
                define) echo "srand48_r has no prototype, not using it." >&4 ;;
                esac
+               d_srand48_r=undef
+               srand48_r_proto=0
                ;;
        esac
        ;;
@@ -15087,7 +15207,7 @@ case "$d_srandom_r" in
        ./protochk "extern $try" $hdrs && srandom_r_proto=I_TS ;;
        esac
        case "$srandom_r_proto" in
-       '')     d_srandom_r=undef
+       ''|0)   d_srandom_r=undef
                srandom_r_proto=0
                echo "Disabling srandom_r, cannot determine prototype." >&4 ;;
        * )     case "$srandom_r_proto" in
@@ -15100,6 +15220,8 @@ case "$d_srandom_r" in
        *)      case "$usethreads" in
                define) echo "srandom_r has no prototype, not using it." >&4 ;;
                esac
+               d_srandom_r=undef
+               srandom_r_proto=0
                ;;
        esac
        ;;
@@ -15533,7 +15655,7 @@ case "$d_strerror_r" in
        ./protochk "extern $try" $hdrs && strerror_r_proto=B_IBW ;;
        esac
        case "$strerror_r_proto" in
-       '')     d_strerror_r=undef
+       ''|0)   d_strerror_r=undef
                strerror_r_proto=0
                echo "Disabling strerror_r, cannot determine prototype." >&4 ;;
        * )     case "$strerror_r_proto" in
@@ -15546,6 +15668,8 @@ case "$d_strerror_r" in
        *)      case "$usethreads" in
                define) echo "strerror_r has no prototype, not using it." >&4 ;;
                esac
+               d_strerror_r=undef
+               strerror_r_proto=0
                ;;
        esac
        ;;
@@ -15853,6 +15977,24 @@ echo " "
 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
 eval $hasproto
 
+: see if time exists
+echo " "
+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
+
 : see if this is a sys/times.h system
 set sys/times.h i_systimes
 eval $inhdr
@@ -15880,7 +16022,7 @@ set tmpnam_r d_tmpnam_r
 eval $inlibc
 case "$d_tmpnam_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_stdio stdio.h"
+       hdrs="$i_systypes sys/types.h define stdio.h "
        case "$d_tmpnam_r_proto:$usethreads" in
        ":define")      d_tmpnam_r_proto=define
                set d_tmpnam_r_proto tmpnam_r $hdrs
@@ -15894,7 +16036,7 @@ case "$d_tmpnam_r" in
        ./protochk "extern $try" $hdrs && tmpnam_r_proto=B_B ;;
        esac
        case "$tmpnam_r_proto" in
-       '')     d_tmpnam_r=undef
+       ''|0)   d_tmpnam_r=undef
                tmpnam_r_proto=0
                echo "Disabling tmpnam_r, cannot determine prototype." >&4 ;;
        * )     case "$tmpnam_r_proto" in
@@ -15907,6 +16049,8 @@ case "$d_tmpnam_r" in
        *)      case "$usethreads" in
                define) echo "tmpnam_r has no prototype, not using it." >&4 ;;
                esac
+               d_tmpnam_r=undef
+               tmpnam_r_proto=0
                ;;
        esac
        ;;
@@ -15945,7 +16089,7 @@ case "$d_ttyname_r" in
        ./protochk "extern $try" $hdrs && ttyname_r_proto=B_IBI ;;
        esac
        case "$ttyname_r_proto" in
-       '')     d_ttyname_r=undef
+       ''|0)   d_ttyname_r=undef
                ttyname_r_proto=0
                echo "Disabling ttyname_r, cannot determine prototype." >&4 ;;
        * )     case "$ttyname_r_proto" in
@@ -15958,6 +16102,8 @@ case "$d_ttyname_r" in
        *)      case "$usethreads" in
                define) echo "ttyname_r has no prototype, not using it." >&4 ;;
                esac
+               d_ttyname_r=undef
+               ttyname_r_proto=0
                ;;
        esac
        ;;
@@ -15984,7 +16130,7 @@ case "$multiarch" in
 ''|[nN]*) multiarch="$undef" ;;
 esac
 
-: check for ordering of bytes in a long
+: check for ordering of bytes in a UV
 echo " "
 case "$usecrosscompile$multiarch" in
 *$define*)
@@ -16007,21 +16153,23 @@ an Alpha will report 12345678. If the test program works the default is
 probably right.
 I'm now running the test program...
 EOM
-               $cat >try.c <<'EOCP'
+               $cat >try.c <<EOCP
 #include <stdio.h>
+#include <sys/types.h>
+typedef $uvtype UV;
 int main()
 {
        int i;
        union {
-               unsigned long l;
-               char c[sizeof(long)];
+               UV l;
+               char c[$uvsize];
        } u;
 
-       if (sizeof(long) > 4)
-               u.l = (0x08070605L << 32) | 0x04030201L;
+       if ($uvsize > 4)
+               u.l = (((UV)0x08070605) << 32) | (UV)0x04030201;
        else
-               u.l = 0x04030201L;
-       for (i = 0; i < sizeof(long); i++)
+               u.l = (UV)0x04030201;
+       for (i = 0; i < $uvsize; i++)
                printf("%c", u.c[i]+'0');
        printf("\n");
        exit(0);
@@ -16048,7 +16196,7 @@ EOM
                fi
                case "$xxx_prompt" in
                y)
-                       rp="What is the order of bytes in a long?"
+                       rp="What is the order of bytes in $uvtype?"
                        . ./myread
                        byteorder="$ans"
                        ;;
@@ -18391,24 +18539,6 @@ $rm -f stdioh
 
 
 
-: see if time exists
-echo " "
-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
-
 : see what type uids are declared as in the kernel
 echo " "
 echo "Looking for the type for user ids returned by getuid()."
@@ -19108,9 +19238,7 @@ eval $find_extensions
 # Special case:  Add in threads/shared since it is not picked up by the
 # recursive find above (and adding in general recursive finding breaks
 # SDBM_File/sdbm).  A.D.  10/25/2001.
-# Encode::XX need explicit mentions for the same reason.
-# --jhi 2002-03-04
-known_extensions="$known_extensions threads/shared Encode/CN Encode/JP Encode/KR Encode/TW"
+known_extensions="$known_extensions threads/shared"
 set X $nonxs_extensions
 shift
 nonxs_extensions="$*"
@@ -19201,12 +19329,18 @@ for xxx in $known_extensions ; do
                esac
                ;;
        threads|threads/shared)
-                case "$usethreads" in
-                true|$define|y)
-                        case "$useithreads" in
-                        $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
-                        esac
-               esac
+               # threads and threads::shared are special cases.
+               # To stop people from asking "Perl 5.8.0 was supposed
+               # to have this new fancy threads implementation but my
+               # perl doesn't have it" and from people trying to
+               # (re)install the threads module using CPAN.pm and
+               # CPAN.pm then offering to reinstall Perl 5.8.0,
+               # the threads.pm and threads/shared.pm will always be
+               # there, croaking informatively ("you need to rebuild
+               # all of Perl with threads, sorry") when threads haven't
+               # been compiled in.
+               # --jhi
+               avail_ext="$avail_ext $xxx"
                ;;
        IPC/SysV|ipc/sysv)
                : XXX Do we need a useipcsysv variable here
@@ -19344,6 +19478,20 @@ EOM
        esac
        ;;
 esac
+#        
+# Encode is a special case.  If we are building Encode as a static
+# extension, we need to explicitly list its subextensions as well.
+# For other nested extensions, this is handled automatically by
+# the appropriate Makefile.PL.
+case " $static_ext " in
+       *" Encode "*) # Add the subextensions of Encode
+       cd "$rsrc/ext"
+       for xxx in `ls Encode/*/Makefile.PL|awk -F/ '{print $2}'`; do
+               static_ext="$static_ext Encode/$xxx"
+       done
+       cd "$tdir"
+       ;;
+esac
 
 set X $dynamic_ext $static_ext $nonxs_ext
 shift