This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
.github - switch to v3 actions
[perl5.git] / Configure
index 6da1268..6727379 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -16,7 +16,7 @@
 # you should use metaconfig. Perl uses a modified version of this
 # tool, and this, together with the metaconfig units, are available
 # in the git repository:
-#    $ git clone https://github.com/perl5-metaconfig/metaconfig metaconfig
+#    $ git clone https://github.com/Perl/metaconfig metaconfig
 # The original dist package (including metaconfig) is available on github:
 #    $ git clone https://github.com/rmanfredi/dist.git dist-git
 #
@@ -28,7 +28,7 @@
 # Porting/pumpkin.pod.
 
 # Generated using [metaconfig 3.5 PL0]
-# (with additional metaconfig patches by perlbug@perl.org)
+# with additional metaconfig patches from https://github.com/Perl/metaconfig
 
 cat >c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -229,6 +229,7 @@ extensions=''
 known_extensions=''
 nonxs_ext=''
 static_ext=''
+uselanginfo=''
 useopcode=''
 useposix=''
 extras=''
@@ -364,6 +365,7 @@ cf_by=''
 cf_time=''
 charbits=''
 charsize=''
+compiler_warning=''
 contains=''
 cpp_stuff=''
 cpplast=''
@@ -371,6 +373,7 @@ cppminus=''
 cpprun=''
 cppstdin=''
 d__fwalk=''
+d_accept4=''
 d_access=''
 d_accessx=''
 d_acosh=''
@@ -380,6 +383,7 @@ asctime_r_proto=''
 d_asctime_r=''
 d_asinh=''
 d_atanh=''
+d_attribute_always_inline=''
 d_attribute_deprecated=''
 d_attribute_format=''
 d_attribute_malloc=''
@@ -387,9 +391,11 @@ d_attribute_nonnull=''
 d_attribute_noreturn=''
 d_attribute_pure=''
 d_attribute_unused=''
+d_attribute_visibility=''
 d_attribute_warn_unused_result=''
 d_printf_format_null=''
 d_backtrace=''
+d_non_int_bitfields=''
 d_builtin_choose_expr=''
 d_builtin_expect=''
 d_builtin_add_overflow=''
@@ -408,7 +414,6 @@ d_clearenv=''
 d_closedir=''
 d_void_closedir=''
 d_cmsghdr_s=''
-d_const=''
 d_copysign=''
 d_copysignl=''
 d_cplusplus=''
@@ -424,7 +429,6 @@ d_ctermid_r=''
 ctime_r_proto=''
 d_ctime_r=''
 d_cuserid=''
-d_dbl_dig=''
 d_dbminitproto=''
 d_difftime=''
 d_dir_dd_fd=''
@@ -439,6 +443,7 @@ d_drand48_r=''
 drand48_r_proto=''
 d_drand48proto=''
 d_dup2=''
+d_dup3=''
 d_eaccess=''
 d_endgrent=''
 d_endgrent_r=''
@@ -474,6 +479,8 @@ d_fds_bits=''
 d_fdclose=''
 d_fdim=''
 d_fegetround=''
+d_ffs=''
+d_ffsl=''
 d_fgetpos=''
 d_finite=''
 d_finitel=''
@@ -511,6 +518,7 @@ d_gai_strerror=''
 d_Gconvert=''
 d_getaddrinfo=''
 d_getcwd=''
+d_getenv_preserves_other_thread=''
 d_getespwnam=''
 d_getfsstat=''
 d_getgrent=''
@@ -656,6 +664,7 @@ d_lstat=''
 d_madvise=''
 d_malloc_good_size=''
 d_malloc_size=''
+d_malloc_usable_size=''
 d_mblen=''
 d_mbrlen=''
 d_mbrtowc=''
@@ -666,6 +675,7 @@ d_memrchr=''
 d_mkdir=''
 d_mkdtemp=''
 d_mkfifo=''
+d_mkostemp=''
 d_mkstemp=''
 d_mkstemps=''
 d_mktime=''
@@ -691,16 +701,19 @@ d_newlocale=''
 d_querylocale=''
 d_uselocale=''
 i_xlocale=''
+xlocale_needed=''
 d_nextafter=''
 d_nexttoward=''
 d_nice=''
 d_nl_langinfo=''
+d_nl_langinfo_l=''
 d_thread_safe_nl_langinfo_l=''
 d_off64_t=''
 d_open3=''
 d_fpathconf=''
 d_pathconf=''
 d_pause=''
+d_pipe2=''
 d_pipe=''
 d_poll=''
 d_portable=''
@@ -749,6 +762,7 @@ d_semget=''
 d_semop=''
 d_sendmsg=''
 d_setegid=''
+d_setenv=''
 d_seteuid=''
 d_setgrent=''
 d_setgrent_r=''
@@ -759,7 +773,9 @@ d_sethostent_r=''
 sethostent_r_proto=''
 d_setitimer=''
 d_setlinebuf=''
+d_has_C_UTF8=''
 d_setlocale=''
+d_setlocale_accepts_any_locale_name=''
 d_setlocale_r=''
 setlocale_r_proto=''
 d_setnent=''
@@ -808,6 +824,8 @@ d_signbit=''
 d_sigprocmask=''
 d_sigsetjmp=''
 usesitecustomize=''
+d_snprintf=''
+d_vsnprintf=''
 d_sockatmark=''
 d_sockatmarkproto=''
 d_ip_mreq=''
@@ -824,6 +842,7 @@ d_scm_rights=''
 d_sin6_scope_id=''
 d_sockaddr_in6=''
 d_sockaddr_sa_len=''
+d_sockaddr_storage=''
 d_socket=''
 d_sockpair=''
 sockethdr=''
@@ -856,11 +875,7 @@ stdio_bufsiz=''
 stdio_cnt=''
 stdio_filbuf=''
 stdio_ptr=''
-d_index=''
-d_strchr=''
 d_strcoll=''
-d_strerrm=''
-d_strerror=''
 d_sysernlst=''
 d_syserrlst=''
 d_strerror_l=''
@@ -871,6 +886,7 @@ d_strlcat=''
 d_strlcpy=''
 d_strnlen=''
 d_strtod=''
+d_strtod_l=''
 d_strtol=''
 d_strtold=''
 d_strtold_l=''
@@ -880,6 +896,7 @@ d_strtoul=''
 d_strtoull=''
 d_strtouq=''
 d_strxfrm=''
+d_strxfrm_l=''
 d_symlink=''
 d_syscall=''
 d_syscallproto=''
@@ -889,6 +906,8 @@ d_tcgetpgrp=''
 d_tcsetpgrp=''
 d_telldirproto=''
 d_tgamma=''
+d_thread_local=''
+perl_thread_local=''
 d_time=''
 timetype=''
 d_asctime64=''
@@ -902,6 +921,8 @@ clocktype=''
 d_times=''
 d_tmpnam_r=''
 tmpnam_r_proto=''
+d_towlower=''
+d_towupper=''
 d_trunc=''
 d_truncate=''
 d_truncl=''
@@ -926,6 +947,7 @@ d_voidsig=''
 signal_t=''
 d_wait4=''
 d_waitpid=''
+d_wcrtomb=''
 d_wcscmp=''
 d_wcstombs=''
 d_wcsxfrm=''
@@ -966,7 +988,6 @@ html3dir=''
 html3direxp=''
 installhtml3dir=''
 i_arpainet=''
-i_assert=''
 i_bfd=''
 i_crypt=''
 db_hashtype=''
@@ -984,7 +1005,6 @@ i_dlfcn=''
 i_execinfo=''
 i_fcntl=''
 i_fenv=''
-i_float=''
 i_fp=''
 i_fp_class=''
 i_gdbm=''
@@ -994,13 +1014,10 @@ i_ieeefp=''
 i_inttypes=''
 i_langinfo=''
 i_libutil=''
-i_limits=''
 i_locale=''
 i_machcthr=''
 i_malloc=''
 i_mallocmalloc=''
-i_math=''
-i_memory=''
 i_mntent=''
 d_gdbm_ndbm_h_uses_prototypes=''
 d_gdbmndbm_h_uses_prototypes=''
@@ -1032,8 +1049,6 @@ i_socks=''
 i_stdbool=''
 i_stdint=''
 i_stdlib=''
-i_string=''
-strings=''
 i_sunmath=''
 i_sysaccess=''
 i_sysdir=''
@@ -1075,9 +1090,9 @@ timeincl=''
 i_unistd=''
 i_ustat=''
 i_utime=''
-i_values=''
 i_vfork=''
 i_wchar=''
+i_wctype=''
 d_inc_version_list=''
 inc_version_list=''
 inc_version_list_init=''
@@ -1220,6 +1235,7 @@ u8size=''
 u8type=''
 uvsize=''
 uvtype=''
+i32dformat=''
 ivdformat=''
 nvEUformat=''
 nvFUformat=''
@@ -1227,6 +1243,10 @@ nvGUformat=''
 nveformat=''
 nvfformat=''
 nvgformat=''
+u32XUformat=''
+u32oformat=''
+u32uformat=''
+u32xformat=''
 uvXUformat=''
 uvoformat=''
 uvuformat=''
@@ -1310,6 +1330,8 @@ shsharp=''
 spitshell=''
 src=''
 ssizetype=''
+st_dev_sign=''
+st_dev_size=''
 st_ino_sign=''
 st_ino_size=''
 startperl=''
@@ -1331,6 +1353,7 @@ archname64=''
 use64bitall=''
 use64bitint=''
 usecbacktrace=''
+usedefaultstrict=''
 dtrace=''
 usedtrace=''
 usefaststdio=''
@@ -1351,7 +1374,6 @@ useperlio=''
 usequadmath=''
 usesocks=''
 d_oldpthreads=''
-use5005threads=''
 useithreads=''
 usereentrant=''
 usethreads=''
@@ -1475,6 +1497,8 @@ perllibs=''
 useposix=true
 : set useopcode=false in your hint file to disable the Opcode extension.
 useopcode=true
+: set uselanginfo=false in your hint file to disable the I18N::Langinfo extension.
+uselanginfo=true
 archname64=''
 ccflags_uselargefiles=''
 ldflags_uselargefiles=''
@@ -1486,7 +1510,7 @@ archname=''
 usereentrant='undef'
 : List of libraries we want.
 : If anyone needs extra -lxxx, put those in a hint file.
-libswanted="cl pthread socket bind inet nsl ndbm gdbm dbm db malloc dl ld"
+libswanted="cl pthread socket bind inet ndbm gdbm dbm db malloc dl ld"
 libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
 : We probably want to search /usr/shlib before most other libraries.
 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
@@ -1533,8 +1557,8 @@ 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 (Perl Maintainers) at perlbug@perl.org and
-we'll try to straighten this all out.
+Please report this issue at https://github.com/Perl/perl5/issues
+and we'll try to straighten this all out.
 EOM
        exit 1
        ;;
@@ -1827,8 +1851,8 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
   -r : reuse C symbols value if possible (skips costly nm extraction).
   -s : silent mode, only echoes questions and essential information.
   -D : define symbol to have some value:
-         -D symbol         symbol gets the value 'define'
-         -D symbol=value   symbol gets the value 'value'
+         -D symbol                symbol gets the value 'define'
+         -D symbol='some value'   symbol is set to 'some value'
        common used examples (see INSTALL for more info):
          -Duse64bitint            use 64bit integers
          -Duse64bitall            use 64bit integers and pointers
@@ -1917,12 +1941,13 @@ rm -f grimble
 : the following should work in any shell
 case "$contains" in
 contains*)
-       echo " "
-       echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
+       echo " " >&4
+       echo "AGH!  Grep doesn't return a status.  Attempting remedial action." >&4
        cat >contains <<'EOSS'
 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
 EOSS
-chmod +x contains
+contains=./contains
+chmod +x $contains
 esac
 
 : Find the path to the source tree
@@ -2117,7 +2142,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 (perlbug@perl.org).
+and contact the author (https://github.com/Perl/perl5/issues).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -2195,6 +2220,7 @@ $startsh
 xxxm=\$dflt
 $myecho
 ans='!'
+counter=42
 case "\$fastread" in
 yes) case "\$dflt" in
        '') ;;
@@ -2269,6 +2295,12 @@ while expr "X\$ans" : "X!" >/dev/null; do
                $myecho
                ;;
        esac
+       counter=\`echo \$counter | awk '{ print --\$0 }'\`
+       if [ \$counter = 0 ]; then
+               echo >&4
+               echo >&4 Too many attempts asking the same question.  Giving up.
+               exit 1
+       fi
 done
 case "\$ans" in
 '') ans="\$xxxm";;
@@ -2397,7 +2429,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 (perlbug@perl.org) know how I blew it.
+have, let me (https://github.com/Perl/perl5/issues) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -2771,7 +2803,7 @@ EOM
                     if $test -f UU/myread; then
                         . ./UU/myread
                     else
-                        echo "Cannot find myread, sorry.  Aborting." >&2
+                        echo "Cannot find myread, sorry.  Aborting." >&4
                         exit 1
                     fi
                 fi
@@ -3366,7 +3398,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 perlbug@perl.org
+       : tests or hints, please send them to https://github.com/Perl/perl5/issues
        : The metaconfig authors would also appreciate a copy...
        $test -f /irix && osname=irix
        $test -f /xenix && osname=sco_xenix
@@ -3474,7 +3506,10 @@ EOM
                        osvers="$3"
                        ;;
                dragonfly) osname=dragonfly
-                       osvers="$3"
+                        case "$3" in
+                            [0-9]*) osvers="$3" ;;
+                            *) osvers="$2" ;;
+                        esac
                        ;;
                dynixptx*) osname=dynixptx
                        osvers=`echo "$4"|sed 's/^v//'`
@@ -3502,6 +3537,9 @@ EOM
                        ;;
                MiNT)   osname=mint
                        ;;
+               minix)  osname=minix
+                       osvers=`$uname -r`
+                       ;;
                netbsd*) osname=netbsd
                        osvers="$3"
                        ;;
@@ -3513,8 +3551,8 @@ EOM
                        ;;
                nonstop-ux) osname=nonstopux ;;
                openbsd) osname=openbsd
-                       osvers="$3"
-                       ;;
+                       osvers="$3"
+                       ;;
                os2)    osname=os2
                        osvers="$4"
                        ;;
@@ -4165,14 +4203,9 @@ EOSC
 
 : determine root of directory hierarchy where package will be installed.
 case "$prefix" in
-'')
-       dflt=`./loc . /usr/local /usr/local /local /opt /usr`
-       ;;
-*?/)
-       dflt=`echo "$prefix" | sed 's/.$//'`
+'')    dflt=`./loc . /usr/local /usr/local /local /opt /usr`
        ;;
-*)
-       dflt="$prefix"
+*)     dflt="$prefix"
        ;;
 esac
 $cat <<EOM
@@ -4191,16 +4224,25 @@ rp='Installation prefix to use?'
 . ./getfile
 oldprefix=''
 case "$prefix" in
-'') ;;
-*)
-       case "$ans" in
+'')    ;;
+*)     case "$ans" in
        "$prefix") ;;
        *) oldprefix="$prefix";;
        esac
        ;;
 esac
-prefix="$ans"
-prefixexp="$ansexp"
+
+case "$ans" in
+*?/)   prefix=`echo "$ans" | sed 's/.$//'`
+       ;;
+*)     prefix="$ans"
+esac
+
+case "$ansexp" in
+*?/)   prefixexp=`echo "$ansexp" | sed 's/.$//'`
+       ;;
+*)     prefixexp="$ansexp"
+esac
 
 : allow them to override the AFS root
 case "$afsroot" in
@@ -4323,65 +4365,12 @@ $undef$define) . ./whoa; eval "$var=\$tu";;
 *) eval "$var=$val";;
 esac'
 
-: get the patchlevel
-echo " "
-echo "Getting the current patchlevel..." >&4
-if $test -r $rsrc/patchlevel.h;then
-       revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
-       patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
-       subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
-       api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
-       api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
-       api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
-       perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
-else
-       revision=0
-       patchlevel=0
-       subversion=0
-       api_revision=0
-       api_version=0
-       api_subversion=0
-       perl_patchlevel=0
-       $echo "(You do not have patchlevel.h.  Eek.)"
-fi
-: Define a handy string here to avoid duplication in myconfig.SH and configpm.
-version_patchlevel_string="version $patchlevel subversion $subversion"
-case "$perl_patchlevel" in
-0|'') ;;
-*)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
-    version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
-    ;;
-esac
-
-$echo "(You have $package $version_patchlevel_string.)"
-
-case "$osname" in
-dos|vms)
-       : XXX Should be a Configure test for double-dots in filenames.
-       version=`echo $revision $patchlevel $subversion | \
-                $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
-       api_versionstring=`echo $api_revision $api_version $api_subversion | \
-                $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
-       ;;
-*)
-       version=`echo $revision $patchlevel $subversion | \
-                $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
-       api_versionstring=`echo $api_revision $api_version $api_subversion | \
-                $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
-       ;;
-esac
-: Special case the 5.005_xx maintenance series, which used 5.005
-: without any subversion label as a subdirectory in $sitelib
-if test "${api_revision}${api_version}${api_subversion}" = "550"; then
-       api_versionstring='5.005'
-fi
-
 : Do we want threads support and if so, what type
 case "$usethreads" in
 $define|true|[yY]*)     dflt='y';;
-*)     # Catch case where user specified ithreads or 5005threads but
+*)     # Catch case where user specified ithreads but
        # forgot -Dusethreads (A.D. 4/2002)
-       case "$useithreads$use5005threads" in
+       case "$useithreads" in
        *$define*)      dflt='y';;
        *)              dflt='n';;
        esac
@@ -4406,74 +4395,7 @@ esac
 set usethreads
 eval $setvar
 
-if $test $patchlevel -lt 9; then
-    case "$usethreads" in
-    $define)
-       : Default to ithreads unless overridden on command line or with
-       : old config.sh
-       dflt='y'
-       case "$use5005threads" in
-               $define|true|[yY]*)
-                       echo "5.005 threads are no longer supported"
-                       exit 1
-               ;;
-       esac
-       case "$useithreads" in
-               $undef|false|[nN]*) dflt='n';;
-       esac
-       rp='Use the newer interpreter-based ithreads?'
-       . ./myread
-       case "$ans" in
-       y|Y)    val="$define" ;;
-       *)      val="$undef" ;;
-       esac
-       set useithreads
-       eval $setvar
-       : Now set use5005threads to the opposite value.
-       case "$useithreads" in
-       $define) val="$undef" ;;
-       *) val="$define" ;;
-       esac
-       set use5005threads
-       eval $setvar
-       ;;
-    *)
-       useithreads="$undef"
-       use5005threads="$undef"
-       ;;
-    esac
-
-    case "$useithreads$use5005threads" in
-    "$define$define")
-       $cat >&4 <<EOM
-
-You cannot have both the ithreads and the 5.005 threads enabled
-at the same time.  Disabling the 5.005 threads since they are
-much less stable than the ithreads.
-
-EOM
-       use5005threads="$undef"
-       ;;
-    esac
-
-else
-: perl-5.9.x and later
-
-    if test X"$usethreads" = "X$define"; then
-       case "$use5005threads" in
-           $define|true|[yY]*)
-               $cat >&4 <<EOM
-
-5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
-
-EOM
-           ;;
-       esac
-    fi
-
-    use5005threads="$undef"
-    useithreads="$usethreads"
-fi
+useithreads="$usethreads"
 
 case "$d_oldpthreads" in
 '')    : Configure tests would be welcome here.  For now, assume undef.
@@ -4692,7 +4614,7 @@ else
 fi
 $rm -f try try.*
 case "$gccversion" in
-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
+1.*) cpp=`./loc gcc-cpp $cpp $pth` ;;
 esac
 case "$gccversion" in
 '') gccosandvers='' ;;
@@ -4732,7 +4654,7 @@ esac
 # gcc 3.* complain about adding -Idirectories that they already know about,
 # so we will take those off from locincpth.
 case "$gccversion" in
-3*)
+3.*)
     echo "main(){}">try.c
     for incdir in $locincpth; do
        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
@@ -4760,6 +4682,61 @@ case "$gccversion" in
     esac
 esac
 
+# Really old versions of gcc default to C89 and will error for this code.
+# See if the compiler (gcc or otherwise) needs a flag to compile C99 code
+# Initialisations in for loops seem to be the particular problem
+# (Does this syntax conflict with something else that was valid C89?)
+# We also add a declaration after a statement to detect whether the compiler
+# (or the user supplied -Accflags) consider such declarations to be errors.
+# This causes 'Configure with -Accflags="-Werror=declaration-after-statement"'
+# to fail hard and early.
+#
+# Annoyingly -std=c99 will cause gcc to tell glibc not to define prototypes for
+# syscall, drand48 etc when including <unistd.h>, which messes up our build.
+# I guess we *could* loop round trying -std=c99 first with checks both for the
+# prototype found and the code compiling (because -std=gnu99 might do other
+# things we don't want, particularly on non-GCC compilers) but
+# 1) We would need to check for the prototype first (without any flags)
+# 2) We would still end up with most Linux systems either being -std=gnu99
+#    or "" (no flag), and so both common options would not rigorously check our
+#    portability to other platforms.
+# So it doesn't seem worth the complexity and chance of different failure.
+$cat >try.c <<'EOCP'
+int main(int argc, char **argv) {
+    argc = argc + 1;
+    /* This is deliberately a declaration after a statement. */
+    unsigned long long count = 0;
+    for (char **p = argv; *p; ++p) {
+        ++count;
+    }
+    return count == 1 ? 0 : argc;
+}
+EOCP
+c99_for=no
+for flag in '' '-std=gnu99' '-std=c99'; do
+    if $cc -o try $flag $ccflags $ldflags try.c 2>/dev/null && ./try; then
+        c99_for="$flag"
+        break;
+    fi
+done
+case "$c99_for" in
+'') echo "Your C compiler doesn't need any special flags to compile C99 code"
+    ;;
+no) echo >&4 "Your C compiler doesn't seem to be able to compile C99 code"
+    rp='Do you really want to continue?'
+    dflt='n'
+    . ./myread
+    case "$ans" in
+       [yY])   echo >&4 "Okay, continuing."    ;;
+       *)      exit 1                          ;;
+    esac
+    ;;
+*)  echo "Your C compiler needs $c99_for to compile C99 code"
+    ccflags="$c99_for $ccflags"
+    ;;
+esac
+$rm -f try try.*
+
 : What should the include directory be ?
 : Use sysroot if set, so findhdr looks in the right place.
 echo " "
@@ -4968,27 +4945,35 @@ esac
 # Note that ccname for clang is also gcc.
 case "$ccname" in
     gcc)
+       realpath=`which realpath 2>/dev/null | sed 's/no realpath in.*//'`
        $echo 'extern int foo;' > try.c
        set X `$cppstdin -v try.c 2>&1 | $awk '/^#include </,/^End of search /'|$cppfilter $grep '/include'`
        shift
+       inclibpth=""
        if $test $# -gt 0; then
-           incpth="$incpth $*"
-           incpth="`$echo $incpth|$sed 's/^ //'`"
            for i in $*; do
-               j="`$echo $i|$sed 's,/include$,/lib,'`"
+               case $realpath in
+                   */realpath) i=`$realpath $i` ;;
+               esac
+               incpth="$incpth $i"
+               j="`$echo $i | $sed 's,/include[^/]*,/lib,'`"
                if $test -d $j; then
-                   libpth="$libpth $j"
+                   inclibpth="$inclibpth $j"
                fi
            done
-           libpth="`$echo $libpth|$sed 's/^ //'`"
-           for xxx in $libpth $loclibpth $plibpth $glibpth; do
+           incpth="`$echo $incpth | $sed 's/^ //'`"
+           for xxx in $inclibpth $loclibpth $plibpth $glibpth; do
                if $test -d $xxx; then
+                   case $realpath in
+                       */realpath) xxx=`$realpath $xxx` ;;
+                   esac
                    case " $libpth " in
                    *" $xxx "*) ;;
                    *) libpth="$libpth $xxx";;
                    esac
                fi
            done
+           libpth="`$echo $libpth | $sed 's/^ //'`"
        fi
        $rm -f try.c
        case "$usrinc" in
@@ -5213,7 +5198,7 @@ EOM
 rp='Try to use long doubles if available?'
 . ./myread
 case "$ans" in
-y|Y)   val="$define"   ;;
+y|Y)   val="$define"   ;;
 *)      val="$undef"   ;;
 esac
 set uselongdouble
@@ -5297,6 +5282,16 @@ for thislib in $libswanted; do
                $test -f "$xxx" && libstyle=shared
            fi
            if test ! -f "$xxx"; then
+               xxx=$thisdir/lib$thislib.$so$_a
+               $test -f "$xxx" && eval $libscheck
+               $test -f "$xxx" && libstyle="import"
+           fi
+           if test ! -f "$xxx"; then
+               xxx=$thisdir/$thislib.$so$_a
+               $test -f "$xxx" && eval $libscheck
+               $test -f "$xxx" && libstyle="import"
+           fi
+           if test ! -f "$xxx"; then
                xxx=$thisdir/lib$thislib.$so
                $test -f "$xxx" && eval $libscheck
                $test -f "$xxx" && libstyle=shared
@@ -5430,18 +5425,18 @@ esac
 : think is an option
 checkccflag='check=$1; flag=$2; callback=$3;
 echo " ";
-echo "Checking if your compiler accepts $flag" 2>&1;
+echo "Checking if your compiler accepts $flag" >&4;
 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
 echo "int main(void) { return 0; }" > gcctest.c;
 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
-    echo "Yes, it does." 2>&1;
+    echo "Yes, it does." >&4;
     if $test -s gcctest.out ; then
         echo "But your platform does not like it:";
         cat gcctest.out;
     else
        case "$ccflags" in
        *$check*)
-           echo "Leaving current flags $ccflags alone." 2>&1
+           echo "Leaving current flags $ccflags alone." >&4
            ;;
        *) dflt="$dflt $flag";
            eval $callback
@@ -5449,7 +5444,7 @@ if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest;
        esac
     fi
 else
-    echo "Nope, it does not, but that is ok." 2>&1;
+    echo "Nope, it does not, but that is ok." >&4;
 fi
 '
 
@@ -5458,13 +5453,13 @@ fi
 case "$hint" in
 default|recommended)
        case "$gccversion" in
-       1*) dflt="$dflt -fpcc-struct-return" ;;
+       1.*) dflt="$dflt -fpcc-struct-return" ;;
        esac
        case "$optimize:$DEBUGGING" in
        *-g*:old) dflt="$dflt -DDEBUGGING";;
        esac
        case "$gccversion" in
-       2*) if $test -d /etc/conf/kconfig.d &&
+       2.*) if $test -d /etc/conf/kconfig.d &&
                        $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
                then
                        # Interactive Systems (ISC) POSIX mode.
@@ -5473,7 +5468,7 @@ default|recommended)
                ;;
        esac
        case "$gccversion" in
-       1*) ;;
+       1.*) ;;
        2.[0-8]*) ;;
        ?*)     set strict-aliasing -fno-strict-aliasing
                eval $checkccflag
@@ -5494,23 +5489,24 @@ default|recommended)
        # is to add the flag to the flags passed to the compiler at link time,
        # as that way the compiler can do the right implementation dependant
        # thing. (NWC)
-       case "$osname" in
-       amigaos) ;; # -fstack-protector builds but doesn't work
-       *)      case "$gccversion" in
-               ?*)     set stack-protector-strong -fstack-protector-strong
-                       eval $checkccflag
-                       case "$dflt" in
-                       *-fstack-protector-strong*) ;; # It got added.
-                       *) # Try the plain/older -fstack-protector.
-                          set stack-protector -fstack-protector
-                          eval $checkccflag
-                          ;;
-                       esac
-                       ;;
+       case "$ccflags" in
+       *-fno-stack-protector*)
+           echo "Do not add -fstack-protector nor -fstack-protector-strong" 2>&1
+           ;;
+       *) case "$gccversion" in
+          ?*)  set stack-protector-strong -fstack-protector-strong
+               eval $checkccflag
+               case "$dflt" in
+               *-fstack-protector-strong*) ;; # It got added.
+               *) # Try the plain/older -fstack-protector.
+                  set stack-protector -fstack-protector
+                  eval $checkccflag
+                  ;;
                esac
                ;;
+           esac
+           ;;
        esac
-       ;;
 esac
 
 case "$mips_type" in
@@ -5591,7 +5587,7 @@ case "$cppflags" in
     ;;
 esac
 case "$gccversion" in
-1*) cppflags="$cppflags -D__GNUC__"
+1.*) cppflags="$cppflags -D__GNUC__"
 esac
 case "$mips_type" in
 '');;
@@ -5777,7 +5773,7 @@ compile='
 mc_file=$1;
 shift;
 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
-echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
+echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to https://github.com/Perl/perl5/issues" >&4;
 exit 1;
 fi;
 esac;
@@ -5786,7 +5782,7 @@ $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null
 compile_ok='
 mc_file=$1;
 shift;
-$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
+$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
 
 : stub, used only to satisfy other units
 i_stdlib='define'
@@ -6896,21 +6892,17 @@ EOCP
 esac
 $rm_try
 
-: see if this is a float.h system
-set float.h i_float
-eval $inhdr
-
 : check for long doubles
-echo " "
+echo " " >&4
 echo "Checking to see if you have long double..." >&4
 echo 'int main() { long double x = 7.0; }' > try.c
 set try
 if eval $compile; then
        val="$define"
-       echo "You have long double."
+       echo "You have long double." >&4
 else
        val="$undef"
-       echo "You do not have long double."
+       echo "You do not have long double." >&4
 fi
 $rm_try
 set d_longdbl
@@ -6923,7 +6915,7 @@ eval $inlibc
 : check for length of long double
 case "${d_longdbl}${longdblsize}" in
 $define)
-       echo " "
+       echo " " >&4
        echo "Checking to see how big your long doubles are..." >&4
        $cat >try.c <<'EOCP'
 #include <stdio.h>
@@ -6936,19 +6928,19 @@ EOCP
        set try
        if eval $compile; then
                longdblsize=`$run ./try`
-               echo "Your long doubles are $longdblsize bytes long."
+               echo "Your long doubles are $longdblsize bytes long." >&4
        else
                dflt='8'
-               echo " "
+               echo " " >&4
                echo "(I can't seem to compile the test program.  Guessing...)" >&4
                rp="What is the size of a long double (in bytes)?"
                . ./myread
                longdblsize="$ans"
        fi
        if $test "X$doublesize" = "X$longdblsize"; then
-               echo "That isn't any different from an ordinary double."
-               echo "I'll keep your setting anyway, but you may see some"
-               echo "harmless compilation warnings."
+               echo "That isn't any different from an ordinary double." >&4
+               echo "I'll keep your setting anyway, but you may see some" >&4
+               echo "harmless compilation warnings." >&4
        fi
        ;;
 esac
@@ -6958,13 +6950,10 @@ $echo "Checking the kind of long doubles you have..." >&4
 case "$d_longdbl" in
 define)
 $cat <<EOP >try.c
-#$i_float I_FLOAT
 #$i_stdlib I_STDLIB
 #define LONGDBLSIZE $longdblsize
 #define DOUBLESIZE $doublesize
-#ifdef I_FLOAT
 #include <float.h>
-#endif
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
@@ -7005,9 +6994,9 @@ int main() {
      * The Motorola 68881 had another "extended precision" format:
      * sign:1 exp:15 zero:16 integer:1 mantissa:63
      * for total of 96 bits of bytes.  The zero bits were unused.
-     * See "M68000 FAMILY PROGRAMMER’S REFERENCE MANUAL" for more details.
-     * If it ever becomes relevant, this format should be allocated
-     * a new doublekind code since it's quite different from the Intel x87.
+     * See "M68000 FAMILY PROGRAMMER'S REFERENCE MANUAL" for more details.
+     * If it ever becomes relevant, this format should be allocated a
+     * new doublekind code since it is quite different from the Intel x87.
      */
     printf("4\n");
     exit(0);
@@ -7074,13 +7063,13 @@ case "$longdblkind" in
 0) echo "Your long doubles are doubles." >&4 ;;
 1) echo "You have IEEE 754 128-bit little endian long doubles." >&4 ;;
 2) echo "You have IEEE 754 128-bit big endian long doubles." >&4 ;;
-3) echo "You have x86 80-bit little endian long doubles." >& 4 ;;
-4) echo "You have x86 80-bit big endian long doubles." >& 4 ;;
-5) echo "You have 128-bit fully little-endian double-double long doubles (64-bit LEs in LE)." >& 4 ;;
-6) echo "You have 128-bit fully big-endian double-double long doubles (64-bit BEs in BE)." >& 4 ;;
-7) echo "You have 128-bit mixed-endian double-double long doubles (64-bit LEs in BE)." >& 4 ;;
-8) echo "You have 128-bit mixed-endian double-double long doubles (64-bit BEs in LE)." >& 4 ;;
-9) echo "You have 128-bit PDP-style mixed-endian long doubles (VAX format H)." >& 4 ;;
+3) echo "You have x86 80-bit little endian long doubles." >&4 ;;
+4) echo "You have x86 80-bit big endian long doubles." >&4 ;;
+5) echo "You have 128-bit fully little-endian double-double long doubles (64-bit LEs in LE)." >&4 ;;
+6) echo "You have 128-bit fully big-endian double-double long doubles (64-bit BEs in BE)." >&4 ;;
+7) echo "You have 128-bit mixed-endian double-double long doubles (64-bit LEs in BE)." >&4 ;;
+8) echo "You have 128-bit mixed-endian double-double long doubles (64-bit BEs in LE)." >&4 ;;
+9) echo "You have 128-bit PDP-style mixed-endian long doubles (VAX format H)." >&4 ;;
 *) echo "Cannot figure out your long double." >&4 ;;
 esac
 d_long_double_style_ieee=$undef
@@ -7105,6 +7094,59 @@ case "$longdblkind" in
 esac
 $rm_try
 
+: get the patchlevel
+echo " "
+echo "Getting the current patchlevel..." >&4
+if $test -r $rsrc/patchlevel.h;then
+       revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
+       patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
+       subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
+       api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
+       api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
+       api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
+       perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
+else
+       revision=0
+       patchlevel=0
+       subversion=0
+       api_revision=0
+       api_version=0
+       api_subversion=0
+       perl_patchlevel=0
+       $echo "(You do not have patchlevel.h.  Eek.)"
+fi
+: Define a handy string here to avoid duplication in myconfig.SH and configpm.
+version_patchlevel_string="version $patchlevel subversion $subversion"
+case "$perl_patchlevel" in
+0|'') ;;
+*)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
+    version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
+    ;;
+esac
+
+$echo "(You have $package $version_patchlevel_string.)"
+
+case "$osname" in
+dos|vms)
+       : XXX Should be a Configure test for double-dots in filenames.
+       version=`echo $revision $patchlevel $subversion | \
+                $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
+       api_versionstring=`echo $api_revision $api_version $api_subversion | \
+                $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
+       ;;
+*)
+       version=`echo $revision $patchlevel $subversion | \
+                $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
+       api_versionstring=`echo $api_revision $api_version $api_subversion | \
+                $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
+       ;;
+esac
+: Special case the 5.005_xx maintenance series, which used 5.005
+: without any subversion label as a subdirectory in $sitelib
+if test "${api_revision}${api_version}${api_subversion}" = "550"; then
+       api_versionstring='5.005'
+fi
+
 : determine the architecture name
 echo " "
 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
@@ -7259,7 +7301,7 @@ prefixit='case "$3" in
                none)
                        eval "tp=\"\$$2\"";
                        case "$tp" in
-                       ""|" ") eval "$1=\"\$$2\"";;
+                       ""|" "|none) eval "$1=\"\$$2\"";;
                        *) eval "$1=";;
                        esac;;
                esac;;
@@ -7618,37 +7660,39 @@ sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
 
 : Determine list of previous versions to include in @INC
 $cat > getverlist <<EOPL
-#!$perl5 -w
+#!$perl5
+use strict;
+use warnings;
 use File::Basename;
-\$api_versionstring = "$api_versionstring";
-\$version = "$version";
-\$stem = "$sitelib_stem";
-\$archname = "$archname";
+my \$api_versionstring = "$api_versionstring";
+my \$version = "$version";
+my \$stem = "$sitelib_stem";
+my \$archname = "$archname";
 EOPL
        $cat >> getverlist <<'EOPL'
-# The list found is store twice for each entry: the original name, and
-# the binary broken down version as pack "sss", so sorting is easy and
-# unambiguous. This will work for all versions that have a maximum of
-# three digit groups, separate by '.'s or '_'s. Names are extended with
-# ".0.0" to ensure at least three elements for the pack.
-#                                      -- H.Merijn Brand (m)'06 23-10-2006
-
-# Can't have leading @ because metaconfig interprets it as a command!
-;@inc_version_list=();
+# The list found is stored twice for each entry: the original name, and
+# the binary broken down version into pack "s>s>s>", so sorting is easy
+# and unambiguous.  This will work for all versions that have a maximum
+# of three digit per group separate by '.'s or '_'s. Names are extended
+# with ".0.0" to ensure at least three elements for the pack.
+#                                   -- H.Merijn Brand (m)'06 23-10-2006
+
+my @inc_version_list;
+my @candidates;
 # XXX Redo to do opendir/readdir?
 if (-d $stem) {
     chdir($stem);
     ;@candidates = map {
-       [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*");
+       [ $_, pack "s>s>s>", split m/[._]/, "$_.0.0" ] } glob("5.*");
     ;@candidates = sort { $a->[1] cmp $b->[1]} @candidates;
 }
 else {
     ;@candidates = ();
 }
 
-($pversion, $aversion, $vsn5005) = map {
-    pack "sss", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005";
-foreach $d (@candidates) {
+my ($pversion, $aversion, $vsn5005) = map {
+    pack "s>s>s>", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005";
+foreach my $d (@candidates) {
     if ($d->[1] lt $pversion) {
        if ($d->[1] ge $aversion) {
            unshift(@inc_version_list, grep { -d } $d->[0]."/$archname", $d->[0]);
@@ -7808,7 +7852,6 @@ EOM
        ;;
 esac
 
-
 : determine whether to use malloc wrapping
 echo " "
 case "$usemallocwrap" in
@@ -8114,6 +8157,10 @@ while $test 1 ; do
        $define|true|[yY]*)
                dflt='y'
                ;;
+       $undef|false|[nN]*)
+               dflt='n'
+               dflt_dtrace=""
+               ;;
        ?*)
                dflt='y'
                dflt_dtrace=$usedtrace
@@ -8550,7 +8597,7 @@ EOM
        if $test "X$sysroot" != X; then
            case "$gccversion" in
                '') ;;
-               *)  dflt="$dflt --sysroot $sysroot" ;;
+               *)  dflt="$dflt --sysroot=$sysroot" ;;
            esac
        fi
 
@@ -8777,7 +8824,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 (perlbug@perl.org)
+will not work in this version.  Let me (https://github.com/Perl/perl5/issues)
 know of any problems this may cause.
 
 EOM
@@ -8814,7 +8861,7 @@ if "$useshrplib"; then
        solaris)
                xxx="-R $shrpdir"
                ;;
-       freebsd|mirbsd|netbsd|openbsd|interix|dragonfly|bitrig)
+       freebsd|minix|mirbsd|netbsd|openbsd|interix|dragonfly|bitrig)
                xxx="-Wl,-R$shrpdir"
                ;;
        bsdos|linux|irix*|dec_osf|gnu*|haiku)
@@ -8972,8 +9019,8 @@ if (echo hi >$first) 2>/dev/null; then
                echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
                val="$undef"
        else
-               echo 'You can have filenames longer than 14 characters.'>&4
-               val="$define"
+               echo 'You can have filenames longer than 14 characters.'>&4
+               val="$define"
        fi
 else
        $cat <<'EOM'
@@ -9218,7 +9265,7 @@ case "$myhostname" in
                        $test -s hosts
                } || {
                        test "X$hostcat" != "X" &&
-                       $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
+                       $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
                                        /[       ]$myhostname[  . ]/p" > hosts
                }
                tmp_re="[       . ]"
@@ -9251,7 +9298,7 @@ case "$myhostname" in
                                .) dflt=.`$sed -n -e 's/        / /g' \
                                     -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
                                     -e 1q 2>/dev/null`
-                                       ;;
+                                       ;;
                                esac
                        fi
                        ;;
@@ -9370,9 +9417,7 @@ $cat <<EOM
 
 If you or somebody else will be maintaining perl at your site, please
 fill in the correct e-mail address here so that they may be contacted
-if necessary. Currently, the "perlbug" program included with perl
-will send mail to this address in addition to perlbug@perl.org. You may
-enter "none" for no administrator.
+if necessary. You may enter "none" for no administrator.
 
 EOM
 case "$perladmin" in
@@ -9611,16 +9656,12 @@ prefixvar=sitescript
 set backtrace d_backtrace
 eval $inlibc
 
-: add flags if using c backtrace
+: Check if C backtrace is actually supported.
 case "$usecbacktrace" in
   "") usecbacktrace=$undef ;;
   [yY]*|true|$define)
     case "$d_backtrace" in
       [yY]*|true|$define)
-        case " $ccflags " in
-         *" -DUSE_C_BACKTRACE "*) ;; # Already there.
-         *) ccflags="$ccflags -DUSE_C_BACKTRACE -g" ;;
-         esac
         ;;
       *)
         echo "This system does not support backtrace" >&4
@@ -9660,7 +9701,6 @@ esac
 set usefaststdio
 eval $setvar
 
-
 : define an is-a-typedef? function
 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
 case "$inclist" in
@@ -9823,8 +9863,8 @@ EOM
    rp='Try to understand large files, if available?'
    . ./myread
    case "$ans" in
-   y|Y)        val="$define" ;;
-   *)          val="$undef"  ;;
+   y|Y)        val="$define" ;;
+   *)  val="$undef"  ;;
    esac
    ;;
 esac
@@ -10065,46 +10105,6 @@ esac
 prefixvar=vendorscript
 . ./installprefix
 
-: script used to emit important warnings
-cat >warn <<EOS
-$startsh
-if test \$# -gt 0; then
-       echo "\$@" >msg
-else
-       cat >msg
-fi
-echo "*** WARNING:" >&4
-sed -e 's/^/*** /' <msg >&4
-echo "*** " >&4
-cat msg >>config.msg
-echo " " >>config.msg
-rm -f msg
-EOS
-chmod +x warn
-$eunicefix warn
-
-: see which of string.h or strings.h is needed
-echo " "
-strings=`./findhdr string.h`
-if $test "$strings" && $test -r "$strings"; then
-       echo "Using <string.h> instead of <strings.h>." >&4
-       val="$define"
-else
-       val="$undef"
-       strings=`./findhdr strings.h`
-       if $test "$strings" && $test -r "$strings"; then
-               echo "Using <strings.h> instead of <string.h>." >&4
-       else
-               ./warn "No string header found -- You'll surely have problems."
-       fi
-fi
-set i_string
-eval $setvar
-case "$i_string" in
-"$undef") strings=`./findhdr strings.h`;;
-*)       strings=`./findhdr string.h`;;
-esac
-
 : see if qgcvt exists
 set qgcvt d_qgcvt
 eval $inlibc
@@ -10423,15 +10423,15 @@ esac
 $cat >>try.c <<EOP
 #ifdef TRY_gconvert
 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
-char *myname = "gconvert";
+const char *myname = "gconvert";
 #endif
 #ifdef TRY_gcvt
 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-char *myname = "gcvt";
+const char *myname = "gcvt";
 #endif
 #ifdef TRY_qgcvt
 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
-char *myname = "qgcvt";
+const char *myname = "qgcvt";
 #define DOUBLETYPE long double
 #endif
 #ifdef TRY_sprintf
@@ -10444,7 +10444,7 @@ char *myname = "qgcvt";
 #else
 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
 #endif
-char *myname = "sprintf";
+const char *myname = "sprintf";
 #endif
 
 #ifndef DOUBLETYPE
@@ -10461,14 +10461,9 @@ char *myname = "sprintf";
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
-#$i_string I_STRING
-#ifdef I_STRING
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif
+#include <string.h>
 
-int checkit(char *expect, char *got)
+void checkit(const char *expect, char *got)
 {
     if (strcmp(expect, got)) {
                printf("%s oddity:  Expected %s, got %s\n",
@@ -10477,6 +10472,15 @@ int checkit(char *expect, char *got)
        }
 }
 
+void lencheck(int expect, int got)
+{
+    if (expect != got) {
+               printf("%s length mismatch:  Expected %d, got %d\n",
+                       myname, expect, got);
+               exit(1);
+       }
+}
+
 int main()
 {
        char buf[64];
@@ -10549,6 +10553,12 @@ int main()
        else
            checkit("1e+34", buf);
 
+       /* Test for an Ubuntu/Debian bug in gcvt and qgcvt. See:        *
+        * https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1899553 */
+
+       Gconvert((DOUBLETYPE)0.4, 53, 0, buf);
+       lencheck(55, (int)strlen(buf));
+
        /* For Perl, if you add additional tests here, also add them to
         * t/base/num.t for benefit of platforms not using Configure or
         * overriding d_Gconvert */
@@ -10617,6 +10627,7 @@ for xxx_convert in $xxx_list; do
                fi
        else
                echo "$xxx_convert NOT found." >&4
+               xxx_convert=''
        fi
 done
 
@@ -10647,6 +10658,10 @@ $rm_try
 set fwalk d__fwalk
 eval $inlibc
 
+: see if accept4 exists
+set accept4 d_accept4
+eval $inlibc
+
 : Initialize h_fcntl
 h_fcntl=false
 
@@ -10790,6 +10805,7 @@ hasproto='varname=$1; func=$2; shift; shift;
 while $test $# -ge 2; do
        case "$1" in
        $define) echo "#include <$2>";;
+       literal) echo "$2" ;;
        esac ;
     shift 2;
 done > try.c;
@@ -10832,16 +10848,15 @@ set $varname;
 eval $setvar;
 $rm_try'
 
-: see if we should include time.h, sys/time.h, or both
+: see if we should include sys/time.h
 echo " "
+i_time='define'
 if test "X$timeincl" = X; then
-       echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
+       echo "Testing to see if we should include <sys/time.h>." >&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>
-#endif
 #ifdef I_SYSTIME
 #ifdef SYSTIMEKERNEL
 #define KERNEL
@@ -10878,13 +10893,12 @@ EOCP
        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
+                       set try $i_systime $i_systimek $sysselect $s_timeval $s_timezone
                        if eval $compile; then
-                               set X $i_time $i_systime $i_systimek $sysselect $s_timeval
+                               set X $i_systime $i_systimek $sysselect $s_timeval
                                shift
                                flags="$*"
                                echo " "
@@ -10896,7 +10910,6 @@ EOCP
        done
        done
        done
-       done
        timeincl=''
        echo " "
        case "$flags" in
@@ -10906,12 +10919,6 @@ EOCP
        *) 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;;
@@ -10986,7 +10993,7 @@ case "$d_asctime_r" in
        esac
        case "$asctime_r_proto" in
        ''|0)   d_asctime_r=undef
-               asctime_r_proto=0
+               asctime_r_proto=0
                echo "Disabling asctime_r, cannot determine prototype." >&4 ;;
        * )     case "$asctime_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -11023,6 +11030,26 @@ eval $inlibc
 set atoll d_atoll
 eval $inlibc
 
+: See if a file contains compiler warnings
+: See if a file contains compiler warnings
+case "$osname" in
+  'aix')
+       cat >compiler_warning <<EOSS
+# Sample for aix ('.5' indicates the column number in the line):
+#    "op.h", line 203.5: 1506-159 (E) Bit field type specified for op_type
+# Since the word 'warning' isn't present, use a fairly rigorous match of what
+# warning messages look like
+#            "    o        p        .  h   ", line    203      .   5        :   1506     -    159      (  E  )
+$grep -E "^\\"[A-Za-z][A-Za-z0-9_]*\.[ch]\\", line [1-9][0-9]*[.][1-9][0-9]*: [1-9][0-9]*-[1-9][0-9]* \([EW][)] " "\$1"
+EOSS
+        compiler_warning=./compiler_warning
+        chmod +x $compiler_warning
+    ;;
+     # Maybe a colon after the 'warning' would be appropriate
+  *) compiler_warning="$contains -i warning"
+    ;;
+esac
+
 : Look for GCC-style attribute format
 case "$d_attribute_format" in
 '')
@@ -11033,7 +11060,7 @@ $cat >attrib.c <<'EOCP'
 void my_special_printf(char* pat,...) __attribute__((__format__(__printf__,1,2)));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((format))."
                val="$undef"
        else
@@ -11063,14 +11090,21 @@ $cat >attrib.c <<EOCP
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
+#$i_inttypes I_INTTYPES
+#ifdef I_INTTYPES
+#include <inttypes.h>
+#endif
+#ifndef INTPTR_MAX
+#define intptr_t int
+#endif
 int null_printf (char* pat,...) __attribute__((__format__(__printf__,1,2)));
-int null_printf (char* pat,...) { return (int)pat; }
+int null_printf (char* pat,...) { return (int)(intptr_t)pat; }
 int main () { exit(null_printf(NULL)); }
 EOCP
        if $cc $ccflags -o attrib attrib.c >attrib.out 2>&1 ; then
            : run the executable in case it produces a run-time warning
            if $run ./attrib >>attrib.out 2>&1; then
-               if $contains 'warning' attrib.out >/dev/null 2>&1; then
+               if $compiler_warning attrib.out >/dev/null 2>&1; then
                    echo "Your C compiler doesn't allow __printf__ format to be null."
                    val="$undef"
                else
@@ -11105,7 +11139,7 @@ $cat >attrib.c <<'EOCP'
 char *go_get_some_memory( int how_many_bytes ) __attribute__((malloc));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((malloc))."
                val="$undef"
        else
@@ -11133,7 +11167,7 @@ $cat >attrib.c <<'EOCP'
 void do_something (char *some_pointer,...) __attribute__((nonnull(1)));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((nonnull))."
                val="$undef"
        else
@@ -11161,7 +11195,7 @@ $cat >attrib.c <<'EOCP'
 void fall_over_dead( void ) __attribute__((noreturn));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((noreturn))."
                val="$undef"
        else
@@ -11189,7 +11223,7 @@ $cat >attrib.c <<'EOCP'
 int square( int n ) __attribute__((pure));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((pure))."
                val="$undef"
        else
@@ -11217,7 +11251,7 @@ $cat >attrib.c <<'EOCP'
 int do_something( int dummy __attribute__((unused)), int n );
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((unused))."
                val="$undef"
        else
@@ -11245,7 +11279,7 @@ $cat >attrib.c <<'EOCP'
 int I_am_deprecated(void) __attribute__((deprecated));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((deprecated))."
                val="$undef"
        else
@@ -11273,7 +11307,7 @@ $cat >attrib.c <<'EOCP'
 int I_will_not_be_ignored(void) __attribute__((warn_unused_result));
 EOCP
 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
-       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
                echo "Your C compiler doesn't support __attribute__((warn_unused_result))."
                val="$undef"
        else
@@ -11291,6 +11325,62 @@ set d_attribute_warn_unused_result
 eval $setvar
 $rm -f attrib*
 
+: Look for GCC-style attribute always_inline
+case "$d_attribute_always_inline" in
+'')
+echo " "
+echo "Checking whether your compiler can handle __attribute__((always_inline)) ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+static __inline__ __attribute__((always_inline)) int I_will_always_be_inlined(void);
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+       if $compiler_warning attrib.out >/dev/null 2>&1; then
+               echo "Your C compiler doesn't support __attribute__((always_inline))."
+               val="$undef"
+       else
+               echo "Your C compiler supports __attribute__((always_inline))."
+               val="$define"
+       fi
+else
+       echo "Your C compiler doesn't seem to understand __attribute__ at all."
+       val="$undef"
+fi
+;;
+*) val="$d_attribute_always_inline" ;;
+esac
+set d_attribute_always_inline
+eval $setvar
+$rm -f attrib*
+
+: Look for GCC-style attribute visibility
+case "$d_attribute_visibility" in
+'')
+echo " "
+echo "Checking whether your compiler can handle __attribute__((visibility)) ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+__attribute__((visibility("hidden"))) int I_will_be_hidden(void);
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+        if $compiler_warning attrib.out >/dev/null 2>&1; then
+                echo "Your C compiler doesn't support __attribute__((visibility))."
+                val="$undef"
+        else
+                echo "Your C compiler supports __attribute__((visibility))."
+                val="$define"
+        fi
+else
+        echo "Your C compiler doesn't seem to understand __attribute__ at all."
+        val="$undef"
+fi
+;;
+*) val="$d_attribute_visibility" ;;
+esac
+set d_attribute_visibility
+eval $setvar
+$rm -f attrib*
+
 : see if getpgrp exists
 set getpgrp d_getpgrp
 eval $inlibc
@@ -11300,6 +11390,7 @@ case "$d_getpgrp" in
        echo " "
        echo "Checking to see which flavor of getpgrp is in use..."
        $cat >try.c <<EOP
+#include <stdio.h>
 #$i_unistd I_UNISTD
 #include <sys/types.h>
 #ifdef I_UNISTD
@@ -11366,6 +11457,7 @@ case "$d_setpgrp" in
        echo " "
        echo "Checking to see which flavor of setpgrp is in use..."
        $cat >try.c <<EOP
+#include <stdio.h>
 #$i_unistd I_UNISTD
 #include <sys/types.h>
 #ifdef I_UNISTD
@@ -11948,7 +12040,6 @@ set socketpair d_sockpair
 eval $inlibc
 
 
-echo " "
 echo "Checking the availability sa_len in the sock struct ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
@@ -11965,7 +12056,6 @@ fi
 set d_sockaddr_sa_len; eval $setvar
 $rm_try
 
-echo " "
 echo "Checking the availability struct sockaddr_in6 ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
 set d_sockaddr_in6; eval $setvar
 $rm_try
 
-echo " "
+echo "Checking the availability struct sockaddr_storage ..." >&4
+$cat >try.c <<EOF
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+int main() {
+struct sockaddr_storage sastor;
+return (sastor.ss_family);
+}
+EOF
+val="$undef"
+set try; if eval $compile; then
+    val="$define"
+fi
+set d_sockaddr_storage; eval $setvar
+$rm_try
+
 echo "Checking the availability sin6_scope_id in struct sockaddr_in6 ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
@@ -12001,7 +12107,6 @@ fi
 set d_sin6_scope_id; eval $setvar
 $rm_try
 
-echo " "
 echo "Checking the availability struct ip_mreq ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
@@ -12019,7 +12124,6 @@ fi
 set d_ip_mreq; eval $setvar
 $rm_try
 
-echo " "
 echo "Checking the availability struct ip_mreq_source ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
@@ -12037,7 +12141,6 @@ fi
 set d_ip_mreq_source; eval $setvar
 $rm_try
 
-echo " "
 echo "Checking the availability struct ipv6_mreq ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
@@ -12055,7 +12158,6 @@ fi
 set d_ipv6_mreq; eval $setvar
 $rm_try
 
-echo " "
 echo "Checking the availability struct ipv6_mreq_source ..." >&4
 $cat >try.c <<EOF
 #include <sys/types.h>
@@ -12073,7 +12175,6 @@ fi
 set d_ipv6_mreq_source; eval $setvar
 $rm_try
 
-echo " "
 echo "Checking the availability of certain socket constants..." >&4
 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
     enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
@@ -12106,28 +12207,6 @@ case "$d_cmsghdr_s" in
 *)              echo "No, it doesn't." ;;
 esac
 
-
-: check for const keyword
-echo " "
-echo 'Checking to see if your C compiler knows about "const"...' >&4
-$cat >const.c <<'EOCP'
-typedef struct spug { int drokk; } spug;
-int main()
-{
-       const char *foo;
-       const spug y = { 0 };
-}
-EOCP
-if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
-       val="$define"
-       echo "Yup, it does."
-else
-       val="$undef"
-       echo "Nope, it doesn't."
-fi
-set d_const
-eval $setvar
-
 : see if copysign exists
 set copysign d_copysign
 eval $inlibc
@@ -12203,7 +12282,7 @@ case "$d_crypt_r" in
        esac
        case "$crypt_r_proto" in
        ''|0)   d_crypt_r=undef
-               crypt_r_proto=0
+               crypt_r_proto=0
                echo "Disabling crypt_r, cannot determine prototype." >&4 ;;
        * )     case "$crypt_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12260,7 +12339,7 @@ case "$d_ctermid_r" in
        esac
        case "$ctermid_r_proto" in
        ''|0)   d_ctermid_r=undef
-               ctermid_r_proto=0
+               ctermid_r_proto=0
                echo "Disabling ctermid_r, cannot determine prototype." >&4 ;;
        * )     case "$ctermid_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12313,7 +12392,7 @@ case "$d_ctime_r" in
        esac
        case "$ctime_r_proto" in
        ''|0)   d_ctime_r=undef
-               ctime_r_proto=0
+               ctime_r_proto=0
                echo "Disabling ctime_r, cannot determine prototype." >&4 ;;
        * )     case "$ctime_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12338,37 +12417,6 @@ esac
 set cuserid d_cuserid
 eval $inlibc
 
-: see if this is a limits.h system
-set limits.h i_limits
-eval $inhdr
-
-: See if number of significant digits in a double precision number is known
-echo " "
-$cat >dbl_dig.c <<EOM
-#$i_limits I_LIMITS
-#$i_float I_FLOAT
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifdef DBL_DIG
-printf("Contains DBL_DIG");
-#endif
-EOM
-$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
-if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
-       echo "DBL_DIG found." >&4
-       val="$define"
-else
-       echo "DBL_DIG NOT found." >&4
-       val="$undef"
-fi
-$rm -f dbl_dig.?
-set d_dbl_dig
-eval $setvar
-
 : see if dbm.h is available
 : see if dbmclose exists
 set dbmclose d_dbmclose
@@ -12541,14 +12589,10 @@ $cat >dirfd.c <<EOM
 #include <sys/ndir.h>
 #else
 #ifdef I_SYS_DIR
-#ifdef hp9000s500
-#include <ndir.h>      /* may be wrong in the future */
-#else
 #include <sys/dir.h>
 #endif
 #endif
 #endif
-#endif
 int main() {
        DIR *dirp = opendir(".");
        if (dirfd(dirp) >= 0)
@@ -12716,7 +12760,7 @@ case "$d_drand48_r" in
        esac
        case "$drand48_r_proto" in
        ''|0)   d_drand48_r=undef
-               drand48_r_proto=0
+               drand48_r_proto=0
                echo "Disabling drand48_r, cannot determine prototype." >&4 ;;
        * )     case "$drand48_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12746,6 +12790,86 @@ eval $hasproto
 set dup2 d_dup2
 eval $inlibc
 
+: see if dup3 exists
+set dup3 d_dup3
+eval $inlibc
+
+: see if localeconv_l exists
+set localeconv_l d_localeconv_l
+eval $inlibc
+
+: see if this is an xlocale.h system
+set xlocale.h i_xlocale
+eval $inhdr
+
+: see if newlocale exists
+set newlocale d_newlocale
+eval $inlibc
+
+: see if freelocale exists
+set freelocale d_freelocale
+eval $inlibc
+
+: see if uselocale exists
+set uselocale d_uselocale
+eval $inlibc
+
+: see if duplocale exists
+set duplocale d_duplocale
+eval $inlibc
+
+: see if querylocale exists
+set querylocale d_querylocale
+eval $inlibc
+
+: if we have xlocale.h, check whether it is needed
+case "$i_xlocale$d_newlocale$xlocale_needed" in
+"$define$define")
+       echo "Checking if xlocale.h is needed..." >&4
+       $cat >try.c <<EOF
+#include <locale.h>
+#include <stdio.h>
+#ifdef TRY_XLOCALE
+#include <xlocale.h>
+#endif
+#$d_localeconv_l HAVE_LOCALECONV_L
+
+#ifdef HAVE_LOCALECONV_L
+struct lconv *(*lcptr)(locale_t) = localeconv_l;
+#endif
+
+int main(void) {
+  locale_t lc = newlocale(LC_ALL_MASK, "C", (locale_t)0);
+
+#ifdef HAVE_LOCALECONV_L
+  /* FreeBSD hides only localeconv_l() in xlocale.h */
+  struct lconv *lcbuf = localeconv_l(lc);
+  printf("decimal: %s\n", lcbuf->decimal_point);
+#endif
+
+  freelocale(lc);
+  return 0;
+}
+EOF
+       set try
+       if eval $compile && $run ./try > /dev/null 2>&1 ; then
+               echo "xlocale.h isn't needed" >&4
+               xlocale_needed=$undef
+       else
+               set try -DTRY_XLOCALE
+               if eval $compile && $run ./try > /dev/null 2>&1 ; then
+                       xlocale_needed=$define
+                       echo "xlocale.h is needed" >&4
+               else
+                       echo "I can't build my test either way" >&4
+                       xlocale_needed=$undef
+               fi
+       fi
+       $rm_try
+       ;;
+*) xlocale_needed=$undef ;;
+esac
+
 : see if eaccess exists
 set eaccess d_eaccess
 eval $inlibc
@@ -12803,7 +12927,7 @@ case "$d_endgrent_r" in
        esac
        case "$endgrent_r_proto" in
        ''|0)   d_endgrent_r=undef
-               endgrent_r_proto=0
+               endgrent_r_proto=0
                echo "Disabling endgrent_r, cannot determine prototype." >&4 ;;
        * )     case "$endgrent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12856,7 +12980,7 @@ case "$d_endhostent_r" in
        esac
        case "$endhostent_r_proto" in
        ''|0)   d_endhostent_r=undef
-               endhostent_r_proto=0
+               endhostent_r_proto=0
                echo "Disabling endhostent_r, cannot determine prototype." >&4 ;;
        * )     case "$endhostent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12905,7 +13029,7 @@ case "$d_endnetent_r" in
        esac
        case "$endnetent_r_proto" in
        ''|0)   d_endnetent_r=undef
-               endnetent_r_proto=0
+               endnetent_r_proto=0
                echo "Disabling endnetent_r, cannot determine prototype." >&4 ;;
        * )     case "$endnetent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -12954,7 +13078,7 @@ case "$d_endprotoent_r" in
        esac
        case "$endprotoent_r_proto" in
        ''|0)   d_endprotoent_r=undef
-               endprotoent_r_proto=0
+               endprotoent_r_proto=0
                echo "Disabling endprotoent_r, cannot determine prototype." >&4 ;;
        * )     case "$endprotoent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -13091,7 +13215,7 @@ case "$d_endpwent_r" in
        esac
        case "$endpwent_r_proto" in
        ''|0)   d_endpwent_r=undef
-               endpwent_r_proto=0
+               endpwent_r_proto=0
                echo "Disabling endpwent_r, cannot determine prototype." >&4 ;;
        * )     case "$endpwent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -13140,7 +13264,7 @@ case "$d_endservent_r" in
        esac
        case "$endservent_r_proto" in
        ''|0)   d_endservent_r=undef
-               endservent_r_proto=0
+               endservent_r_proto=0
                echo "Disabling endservent_r, cannot determine prototype." >&4 ;;
        * )     case "$endservent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -13360,12 +13484,7 @@ extern int errno;
 #ifdef I_UNISTD
 #include <unistd.h>
 #endif
-#$i_string I_STRING
-#ifdef I_STRING
 #include <string.h>
-#else
-#include <strings.h>
-#endif
 $signal_t blech(int x) { exit(3); }
 EOCP
        $cat >> try.c <<'EOCP'
@@ -13731,7 +13850,7 @@ int main() {
 EOP
        set try
        if eval $compile && $to try.c; then
-               case `$run ./try` in
+               case `$run ./try` in
                Pass_changed)
                        echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
                        d_stdio_ptr_lval_sets_cnt="$define" ;;
@@ -13796,7 +13915,7 @@ case "$d_stdstdio:$d_stdio_ptr_lval" in
 "$define:$define")
        case "$d_stdio_cnt_lval$d_stdio_ptr_lval_sets_cnt" in
        *$define*)
-               echo "You seem to have 'fast stdio' to directly manipulate the stdio buffers." >& 4
+               echo "You seem to have 'fast stdio' to directly manipulate the stdio buffers." >&4
                val="$define"
                ;;
        esac
@@ -13805,8 +13924,6 @@ esac
 set d_faststdio
 eval $setvar
 
-
-
 : see if fchdir exists
 set fchdir d_fchdir
 eval $inlibc
@@ -13995,6 +14112,13 @@ eval $inlibc
 set fegetround d_fegetround
 eval $inlibc
 
+: see if ffs exists
+set ffs d_ffs
+eval $inlibc
+: see if ffsl exists
+set ffsl d_ffsl
+eval $inlibc
+
 : see if fgetpos exists
 set fgetpos d_fgetpos
 eval $inlibc
@@ -14032,17 +14156,10 @@ eval $inlibc
 set fp_class d_fp_class
 eval $inlibc
 
-: see if this is a math.h system
-set math.h i_math
-eval $inhdr
-
 : check for fpclassify
 echo "Checking to see if you have fpclassify..." >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
-#ifdef I_MATH
 #include <math.h>
-#endif
 int main() { return fpclassify(1.0) == FP_NORMAL ? 0 : 1; }
 EOCP
 set try
@@ -14107,30 +14224,6 @@ $rm_try
 set d_fpos64_t
 eval $setvar
 
-: see if this is an xlocale.h system
-set xlocale.h i_xlocale
-eval $inhdr
-
-: see if newlocale exists
-set newlocale d_newlocale
-eval $inlibc
-
-: see if freelocale exists
-set freelocale d_freelocale
-eval $inlibc
-
-: see if uselocale exists
-set uselocale d_uselocale
-eval $inlibc
-
-: see if duplocale exists
-set duplocale d_duplocale
-eval $inlibc
-
-: see if querylocale exists
-set querylocale d_querylocale
-eval $inlibc
-
 : see if frexpl exists
 set frexpl d_frexpl
 eval $inlibc
@@ -14176,7 +14269,6 @@ eval $inlibc
 set fstatvfs d_fstatvfs
 eval $inlibc
 
-
 : see if fsync exists
 set fsync d_fsync
 eval $inlibc
@@ -14194,9 +14286,11 @@ echo " "
 echo "Checking if you have a working futimes()" >&4
 $cat >try.c <<EOCP
 #include <stdio.h>
+#include <stdlib.h>
 #include <sys/time.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <stdlib.h>
 
 int main ()
 {
@@ -14313,43 +14407,123 @@ eval $inlibc
 set getcwd d_getcwd
 eval $inlibc
 
-: see if getespwnam exists
-set getespwnam d_getespwnam
-eval $inlibc
+: check for getenv behavior
+case "$d_getenv_preserves_other_thread" in
+'')
+$echo "Checking to see if getenv() preserves a different thread's results" >&4
+$cat >try.c <<EOCP
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <string.h>
+#$i_pthread I_PTHREAD
+#ifdef I_PTHREAD
+#  include <pthread.h>
+#endif
 
-: see if getfsstat exists
-set getfsstat d_getfsstat
-eval $inlibc
+void *
+thread_start(void * arg)
+{
+    return (void *) getenv("HOME");
+}
 
-: see if getgrent exists
-set getgrent d_getgrent
-eval $inlibc
+int main() {
+    char * main_buffer;
+    char save_main_buffer[1000];
+    pthread_t subthread;
+    pthread_attr_t attr;
 
-: see if getgrent_r exists
-set getgrent_r d_getgrent_r
-eval $inlibc
-case "$d_getgrent_r" in
-"$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
-       case "$d_getgrent_r_proto:$usethreads" in
-       ":define")      d_getgrent_r_proto=define
-               set d_getgrent_r_proto getgrent_r $hdrs
-               eval $hasproto ;;
-       *)      ;;
-       esac
-       case "$d_getgrent_r_proto" in
-       define)
-       case "$getgrent_r_proto" in
-       ''|0) try='int getgrent_r(struct group*, char*, size_t, struct group**);'
-       ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBWR ;;
-       esac
-       case "$getgrent_r_proto" in
-       ''|0) try='int getgrent_r(struct group*, char*, int, struct group**);'
-       ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBIR ;;
-       esac
-       case "$getgrent_r_proto" in
-       ''|0) try='struct group* getgrent_r(struct group*, char*, size_t);'
-       ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=S_SBW ;;
+    main_buffer = getenv("PATH");
+
+    /* If too large for our generous allowance, return we couldn't figure it
+     * out. */
+    if (strlen(main_buffer) >= sizeof(save_main_buffer)) {
+        exit(2);
+    }
+
+    strcpy(save_main_buffer, main_buffer);
+
+    if (pthread_attr_init(&attr) != 0) {
+        exit(2);
+    }
+
+    if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) {
+        exit(2);
+    }
+
+    if (pthread_join(subthread, NULL) != 0) {
+        exit(2);
+    }
+
+    exit(! (strcmp(main_buffer, save_main_buffer) == 0));
+}
+EOCP
+val=
+set try
+if eval $compile_ok; then
+    $run ./try
+    rc=$?
+    case "$rc" in
+       0) echo "getenv() didn't destroy another thread's buffer" >&4
+          val=$define
+          ;;
+       1) echo "getenv() does destroy another thread's buffer" >&4
+          val=$undef
+          ;;
+       *) echo "Couldn't determine if getenv() destroys another thread's return value (code=$rc); assuming it does" >&4
+          val=$undef
+          ;;
+    esac
+else
+    echo "(I can't seem to compile the test program.)" >&4
+    echo "Assuming that your C library's getenv destroys another thread's return value." >&4
+    val=$undef
+fi
+set d_getenv_preserves_other_thread
+eval $setvar
+$rm_try
+;;
+esac
+
+: see if getespwnam exists
+set getespwnam d_getespwnam
+eval $inlibc
+
+: see if getfsstat exists
+set getfsstat d_getfsstat
+eval $inlibc
+
+: see if getgrent exists
+set getgrent d_getgrent
+eval $inlibc
+
+: see if getgrent_r exists
+set getgrent_r d_getgrent_r
+eval $inlibc
+case "$d_getgrent_r" in
+"$define")
+       hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
+       case "$d_getgrent_r_proto:$usethreads" in
+       ":define")      d_getgrent_r_proto=define
+               set d_getgrent_r_proto getgrent_r $hdrs
+               eval $hasproto ;;
+       *)      ;;
+       esac
+       case "$d_getgrent_r_proto" in
+       define)
+       case "$getgrent_r_proto" in
+       ''|0) try='int getgrent_r(struct group*, char*, size_t, struct group**);'
+       ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBWR ;;
+       esac
+       case "$getgrent_r_proto" in
+       ''|0) try='int getgrent_r(struct group*, char*, int, struct group**);'
+       ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBIR ;;
+       esac
+       case "$getgrent_r_proto" in
+       ''|0) try='struct group* getgrent_r(struct group*, char*, size_t);'
+       ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=S_SBW ;;
        esac
        case "$getgrent_r_proto" in
        ''|0) try='struct group* getgrent_r(struct group*, char*, int);'
@@ -14365,7 +14539,7 @@ case "$d_getgrent_r" in
        esac
        case "$getgrent_r_proto" in
        ''|0)   d_getgrent_r=undef
-               getgrent_r_proto=0
+               getgrent_r_proto=0
                echo "Disabling getgrent_r, cannot determine prototype." >&4 ;;
        * )     case "$getgrent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14418,7 +14592,7 @@ case "$d_getgrgid_r" in
        esac
        case "$getgrgid_r_proto" in
        ''|0)   d_getgrgid_r=undef
-               getgrgid_r_proto=0
+               getgrgid_r_proto=0
                echo "Disabling getgrgid_r, cannot determine prototype." >&4 ;;
        * )     case "$getgrgid_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14475,7 +14649,7 @@ case "$d_getgrnam_r" in
        esac
        case "$getgrnam_r_proto" in
        ''|0)   d_getgrnam_r=undef
-               getgrnam_r_proto=0
+               getgrnam_r_proto=0
                echo "Disabling getgrnam_r, cannot determine prototype." >&4 ;;
        * )     case "$getgrnam_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14653,7 +14827,7 @@ case "$d_gethostbyaddr_r" in
        esac
        case "$gethostbyaddr_r_proto" in
        ''|0)   d_gethostbyaddr_r=undef
-               gethostbyaddr_r_proto=0
+               gethostbyaddr_r_proto=0
                echo "Disabling gethostbyaddr_r, cannot determine prototype." >&4 ;;
        * )     case "$gethostbyaddr_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14702,7 +14876,7 @@ case "$d_gethostbyname_r" in
        esac
        case "$gethostbyname_r_proto" in
        ''|0)   d_gethostbyname_r=undef
-               gethostbyname_r_proto=0
+               gethostbyname_r_proto=0
                echo "Disabling gethostbyname_r, cannot determine prototype." >&4 ;;
        * )     case "$gethostbyname_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14763,7 +14937,7 @@ case "$d_gethostent_r" in
        esac
        case "$gethostent_r_proto" in
        ''|0)   d_gethostent_r=undef
-               gethostent_r_proto=0
+               gethostent_r_proto=0
                echo "Disabling gethostent_r, cannot determine prototype." >&4 ;;
        * )     case "$gethostent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14829,7 +15003,7 @@ case "$d_getlogin_r" in
        esac
        case "$getlogin_r_proto" in
        ''|0)   d_getlogin_r=undef
-               getlogin_r_proto=0
+               getlogin_r_proto=0
                echo "Disabling getlogin_r, cannot determine prototype." >&4 ;;
        * )     case "$getlogin_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14922,7 +15096,7 @@ case "$d_getnetbyaddr_r" in
        esac
        case "$getnetbyaddr_r_proto" in
        ''|0)   d_getnetbyaddr_r=undef
-               getnetbyaddr_r_proto=0
+               getnetbyaddr_r_proto=0
                echo "Disabling getnetbyaddr_r, cannot determine prototype." >&4 ;;
        * )     case "$getnetbyaddr_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -14975,7 +15149,7 @@ case "$d_getnetbyname_r" in
        esac
        case "$getnetbyname_r_proto" in
        ''|0)   d_getnetbyname_r=undef
-               getnetbyname_r_proto=0
+               getnetbyname_r_proto=0
                echo "Disabling getnetbyname_r, cannot determine prototype." >&4 ;;
        * )     case "$getnetbyname_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15036,7 +15210,7 @@ case "$d_getnetent_r" in
        esac
        case "$getnetent_r_proto" in
        ''|0)   d_getnetent_r=undef
-               getnetent_r_proto=0
+               getnetent_r_proto=0
                echo "Disabling getnetent_r, cannot determine prototype." >&4 ;;
        * )     case "$getnetent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15124,7 +15298,7 @@ case "$d_getprotobyname_r" in
        esac
        case "$getprotobyname_r_proto" in
        ''|0)   d_getprotobyname_r=undef
-               getprotobyname_r_proto=0
+               getprotobyname_r_proto=0
                echo "Disabling getprotobyname_r, cannot determine prototype." >&4 ;;
        * )     case "$getprotobyname_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15173,7 +15347,7 @@ case "$d_getprotobynumber_r" in
        esac
        case "$getprotobynumber_r_proto" in
        ''|0)   d_getprotobynumber_r=undef
-               getprotobynumber_r_proto=0
+               getprotobynumber_r_proto=0
                echo "Disabling getprotobynumber_r, cannot determine prototype." >&4 ;;
        * )     case "$getprotobynumber_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15226,7 +15400,7 @@ case "$d_getprotoent_r" in
        esac
        case "$getprotoent_r_proto" in
        ''|0)   d_getprotoent_r=undef
-               getprotoent_r_proto=0
+               getprotoent_r_proto=0
                echo "Disabling getprotoent_r, cannot determine prototype." >&4 ;;
        * )     case "$getprotoent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15300,7 +15474,7 @@ case "$d_getpwent_r" in
        esac
        case "$getpwent_r_proto" in
        ''|0)   d_getpwent_r=undef
-               getpwent_r_proto=0
+               getpwent_r_proto=0
                echo "Disabling getpwent_r, cannot determine prototype." >&4 ;;
        * )     case "$getpwent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15353,7 +15527,7 @@ case "$d_getpwnam_r" in
        esac
        case "$getpwnam_r_proto" in
        ''|0)   d_getpwnam_r=undef
-               getpwnam_r_proto=0
+               getpwnam_r_proto=0
                echo "Disabling getpwnam_r, cannot determine prototype." >&4 ;;
        * )     case "$getpwnam_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15406,7 +15580,7 @@ case "$d_getpwuid_r" in
        esac
        case "$getpwuid_r_proto" in
        ''|0)   d_getpwuid_r=undef
-               getpwuid_r_proto=0
+               getpwuid_r_proto=0
                echo "Disabling getpwuid_r, cannot determine prototype." >&4 ;;
        * )     case "$getpwuid_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15469,7 +15643,7 @@ case "$d_getservbyname_r" in
        esac
        case "$getservbyname_r_proto" in
        ''|0)   d_getservbyname_r=undef
-               getservbyname_r_proto=0
+               getservbyname_r_proto=0
                echo "Disabling getservbyname_r, cannot determine prototype." >&4 ;;
        * )     case "$getservbyname_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15518,7 +15692,7 @@ case "$d_getservbyport_r" in
        esac
        case "$getservbyport_r_proto" in
        ''|0)   d_getservbyport_r=undef
-               getservbyport_r_proto=0
+               getservbyport_r_proto=0
                echo "Disabling getservbyport_r, cannot determine prototype." >&4 ;;
        * )     case "$getservbyport_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15571,7 +15745,7 @@ case "$d_getservent_r" in
        esac
        case "$getservent_r_proto" in
        ''|0)   d_getservent_r=undef
-               getservent_r_proto=0
+               getservent_r_proto=0
                echo "Disabling getservent_r, cannot determine prototype." >&4 ;;
        * )     case "$getservent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15629,7 +15803,7 @@ case "$d_getspnam_r" in
        esac
        case "$getspnam_r_proto" in
        ''|0)   d_getspnam_r=undef
-               getspnam_r_proto=0
+               getspnam_r_proto=0
                echo "Disabling getspnam_r, cannot determine prototype." >&4 ;;
        * )     case "$getspnam_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15693,7 +15867,7 @@ case "$d_gmtime_r" in
        esac
        case "$gmtime_r_proto" in
        ''|0)   d_gmtime_r=undef
-               gmtime_r_proto=0
+               gmtime_r_proto=0
                echo "Disabling gmtime_r, cannot determine prototype." >&4 ;;
        * )     case "$gmtime_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -15776,39 +15950,6 @@ eval $inlibc
 set ilogbl d_ilogbl
 eval $inlibc
 
-: index or strchr
-echo " "
-if set index val -f; eval $csym; $val; then
-       if set strchr val -f d_strchr; eval $csym; $val; then
-               if $contains strchr "$strings" >/dev/null 2>&1 ; then
-                       val="$define"
-                       vali="$undef"
-                       echo "strchr() found." >&4
-               else
-                       val="$undef"
-                       vali="$define"
-                       echo "index() found." >&4
-               fi
-       else
-               val="$undef"
-               vali="$define"
-               echo "index() found." >&4
-       fi
-else
-       if set strchr val -f d_strchr; eval $csym; $val; then
-               val="$define"
-               vali="$undef"
-               echo "strchr() found." >&4
-       else
-               echo "No index() or strchr() found!" >&4
-               val="$undef"
-               vali="$undef"
-       fi
-fi
-set d_strchr; eval $setvar
-val="$vali"
-set d_index; eval $setvar
-
 : check whether inet_aton exists
 set inet_aton d_inetaton
 eval $inlibc
@@ -15877,10 +16018,7 @@ $rm -f isblank*
 : check for isfinite
 echo "Checking to see if you have isfinite..." >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
-#ifdef I_MATH
 #include <math.h>
-#endif
 int main() { return isfinite(0.0); }
 EOCP
 set try
@@ -15902,10 +16040,7 @@ eval $inlibc
 : check for isinf
 echo "Checking to see if you have isinf..." >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
-#ifdef I_MATH
 #include <math.h>
-#endif
 int main() { return isinf(0.0); }
 EOCP
 set try
@@ -15927,11 +16062,8 @@ eval $inlibc
 : check for isless
 echo "Checking to see if you have isless..." >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
-#ifdef I_MATH
 #include <math.h>
-#endif
-int main() { return isless(0.0); }
+int main() { return isless(2.0, 1.0); }
 EOCP
 set try
 if eval $compile; then
@@ -15948,10 +16080,7 @@ eval $setvar
 : check for isnan
 echo "Checking to see if you have isnan..." >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
-#ifdef I_MATH
 #include <math.h>
-#endif
 int main() { return isnan(0.0); }
 EOCP
 set try
@@ -15973,10 +16102,7 @@ eval $inlibc
 : check for isnormal
 echo "Checking to see if you have isnormal..." >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
-#ifdef I_MATH
 #include <math.h>
-#endif
 int main() { return isnormal(0.0); }
 EOCP
 set try
@@ -16030,27 +16156,24 @@ esac
 
 : see if lchown exists
 echo " "
-$cat > try.c <<'EOCP'
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char lchown(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char lchown();
-int main() {
-    /*  The GNU C library defines this for functions which it implements
-        to always fail with ENOSYS.  Some functions are actually named
-       something starting with __ and the normal name is an alias.  */
-#if defined (__stub_lchown) || defined (__stub___lchown)
-choke me
-#else
-lchown();
+$cat > try.c <<EOCP
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#$i_unistd     I_UNISTD
+#ifdef I_UNISTD
+#  include <unistd.h>
 #endif
-; return 0; }
+int main(int argc, char *argv[])
+{
+   if (lchown("./try.c", -1, getgid()) == -1) {
+       exit(EXIT_FAILURE);
+   }
+   exit(EXIT_SUCCESS);
+}
 EOCP
 set try
-if eval $compile; then
+if eval $compile && ./try; then
     $echo "lchown() found." >&4
     val="$define"
 else
@@ -16059,18 +16182,13 @@ else
 fi
 set d_lchown
 eval $setvar
+$rm_try
 
 : See if number of significant digits in a double precision number is known
 echo " "
 $cat >ldbl_dig.c <<EOM
-#$i_limits I_LIMITS
-#$i_float I_FLOAT
-#ifdef I_LIMITS
 #include <limits.h>
-#endif
-#ifdef I_FLOAT
 #include <float.h>
-#endif
 #ifdef LDBL_DIG
 printf("Contains LDBL_DIG");
 #endif
@@ -16097,11 +16215,9 @@ eval $inlibc
 
 : check to see if math.h defines _LIB_VERSION
 d_libm_lib_version="$undef"
-case $i_math in
-    $define)
-       echo " "
-       echo "Checking to see if your libm supports _LIB_VERSION..." >&4
-       $cat >try.c <<EOCP
+echo " "
+echo "Checking to see if your libm supports _LIB_VERSION..." >&4
+$cat >try.c <<EOCP
 #include <unistd.h>
 #include <math.h>
 int main (int argc, char *argv[])
@@ -16110,18 +16226,15 @@ int main (int argc, char *argv[])
     return (0);
     } /* main */
 EOCP
-       set try
-       if eval $compile; then
-           foo=`$run ./try`
-           echo "Yes, it does ($foo)" >&4
-           d_libm_lib_version="$define"
-       else
-           echo "No, it does not (probably harmless)" >&4
-           fi
-       $rm_try
-       ;;
-
-    esac
+set try
+if eval $compile; then
+    foo=`$run ./try`
+    echo "Yes, it does ($foo)" >&4
+    d_libm_lib_version="$define"
+else
+    echo "No, it does not (probably harmless)" >&4
+    fi
+$rm_try
 
 : see if link exists
 set link d_link
@@ -16143,10 +16256,6 @@ eval $inlibc
 set llroundl d_llroundl
 eval $inlibc
 
-: see if localeconv_l exists
-set localeconv_l d_localeconv_l
-eval $inlibc
-
 : see if localtime_r exists
 set localtime_r d_localtime_r
 eval $inlibc
@@ -16171,7 +16280,7 @@ case "$d_localtime_r" in
        esac
        case "$localtime_r_proto" in
        ''|0)   d_localtime_r=undef
-               localtime_r_proto=0
+               localtime_r_proto=0
                echo "Disabling localtime_r, cannot determine prototype." >&4 ;;
        * )     case "$localtime_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -16203,7 +16312,6 @@ REENTRANT_PROTO*)
 #$i_unistd     I_UNISTD
 #$i_time       I_TIME
 #$i_stdlib     I_STDLIB
-#$i_string     I_STRING
 #$i_malloc     I_MALLOC
 #ifdef I_SYS_TYPES
 #  include <sys/types.h>
@@ -16217,16 +16325,13 @@ REENTRANT_PROTO*)
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
-#ifdef I_STRING
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif
+#include <string.h>
 #ifdef I_MALLOC
 #  include <malloc.h>
 #endif
 int main()
 {
+    int result = 0;
     time_t t = time(0L);
     char w_tz[]="TZ" "=GMT+5",
         e_tz[]="TZ" "=GMT-5",
@@ -16245,8 +16350,10 @@ int main()
     localtime_r(&t, &tm_w);
 
     if( memcmp(&tm_e, &tm_w, sizeof(struct tm)) == 0 )
-       return 1;
-    return 0;
+       result = 1;
+
+    free(tz_e);free(tz_w);
+    return result;
 }
 EOCP
        set try
@@ -16319,6 +16426,10 @@ eval $inlibc
 set malloc_good_size d_malloc_good_size
 eval $inlibc
 
+: see if malloc_usable_size exists
+set malloc_usable_size d_malloc_usable_size
+eval $inlibc
+
 : see if mblen exists
 set mblen d_mblen
 eval $inlibc
@@ -16340,12 +16451,46 @@ set mbtowc d_mbtowc
 eval $inlibc
 
 : see if memmem exists
-set memmem d_memmem
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_memmem_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_memmem_proto memmem literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_memmem_proto" in
+    define) # see if memmem exists
+       set memmem d_memmem
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_memmem
+       eval $setvar
+       ;;
+esac
 
 : see if memrchr exists
-set memrchr d_memrchr
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_memrchr_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_memrchr_proto memrchr literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_memrchr_proto" in
+    define) # see if memrchr exists
+       set memrchr d_memrchr
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_memrchr
+       eval $setvar
+       ;;
+esac
 
 : see if mkdir exists
 set mkdir d_mkdir
@@ -16359,6 +16504,10 @@ eval $inlibc
 set mkfifo d_mkfifo
 eval $inlibc
 
+: see if mkostemp exists
+set mkostemp d_mkostemp
+eval $inlibc
+
 : see if mkstemp exists
 set mkstemp d_mkstemp
 eval $inlibc
@@ -16371,7 +16520,7 @@ eval $inlibc
 set mktime d_mktime
 eval $inlibc
 
-: see if this is a sys/mman.h system
+: see if sys/mman.h has to be included
 set sys/mman.h i_sysmman
 eval $inhdr
 
@@ -16396,8 +16545,6 @@ END
        ;;
 esac
 
-
-
 : see if sqrtl exists
 set sqrtl d_sqrtl
 eval $inlibc
@@ -16416,7 +16563,7 @@ eval $inlibc
 
 : see if prototype for modfl is available
 echo " "
-set d_modflproto modfl $i_math math.h
+set d_modflproto modfl define math.h
 eval $hasproto
 
 if $test "$uselongdouble" = "$define"; then
@@ -16527,7 +16674,6 @@ case "$d_msghdr_s" in
 *)              echo "No, it doesn't." ;;
 esac
 
-
 : see if msync exists
 set msync d_msync
 eval $inlibc
@@ -16568,6 +16714,130 @@ eval $inhdr
 set nl_langinfo d_nl_langinfo
 eval $inlibc
 
+: see if locale.h is available
+set locale.h i_locale
+eval $inhdr
+
+: check for nl_langinfo_l item
+$cat <<EOM
+
+Checking to see if you have nl_langinfo_l(), and that it is thread-safe
+EOM
+$cat >try.c <<EOCP
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#include <string.h>
+#$i_langinfo I_LANGINFO
+#ifdef I_LANGINFO
+#  include <langinfo.h>
+#endif
+#$i_pthread I_PTHREAD
+#ifdef I_PTHREAD
+#  include <pthread.h>
+#endif
+#$i_locale I_LOCALE
+#ifdef I_LOCALE
+#  include <locale.h>
+#endif
+
+void *
+thread_start(void * arg)
+{
+    nl_langinfo(RADIXCHAR);
+}
+
+int main() {
+    char * main_buffer;
+    char save_main_buffer[1000];
+    pthread_t subthread;
+    pthread_attr_t attr;
+
+    main_buffer = nl_langinfo_l(CODESET, newlocale(LC_ALL_MASK, "C", 0));
+
+    /* If too large for our generous allowance, just assume we don't have
+     * it. */
+    if (strlen(main_buffer) >= sizeof(save_main_buffer)) {
+        exit(1);
+    }
+
+    strcpy(save_main_buffer, main_buffer);
+
+    if (pthread_attr_init(&attr) != 0) {
+        exit(1);
+    }
+
+    if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) {
+        exit(1);
+    }
+
+    if (pthread_join(subthread, NULL) != 0) {
+        exit(1);
+    }
+
+    exit(! (strcmp(main_buffer, save_main_buffer) == 0));
+}
+EOCP
+case "$usethreads" in
+    define)
+        set try
+        if eval $compile; then
+            echo "Your system has nl_langinfo_l()..." >&4
+            d_nl_langinfo_l="$define"
+            echo "$d_nl_langinfo_l" >&4
+            if $run ./try; then
+                echo "and it is thread-safe (just as I'd hoped)." >&4
+                d_thread_safe_nl_langinfo_l="$define"
+                echo "$d_thread_safe_nl_langinfo_l" >&4
+            else
+                echo "but it isn't thread-safe." >&4
+            fi
+        else
+            echo "your system does not have nl_langinfo_l()" >&4
+        fi
+        ;;
+    *) echo "Since threads aren't selected, we won't bother looking for nl_langinfo_l()" >&4
+esac
+if test X"$d_nl_langinfo_l" = X; then
+       d_nl_langinfo_l="$undef"
+fi
+if test X"$d_thread_safe_nl_langinfo_l" = X; then
+       d_thread_safe_nl_langinfo_l="$undef"
+fi
+$rm_try
+
+: Look for non 'int'-sized bitfields
+case "$d_non_int_bitfields" in
+'')
+echo " " >&4
+echo "Checking whether your compiler can handle struct bitfields that aren't 'int' or 'unsigned int' ..." >&4
+$cat >try.c <<'EOCP'
+#include <stdio.h>
+struct foo {
+    unsigned char byte:1;
+    unsigned short halfword:1;
+} bar;
+EOCP
+if $cc $ccflags -c try.c >try.out 2>&1 ; then
+       if $compiler_warning try.out >/dev/null 2>&1; then
+               echo "Your C compiler doesn't support struct bitfields that aren't 'int' or 'unsigned int'." >&4
+               val="$undef"
+       else
+               echo "Your C compiler supports struct bitfields besides 'int' and 'unsigned int'." >&4
+               val="$define"
+       fi
+else
+       echo "Your C compiler doesn't seem to understand struct bitfields that aren't 'int' or 'unsigned int' at all." >&4
+       val="$undef"
+fi
+;;
+*) val="$d_non_int_bitfields" ;;
+esac
+set d_non_int_bitfields
+eval $setvar
+$rm_try
+
 : see if this is a quadmath.h system
 set quadmath.h i_quadmath
 eval $inhdr
@@ -16771,6 +17041,10 @@ $cat <<EOP >try.c
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
+#$i_inttypes I_INTTYPES
+#ifdef I_INTTYPES
+#include <inttypes.h>
+#endif
 #include <sys/types.h>
 #include <signal.h>
 #ifdef SIGFPE
 case "$nv_preserves_uv_bits" in
 \-[1-9]*)
        nv_preserves_uv_bits=`expr 0 - $nv_preserves_uv_bits`
-       $echo "Your NVs can preserve all $nv_preserves_uv_bits bits of your UVs."  2>&1
+       $echo "Your NVs can preserve all $nv_preserves_uv_bits bits of your UVs."  >&4
        d_nv_preserves_uv="$define"
        ;;
-[1-9]*)        $echo "Your NVs can preserve only $nv_preserves_uv_bits bits of your UVs."  2>&1
+[1-9]*)        $echo "Your NVs can preserve only $nv_preserves_uv_bits bits of your UVs."  >&4
        d_nv_preserves_uv="$undef" ;;
-*)     $echo "Can't figure out how many bits your NVs preserve." 2>&1
+*)     $echo "Can't figure out how many bits your NVs preserve." >&4
        nv_preserves_uv_bits="0" ;;
 esac
 $rm_try
@@ -16912,12 +17186,7 @@ $cat <<EOP >try.c
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
-#$i_string I_STRING
-#ifdef I_STRING
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif
+#include <string.h>
 #include <sys/types.h>
 #include <signal.h>
 #ifdef SIGFPE
 set pause d_pause
 eval $inlibc
 
+: see if pipe2 exists
+set pipe2 d_pipe2
+eval $inlibc
+
 : see if poll exists
 set poll d_poll
 eval $inlibc
@@ -17374,7 +17647,7 @@ case "$d_random_r" in
        esac
        case "$random_r_proto" in
        ''|0)   d_random_r=undef
-               random_r_proto=0
+               random_r_proto=0
                echo "Disabling random_r, cannot determine prototype." >&4 ;;
        * )     case "$random_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -17429,7 +17702,7 @@ case "$d_readdir64_r" in
        esac
        case "$readdir64_r_proto" in
        ''|0)   d_readdir64_r=undef
-               readdir64_r_proto=0
+               readdir64_r_proto=0
                echo "Disabling readdir64_r, cannot determine prototype." >&4 ;;
        * )     case "$readdir64_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -17474,7 +17747,7 @@ case "$d_readdir_r" in
        esac
        case "$readdir_r_proto" in
        ''|0)   d_readdir_r=undef
-               readdir_r_proto=0
+               readdir_r_proto=0
                echo "Disabling readdir_r, cannot determine prototype." >&4 ;;
        * )     case "$readdir_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -17748,21 +18021,31 @@ END
 extern int errno;
 #endif
 int main() {
-    struct semid_ds arg;
+    union semun
+#ifndef HAS_UNION_SEMUN
+    {
+       int val;
+       struct semid_ds *buf;
+       unsigned short *array;
+    }
+#endif
+    arg;
+    struct semid_ds argbuf;
     int sem, st;
 
 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
     if (sem > -1) {
+       arg.buf = &argbuf;
 #      ifdef IPC_STAT
-       st = semctl(sem, 0, IPC_STAT, &arg);
+       st = semctl(sem, 0, IPC_STAT, arg);
        if (st == 0)
            printf("semid_ds\n");
        else
 #      endif /* IPC_STAT */
            printf("semctl IPC_STAT failed: errno = %d\n", errno);
 #      ifdef IPC_RMID
-       if (semctl(sem, 0, IPC_RMID, &arg) != 0)
+       if (semctl(sem, 0, IPC_RMID, arg) != 0)
 #      endif /* IPC_RMID */
            printf("semctl IPC_RMID failed: errno = %d\n", errno);
     } else
@@ -17814,6 +18097,10 @@ eval $inlibc
 set setegid d_setegid
 eval $inlibc
 
+: see if setenv exists
+set setenv d_setenv
+eval $inlibc
+
 : see if seteuid exists
 set seteuid d_seteuid
 eval $inlibc
@@ -17846,7 +18133,7 @@ case "$d_setgrent_r" in
        esac
        case "$setgrent_r_proto" in
        ''|0)   d_setgrent_r=undef
-               setgrent_r_proto=0
+               setgrent_r_proto=0
                echo "Disabling setgrent_r, cannot determine prototype." >&4 ;;
        * )     case "$setgrent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -17895,7 +18182,7 @@ case "$d_sethostent_r" in
        esac
        case "$sethostent_r_proto" in
        ''|0)   d_sethostent_r=undef
-               sethostent_r_proto=0
+               sethostent_r_proto=0
                echo "Disabling sethostent_r, cannot determine prototype." >&4 ;;
        * )     case "$sethostent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -17924,13 +18211,229 @@ eval $inlibc
 set setlinebuf d_setlinebuf
 eval $inlibc
 
-: see if setlocale exists
-set setlocale d_setlocale
+: see if this system has wctype.h
+set wctype.h i_wctype
+eval $inhdr
+
+: see if towupper exists
+set towupper d_towupper
 eval $inlibc
 
-: see if locale.h is available
-set locale.h i_locale
-eval $inhdr
+: check for setlocale function and behavior
+case "$d_setlocale" in
+'')
+$cat >&4 <<EOM
+
+Checking to see if you have setlocale() and its behavior
+EOM
+$cat >try.c <<EOCP
+#include <stdlib.h>
+#include <string.h>
+#$i_locale I_LOCALE
+#ifdef I_LOCALE
+#  include <locale.h>
+#endif
+#$i_wctype I_WCTYPE
+#ifdef I_WCTYPE
+#  include <wctype.h>
+#endif
+
+int main() {
+    const char * invalid_name = "\a";   /* This is really invalid! */
+    int accepts_any_locale_name = 0;
+    int has_C_UTF8 = 0;
+    unsigned char bad_setlocale = 255;
+
+    /* If LC_CTYPE isn't defined the compilation will fail, and locales will be
+     * disabled.  It's hard to imagine an instance where meaningful locale
+     * handling could be done without LC_CTYPE */
+    const char *  name = setlocale(LC_CTYPE, "C");
+
+    if (name == NULL || strcmp(name, "C") != 0) {
+        exit(bad_setlocale);
+    }
+
+    name = setlocale(LC_CTYPE, invalid_name);
+    if (name != NULL) {
+
+        /* Let it pass if it accepts the name but gives back one of the C
+         * locales */
+        if (strcmp(name, "C") != 0 && strcmp(name, "C.UTF-8") != 0) {
+            accepts_any_locale_name = 1;
+        }
+    }
+
+    name = setlocale(LC_CTYPE, "C.UTF-8");
+    if (name != NULL) {
+        unsigned char y_with_diaeresis = ('A' == 193) ? 0xDF : 0xFF;
+
+#$d_towupper HAS_TOWUPPER
+#ifdef HAS_TOWUPPER
+
+        /* We assume that if the machine doesn't have the C99 towupper, it
+         * doesn't have C.UTF-8, even if we successfully changed locales to
+         * include it.  This seems safer even on platforms that didn't accept
+         * the really invalid name */
+
+        if (towupper(y_with_diaeresis) == 0x178) {
+            has_C_UTF8 = 1;
+        }
+
+#endif
+
+    }
+
+#if 0
+
+    /* Currently unused code to determine if LC_ALL with disparate values uses
+     * category = value pairs or positional, and to determine the separator
+     * between the categories.  We could add code so that if the separator were
+     * > '9', we subtract 10; similarly for 'Z' and 'z', and then just about
+     * every possible ASCII separator would fit in the 5 bits available in the
+     * exit code.  This would not be true in EBCDIC.  And then if LC_ALL is
+     * positional, we probably would want to know the order of the categories.
+     * Using a file between the C program and the shell script would really be
+     * require to do that */
+#ifdef LC_ALL
+
+    unsigned char min_separator = ' ' - 1;
+    unsigned char separator = min_separator;
+    int uses_name_value_pair_names = 0;
+
+    name = setlocale(LC_ALL, "C");
+    if (name == NULL || strcmp(name, "C") != 0) {
+        exit(bad_setlocale);
+    }
+
+    if (has_C_UTF8) {
+        char * pos;
+
+        name = setlocale(LC_CTYPE, "C.UTF-8");
+        if (name == NULL) {
+            exit(bad_setlocale);
+        }
+        name = setlocale(LC_ALL, NULL);
+        if (name == NULL) {
+            exit(bad_setlocale);
+        }
+
+        pos = strstr(name, "LC_CTYPE" "=C.UTF-8");
+        if (pos != NULL) {
+            uses_name_value_pair_names = 1;
+            if (pos == name) {
+                separator = name[sizeof("LC_CTYPE=C.UTF-8") - 1];
+            }
+            else {
+                separator = *(pos - 1);
+            }
+        }
+        else {
+            pos = strstr(name, "C.UTF-8");
+            if (pos == NULL) {
+                /* bad */
+            }
+            else if (pos == name) {
+                separator = name[sizeof("C.UTF-8") - 1];
+            }
+            else {
+                separator = *(pos - 1);
+            }
+        }
+    }
+
+#endif
+#endif
+
+    exit( 0 /* (separator - min_separator) << 3
+        | uses_name_value_pair_names      << 2
+          */
+        | has_C_UTF8                      << 1
+        | accepts_any_locale_name);
+
+}
+EOCP
+val=
+set d_setlocale
+eval $setvar
+case $d_setlocale in
+    $undef) d_setlocale_accepts_any_locale_name="$undef"
+            d_has_C_UTF8="false"
+            ;;
+    *) set try
+       if eval $compile; then
+           echo "Your system has setlocale()..." >&4
+           $run ./try
+           case $? in
+               0) echo "and it seems sane; you don't have a C.UTF-8 locale" >&4
+                  d_setlocale="$define"
+                  d_setlocale_accepts_any_locale_name="$undef"
+                  d_has_C_UTF8="false"
+                  ;;
+               1) echo "and it seems sane, but accepts any locale name as valid" >&4
+                  d_setlocale="$define"
+                  d_setlocale_accepts_any_locale_name="$define"
+                  d_has_C_UTF8="false"
+                  ;;
+               2) echo "and it seems sane; you have a C.UTF-8 locale" >&4
+                  d_setlocale="$define"
+                  d_setlocale_accepts_any_locale_name="$undef"
+                  d_has_C_UTF8="true"
+                  ;;
+               3) echo "and it seems sane, but accepts any locale name as valid" >&4
+                  d_setlocale="$define"
+                  d_setlocale_accepts_any_locale_name="$define"
+                  d_has_C_UTF8="true"
+                  ;;
+               *) echo "but it doesn't seem to work, so we won't use it." >&4
+                  d_setlocale="$undef"
+                  d_setlocale_accepts_any_locale_name="$undef"
+                  d_has_C_UTF8="false"
+                  ;;
+           esac
+       else
+           echo "your system does not have setlocale()" >&4
+           d_setlocale="$undef"
+           d_setlocale_accepts_any_locale_name="$undef"
+           d_has_C_UTF8="false"
+       fi
+esac
+$rm_try
+;;
+*) val="$d_setlocale"
+    set d_setlocale
+    eval $setvar
+    case "$d_setlocale" in
+        $undef) echo "There may be other ways to set the locale on your system, so we need to ask:" >&4
+        ;;
+    esac
+    rp="Does your system have the C.UTF-8 locale?"
+    dflt=n
+    . ./myread
+    case "$ans" in
+        [Yy]*) d_has_C_UTF8="true"
+               c_utf8_locale=" or C.UTF-8"
+               ;;
+        *)     d_has_C_UTF8="false"
+               c_utf8_locale=""
+               ;;
+    esac
+    case "$d_setlocale" in
+        $define)
+            rp="When you set your locale to something besides C$c_utf8_locale, does it do so, or just pretend to?" >&4
+            dflt=n
+            . ./myread
+            case "$ans" in
+                true|[Yy]*)
+                  d_setlocale_accepts_any_locale_name="$undef"
+                  ;;
+               *) d_setlocale_accepts_any_locale_name="$define"
+                  ;;
+            esac
+            ;;
+        *) d_setlocale_accepts_any_locale_name="$undef"
+          ;;
+    esac
+esac
 
 : see if setlocale_r exists
 set setlocale_r d_setlocale_r
@@ -17952,7 +18455,7 @@ case "$d_setlocale_r" in
        esac
        case "$setlocale_r_proto" in
        ''|0)   d_setlocale_r=undef
-               setlocale_r_proto=0
+               setlocale_r_proto=0
                echo "Disabling setlocale_r, cannot determine prototype." >&4 ;;
        * )     case "$setlocale_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18001,7 +18504,7 @@ case "$d_setnetent_r" in
        esac
        case "$setnetent_r_proto" in
        ''|0)   d_setnetent_r=undef
-               setnetent_r_proto=0
+               setnetent_r_proto=0
                echo "Disabling setnetent_r, cannot determine prototype." >&4 ;;
        * )     case "$setnetent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18066,7 +18569,7 @@ case "$d_setprotoent_r" in
        esac
        case "$setprotoent_r_proto" in
        ''|0)   d_setprotoent_r=undef
-               setprotoent_r_proto=0
+               setprotoent_r_proto=0
                echo "Disabling setprotoent_r, cannot determine prototype." >&4 ;;
        * )     case "$setprotoent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18115,7 +18618,7 @@ case "$d_setpwent_r" in
        esac
        case "$setpwent_r_proto" in
        ''|0)   d_setpwent_r=undef
-               setpwent_r_proto=0
+               setpwent_r_proto=0
                echo "Disabling setpwent_r, cannot determine prototype." >&4 ;;
        * )     case "$setpwent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18184,7 +18687,7 @@ case "$d_setservent_r" in
        esac
        case "$setservent_r_proto" in
        ''|0)   d_setservent_r=undef
-               setservent_r_proto=0
+               setservent_r_proto=0
                echo "Disabling setservent_r, cannot determine prototype." >&4 ;;
        * )     case "$setservent_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18432,11 +18935,8 @@ eval $inhdr
 : see if signbit exists
 $echo $n "Checking to see if you have signbit() available to work on $nvtype... $c" >&4
 $cat >try.c <<EOCP
-#$i_math I_MATH
 #$i_sunmath I_SUNMATH
-#ifdef I_MATH
-#  include <math.h>
-#endif
+#include <math.h>
 #ifdef I_SUNMATH  /* Solaris special math library */
 #  include <sunmath.h>
 #endif
@@ -18523,6 +19023,71 @@ set d_sigsetjmp
 eval $setvar
 $rm_try
 
+: see if snprintf exists
+set snprintf d_snprintf
+eval $inlibc
+
+: see if vsnprintf exists
+set vsnprintf d_vsnprintf
+eval $inlibc
+
+case "$d_snprintf-$d_vsnprintf" in
+"$define-$define")
+    $cat <<EOM
+Checking whether your snprintf() and vsnprintf() work okay...
+EOM
+    $cat >try.c <<'EOCP'
+/* v?snprintf testing logic courtesy of Russ Allbery.
+ * According to C99:
+ * - if the buffer is too short it still must be \0-terminated
+ * - if the buffer is too short the potentially required length
+ *   must be returned and not -1
+ * - if the buffer is NULL the potentially required length
+ *   must be returned and not -1 or core dump
+ */
+#include <stdio.h>
+#include <stdarg.h>
+
+char buf[2];
+
+int test (char *format, ...)
+{
+    va_list args;
+    int count;
+
+    va_start (args, format);
+    count = vsnprintf (buf, sizeof buf, format, args);
+    va_end (args);
+    return count;
+}
+
+int main ()
+{
+    return ((test ("%s", "abcd") == 4 && buf[0] == 'a' && buf[1] == '\0'
+             && snprintf (NULL, 0, "%s", "abcd") == 4) ? 0 : 1);
+}
+EOCP
+    set try
+    if eval $compile; then
+       `$run ./try`
+       case "$?" in
+       0) echo "Your snprintf() and vsnprintf() seem to be working okay." ;;
+       *) cat <<EOM >&4
+Your snprintf() and snprintf() don't seem to be working okay.
+EOM
+          d_snprintf="$undef"
+          d_vsnprintf="$undef"
+          ;;
+       esac
+    else
+       echo "(I can't seem to compile the test program--assuming they don't)"
+       d_snprintf="$undef"
+       d_vsnprintf="$undef"
+    fi
+    $rm_try
+    ;;
+esac
+
 : see if sockatmark exists
 set sockatmark d_sockatmark
 eval $inlibc
@@ -18556,7 +19121,7 @@ case "$d_srand48_r" in
        esac
        case "$srand48_r_proto" in
        ''|0)   d_srand48_r=undef
-               srand48_r_proto=0
+               srand48_r_proto=0
                echo "Disabling srand48_r, cannot determine prototype." >&4 ;;
        * )     case "$srand48_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18597,7 +19162,7 @@ case "$d_srandom_r" in
        esac
        case "$srandom_r_proto" in
        ''|0)   d_srandom_r=undef
-               srandom_r_proto=0
+               srandom_r_proto=0
                echo "Disabling srandom_r, cannot determine prototype." >&4 ;;
        * )     case "$srandom_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18660,7 +19225,6 @@ case "$d_statfs_s" in
 *)              echo "No, it doesn't." ;;
 esac
 
-
 : see if struct statfs knows about f_flags
 case "$d_statfs_s" in
 define)
@@ -18790,7 +19354,7 @@ $cat >&4 <<EOM
 Checking how to access stdio streams by file descriptor number...
 EOM
 case "$stdio_stream_array" in
-'')    $cat >try.c <<EOCP
+'')    $cat >try.c <<EOCP
 #include <stdio.h>
 int main() {
   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
@@ -18801,7 +19365,7 @@ EOCP
        do
                set try -DSTDIO_STREAM_ARRAY=$s
                if eval $compile; then
-                       case "`$run ./try`" in
+                       case "`$run ./try`" in
                        yes)    stdio_stream_array=$s; break ;;
                        esac
                fi
@@ -18825,45 +19389,6 @@ esac
 set strcoll d_strcoll
 eval $inlibc
 
-: see if strerror and/or sys_errlist[] exist
-echo " "
-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[], strerror() 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"
-               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"'
-    fi
-fi
-
 : see if strerror_l exists
 set strerror_l d_strerror_l
 eval $inlibc
@@ -18873,7 +19398,7 @@ set strerror_r d_strerror_r
 eval $inlibc
 case "$d_strerror_r" in
 "$define")
-       hdrs="$i_systypes sys/types.h define stdio.h $i_string string.h"
+       hdrs="$i_systypes sys/types.h define stdio.h define string.h"
        case "$d_strerror_r_proto:$usethreads" in
        ":define")      d_strerror_r_proto=define
                set d_strerror_r_proto strerror_r $hdrs
@@ -18896,7 +19421,7 @@ case "$d_strerror_r" in
        esac
        case "$strerror_r_proto" in
        ''|0)   d_strerror_r=undef
-               strerror_r_proto=0
+               strerror_r_proto=0
                echo "Disabling strerror_r, cannot determine prototype." >&4 ;;
        * )     case "$strerror_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -18922,12 +19447,46 @@ set strftime d_strftime
 eval $inlibc
 
 : see if strlcat exists
-set strlcat d_strlcat
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_strlcat_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_strlcat_proto strlcat literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_strlcat_proto" in
+    define) # see if strlcat exists
+       set strlcat d_strlcat
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_strlcat
+       eval $setvar
+       ;;
+esac
 
 : see if strlcpy exists
-set strlcpy d_strlcpy
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_strlcpy_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_strlcpy_proto strlcpy literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_strlcpy_proto" in
+    define) # see if strlcpy exists
+       set strlcpy d_strlcpy
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_strlcpy
+       eval $setvar
+       ;;
+esac
 
 : see if strnlen exists
 set strnlen d_strnlen
@@ -18937,6 +19496,10 @@ eval $inlibc
 set strtod d_strtod
 eval $inlibc
 
+: see if strtod_l exists
+set strtod_l d_strtod_l
+eval $inlibc
+
 : see if strtol exists
 set strtol d_strtol
 eval $inlibc
@@ -18967,9 +19530,9 @@ EOM
 #define strtoll _strtoll
 #endif
 #include <stdio.h>
-extern long long int strtoll(char *s, char **, int);
+#include <stdlib.h>
 static int bad = 0;
-int check(char *s, long long ell, int een) {
+void check(const char *s, long long ell, int een) {
        long long gll;
        errno = 0;
        gll = strtoll(s, 0, 10);
@@ -19022,11 +19585,11 @@ case "$d_strtoul" in
 Checking whether your strtoul() works okay...
 EOM
        $cat >try.c <<'EOCP'
+#include <stdlib.h>
 #include <errno.h>
 #include <stdio.h>
-extern unsigned long int strtoul(char *s, char **, int);
 static int bad = 0;
-void check(char *s, unsigned long eul, int een) {
+void check(const char *s, unsigned long eul, int een) {
        unsigned long gul;
        errno = 0;
        gul = strtoul(s, 0, 10);
@@ -19046,7 +19609,7 @@ EOCP
        check("-1", 18446744073709551615UL, 0);
        check("-18446744073709551614", 2, 0);
        check("-18446744073709551615", 1, 0);
-               check("-18446744073709551616", 18446744073709551615UL, ERANGE);
+       check("-18446744073709551616", 18446744073709551615UL, ERANGE);
        check("-18446744073709551617", 18446744073709551615UL, ERANGE);
 #endif
 EOCP
@@ -19059,7 +19622,7 @@ EOCP
        check("-1", 4294967295UL, 0);
        check("-4294967294", 2, 0);
        check("-4294967295", 1, 0);
-               check("-4294967296", 4294967295UL, ERANGE);
+       check("-4294967296", 4294967295UL, ERANGE);
        check("-4294967297", 4294967295UL, ERANGE);
 #endif
 EOCP
@@ -19102,14 +19665,14 @@ case "$d_longlong-$d_strtoull" in
 Checking whether your strtoull() works okay...
 EOM
        $cat >try.c <<'EOCP'
+#include <stdlib.h>
 #include <errno.h>
 #ifdef __hpux
 #define strtoull __strtoull
 #endif
 #include <stdio.h>
-extern unsigned long long int strtoull(char *s, char **, int);
 static int bad = 0;
-int check(char *s, long long eull, int een) {
+void check(const char *s, long long eull, int een) {
        long long gull;
        errno = 0;
        gull = strtoull(s, 0, 10);
@@ -19125,7 +19688,7 @@ int main() {
        check("-1",                    18446744073709551615ULL, 0);
        check("-18446744073709551614",                     2LL, 0);
        check("-18446744073709551615",                     1LL, 0);
-               check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
+       check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
        check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
 #endif
        if (!bad)
@@ -19159,11 +19722,11 @@ case "$d_strtouq" in
 Checking whether your strtouq() works okay...
 EOM
        $cat >try.c <<'EOCP'
+#include <stdlib.h>
 #include <errno.h>
 #include <stdio.h>
-extern unsigned long long int strtouq(char *s, char **, int);
 static int bad = 0;
-void check(char *s, unsigned long long eull, int een) {
+void check(const char *s, unsigned long long eull, int een) {
        unsigned long long gull;
        errno = 0;
        gull = strtouq(s, 0, 10);
@@ -19179,7 +19742,7 @@ int main() {
        check("-1",                    18446744073709551615ULL, 0);
        check("-18446744073709551614",                     2LL, 0);
        check("-18446744073709551615",                     1LL, 0);
-               check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
+       check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
        check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
 #endif
        if (!bad)
@@ -19208,6 +19771,10 @@ esac
 set strxfrm d_strxfrm
 eval $inlibc
 
+: see if strxfrm_l exists
+set strxfrm_l d_strxfrm_l
+eval $inlibc
+
 : see if symlink exists
 set symlink d_symlink
 eval $inlibc
@@ -19225,6 +19792,18 @@ eval $hasproto
 set sysconf d_sysconf
 eval $inlibc
 
+: see if sys_errlist[] exists
+echo " "
+if test "X$d_syserrlst" = X; then
+       if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+               echo "You have sys_errlist[], so we could roll our own strerror."
+               d_syserrlst="$define"
+       else
+               echo "You don't have sys_errlist[], so strerror() is welcome."
+               d_syserrlst="$undef"
+       fi
+fi
+
 : see if system exists
 set system d_system
 eval $inlibc
@@ -19246,91 +19825,127 @@ eval $hasproto
 set tgamma d_tgamma
 eval $inlibc
 
-: check for thread_safe_nl_langinfo_l item
-$cat <<EOM
+: see what flavor, if any, of thread local storage is supported
+echo " "
+echo "Checking to see if your system supports C11 thread local storage..."
+$cat > try.c <<'EOCP'
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
 
-Checking to see if you have nl_langinfo_l() and that it is thread-safe
-EOM
-$cat >try.c <<EOCP
-#$i_stdlib I_STDLIB
-#ifdef I_STDLIB
-#  include <stdlib.h>
-#endif
-#$i_string I_STRING
-#ifdef I_STRING
-#  include <string.h>
-#endif
-#$i_langinfo I_LANGINFO
-#ifdef I_LANGINFO
-#  include <langinfo.h>
-#endif
-#$i_pthread I_PTHREAD
-#ifdef I_PTHREAD
-#  include <pthread.h>
-#endif
-#$i_locale I_LOCALE
-#ifdef I_LOCALE
-#  include <locale.h>
-#endif
+static int plus_one = 1;
+static int minus_one = -1;
 
-void *
-thread_start(void * arg)
-{
-    nl_langinfo(RADIXCHAR);
+PROBE_MACRO int *minion;
+
+int callback (const void *a, const void *b) {
+    int val_a = *minion * *(const int *)a;
+    int val_b = *minion * *(const int *)b;
+    return val_a < val_b ? -1 : val_a > val_b;
 }
 
-int main() {
-       char * main_buffer;
-       char save_main_buffer[1000];
-        pthread_t subthread;
-        pthread_attr_t attr;
-       
-       main_buffer = nl_langinfo_l(CODESET, newlocale(LC_ALL_MASK, "C", 0));
-
-       /* If too large for our generous allowance, just assume we don't have
-        * it. */
-       if (strlen(main_buffer) >= sizeof(save_main_buffer)) {
-           exit(1);
-       }
+#define SIZE 8
+
+void *thread_function(void *arg) {
+    /* thread local variables should start zeroed in each thread. */
+    if (minion != NULL) {
+        fprintf(stderr, "__thread variable started with %p, should be NULL\n",
+                minion);
+        exit(2);
+    }
+    minion = &minus_one;
 
-       strcpy(save_main_buffer, main_buffer);
+    int array[SIZE];
+    unsigned int i;
+    for (i = 0; i < SIZE; ++i) {
+        /* "Hash randomisation" - this array isn't in sorted order: */
+        array[i ^ 5] = i * i;
+    }
 
-       if (pthread_attr_init(&attr) != 0) {
-           exit(1);
-       }
+    qsort(array, SIZE, sizeof(int), callback);
 
-       if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) {
-           exit(1);
-       }
+    int bad = 0;
+    for (i = 0; i < SIZE; ++i) {
+        int want = (SIZE - 1 - i) * (SIZE - 1 - i);
+        int have = array[i];
+        if (want != have) {
+            ++bad;
+            fprintf(stderr, "array[%u] - want %i, have %i\n", i, want, have);
+        }
+    }
+    if (bad)
+        exit(3);
 
-       if (pthread_join(subthread, NULL) != 0) {
-           exit(1);
-       }
+    return NULL;
+}
+
+int main(int argc, char **argv) {
+    if (minion != NULL) {
+        fprintf(stderr, "__thread variable started with %p, should be NULL\n",
+                minion);
+        exit(4);
+    }
+
+    minion = &plus_one;
 
-        exit(! (strcmp(main_buffer, save_main_buffer) == 0));
+    pthread_t tid;
+    int result = pthread_create(&tid, NULL, thread_function, NULL);
+    if (result) {
+        fprintf(stderr, "pthread_create failed (%d)\n", result);
+        exit(5);
+    }
+
+    result = pthread_join(tid, NULL);
+    if (result) {
+        fprintf(stderr, "pthread_join failed (%d)\n", result);
+        exit(6);
+    }
+
+    if (minion == NULL) {
+        fprintf(stderr, "__thread variable should not be NULL\n");
+        exit(7);
+    }
+    if (!(minion == &plus_one && *minion == 1)) {
+        fprintf(stderr, "__thread variable should be %d @ %p, not %d @ %p\n",
+                1, &plus_one, *minion, minion);
+        exit(8);
+    }
+
+    return 0;
 }
 EOCP
-case "$usethreads" in
-    define)
-       set try
-       if eval $compile; then
-               echo "Your system has nl_langinfo_l()..." >&4
-               if $run ./try; then
-                   echo "and it is thread-safe (just as I'd hoped)." >&4
-                   d_thread_safe_nl_langinfo_l="$define"
-                   echo "$d_thread_safe_nl_langinfo_l" >&4
-               else
-                   echo "but it isn't thread-safe, so we won't use it." >&4
+
+# Respect a hint (or previous) value for perl_thread_local, if there is one.
+case "$perl_thread_local" in
+'')    # Check the various possibilities, and break out on success.
+       for thread_local in _Thread_local __thread; do
+               set try -DPROBE_MACRO=$thread_local
+               if eval $compile && $run ./try; then
+                       $echo "Your compiler supports $thread_local." >&4
+                       val=$define
+                       perl_thread_local="$thread_local";
+                       break;
                fi
-       else
-               echo "your system does not have nl_langinfo_l()" >&4
-       fi
+               $echo "Your compiler does NOT support $thread_local." >&4
+               val="$undef"
+       done
+       ;;
+*thread*|*Thread*) # Some variant of thread local exists.
+       echo "Keeping your $hint value of $perl_thread_local."
+       val=$define
+       ;;
+*)  # Unrecognized previous value -- blindly trust the supplied
+       # value and hope it makes sense.  Use old value for
+       # d_thread_local, if there is one.
+       echo "Keeping your $hint value of $perl_thread_local."
+       case "$d_thread_local" in
+               '') val=$define ;;
+               *)  val=$d_thread_local ;;
+       esac
        ;;
-    *) echo "Since threads aren't selected, we won't bother looking for nl_langinfo_l()" >&4
 esac
-if test X"$d_thread_safe_nl_langinfo_l" = X; then
-       d_thread_safe_nl_langinfo_l="$undef"
-fi
+set d_thread_local
+eval $setvar
 $rm_try
 
 : see if time exists
@@ -19397,7 +20012,7 @@ case "$d_tmpnam_r" in
        esac
        case "$tmpnam_r_proto" in
        ''|0)   d_tmpnam_r=undef
-               tmpnam_r_proto=0
+               tmpnam_r_proto=0
                echo "Disabling tmpnam_r, cannot determine prototype." >&4 ;;
        * )     case "$tmpnam_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -19418,6 +20033,10 @@ case "$d_tmpnam_r" in
        ;;
 esac
 
+: see if towlower exists
+set towlower d_towlower
+eval $inlibc
+
 : see if trunc exists
 set trunc d_trunc
 eval $inlibc
@@ -19454,7 +20073,7 @@ case "$d_ttyname_r" in
        esac
        case "$ttyname_r_proto" in
        ''|0)   d_ttyname_r=undef
-               ttyname_r_proto=0
+               ttyname_r_proto=0
                echo "Disabling ttyname_r, cannot determine prototype." >&4 ;;
        * )     case "$ttyname_r_proto" in
                REENTRANT_PROTO*) ;;
@@ -19524,6 +20143,10 @@ EOM
 #ifdef I_STDLIB
 #include <stdlib.h>
 #endif
+#$i_inttypes I_INTTYPES
+#ifdef I_INTTYPES
+#include <inttypes.h>
+#endif
 #include <sys/types.h>
 typedef $uvtype UV;
 int main()
@@ -19735,14 +20358,10 @@ case "$d_closedir" in
 #include <sys/ndir.h>
 #else
 #ifdef I_SYS_DIR
-#ifdef hp9000s500
-#include <ndir.h>      /* may be wrong in the future */
-#else
 #include <sys/dir.h>
 #endif
 #endif
 #endif
-#endif
 int main() { return closedir(opendir(".")); }
 EOM
        set try
@@ -19775,6 +20394,10 @@ eval $inlibc
 set waitpid d_waitpid
 eval $inlibc
 
+: see if wcrtomb exists
+set wcrtomb d_wcrtomb
+eval $inlibc
+
 : look for wcscmp
 echo " "
 $cat >try.c <<'EOCP'
@@ -19978,10 +20601,6 @@ $define)
        echo " "
        echo "Checking Berkeley DB version ..." >&4
        $cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
 #include <sys/types.h>
 #include <stdio.h>
 #$i_stdlib I_STDLIB
@@ -20072,16 +20691,13 @@ define)
        echo " "
        echo "Checking return type needed for hash for Berkeley DB ..." >&4
        $cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
 #include <sys/types.h>
 #include <db.h>
 
 #ifndef DB_VERSION_MAJOR
 u_int32_t hash_cb (const void* ptr, size_t size)
 {
+       return 0;
 }
 HASHINFO info;
 int main()
@@ -20091,7 +20707,7 @@ int main()
 #endif
 EOCP
        if $cc $ccflags -c try.c >try.out 2>&1 ; then
-               if $contains warning try.out >>/dev/null 2>&1 ; then
+               if $compiler_warning try.out >>/dev/null 2>&1 ; then
                        db_hashtype='int'
                else
                        db_hashtype='u_int32_t'
@@ -20115,16 +20731,13 @@ define)
        echo " "
        echo "Checking return type needed for prefix for Berkeley DB ..." >&4
        cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
 #include <sys/types.h>
 #include <db.h>
 
 #ifndef DB_VERSION_MAJOR
 size_t prefix_cb (const DBT *key1, const DBT *key2)
 {
+       return 0;
 }
 BTREEINFO info;
 int main()
@@ -20134,7 +20747,7 @@ int main()
 #endif
 EOCP
        if $cc $ccflags -c try.c  >try.out 2>&1 ; then
-               if $contains warning try.out >>/dev/null 2>&1 ; then
+               if $compiler_warning try.out >>/dev/null 2>&1 ; then
                        db_prefixtype='int'
                else
                        db_prefixtype='size_t'
@@ -20191,14 +20804,8 @@ $cat >try.c <<EOP
 #define LONG_DOUBLESIZE $longdblsize
 #define LONG_DOUBLEKIND $longdblkind
 #endif
-#$i_math I_MATH
-#$i_string I_STRING
-#ifdef I_MATH
 #include <math.h>
-#endif
-#ifdef I_STRING
-#  include <string.h>
-#endif
+#include <string.h>
 #include <stdio.h>
 /* Note that whether the sign bit is on or off
  * for NaN depends on the CPU/FPU, and possibly
@@ -20236,10 +20843,12 @@ int main(int argc, char *argv[]) {
     memset((char *)&ldinf + 10, '\0', LONG_DOUBLESIZE - 10);
     memset((char *)&ldnan + 10, '\0', LONG_DOUBLESIZE - 10);
 # endif
+#endif
   if (argc == 2) {
     switch (argv[1][0]) {
     case '1': bytes(&dinf, sizeof(dinf)); break;
     case '2': bytes(&dnan, sizeof(dnan)); break;
+#ifdef HAS_LONG_DOUBLE
     case '3': bytes(&ldinf, sizeof(ldinf)); break;
     case '4': bytes(&ldnan, sizeof(ldnan)); break;
 #endif
@@ -20387,11 +20996,8 @@ $rm_try
 : Check the length of the double mantissa
 $echo "Checking how many mantissa bits your doubles have..." >&4
 $cat >try.c <<EOP
-#$i_float I_FLOAT
 #$i_sunmath I_SUNMATH
-#ifdef I_FLOAT
-# include <float.h>
-#endif
+#include <float.h>
 #ifdef I_SUNMATH
 # include <sunmath.h>
 #endif
@@ -20417,11 +21023,8 @@ $rm_try
 : Check the length of the longdouble mantissa
 $echo "Checking how many mantissa bits your long doubles have..." >&4
 $cat >try.c <<EOP
-#$i_float I_FLOAT
 #$i_sunmath I_SUNMATH
-#ifdef I_FLOAT
-# include <float.h>
-#endif
+#include <float.h>
 #ifdef I_SUNMATH
 # include <sunmath.h>
 #endif
@@ -20682,7 +21285,7 @@ if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
 fi
 : check for fflush NULL behavior
 case "$fflushNULL" in
-'')    set try -DTRY_FFLUSH_NULL $output
+'')    set try -DTRY_FFLUSH_NULL $output
        if eval $compile; then
                $run ./try 2>/dev/null
                code="$?"
@@ -20816,7 +21419,7 @@ Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
 EOM
                : now check for fflushall behaviour
                case "$fflushall" in
-               '')     set try -DTRY_FFLUSH_ALL $output
+               '')     set try -DTRY_FFLUSH_ALL $output
                        if eval $compile; then
                                $cat >&4 <<EOM
 (Now testing the other method--but note that this also may fail.)
@@ -20948,7 +21551,6 @@ else
        echo "(I can't compile the test program--guessing $gidsize.)" >&4
 fi
 
-
 : Check if GID is signed
 echo " "
 case "$gidtype" in
@@ -20986,7 +21588,6 @@ else
        echo "(I can't compile the test program--guessing unsigned.)" >&4
 fi
 
-
 : Check 64bit sizes
 echo " "
 
@@ -21009,7 +21610,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
-                       sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
+                       sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
                        echo "We will use %d."
                        ;;
                esac
@@ -21031,7 +21632,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
-                       sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
+                       sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
                        echo "We will use %ld."
                        ;;
                esac
@@ -21054,7 +21655,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
-                       sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
+                       sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIX64;
                        echo "We will use the C9X style."
                        ;;
                esac
@@ -21076,7 +21677,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
-                       sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
+                       sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
                        echo "We will use %Ld."
                        ;;
                esac
@@ -21098,7 +21699,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
-                       sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
+                       sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
                        echo "We will use the %lld style."
                        ;;
                esac
@@ -21120,7 +21721,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
-                       sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
+                       sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
                        echo "We will use %qd."
                        ;;
                esac
@@ -21211,6 +21812,45 @@ case "$ivdformat" in
     ;;
 esac
 
+case "$i32dformat" in
+'')    case "$i32type" in
+       int)
+               i32dformat='"d"'
+               u32uformat='"u"'
+               u32oformat='"o"'
+               u32xformat='"x"'
+               u32XUformat='"X"'
+               ;;
+       long)
+               i32dformat='"ld"'
+               u32uformat='"lu"'
+               u32oformat='"lo"'
+               u32xformat='"lx"'
+               u32XUformat='"lX"'
+               ;;
+       int_least32_t)                  : will not happen currently
+               i32dformat=PRIdLEAST32
+               u32uformat=PRIuLEAST32
+               u32oformat=PRIoLEAST32
+               u32xformat=PRIxLEAST32
+               u32XUformat=PRIXLEAST32
+               ;;
+       int32_t)
+               i32dformat=PRId32
+               u32uformat=PRIu32
+               u32oformat=PRIo32
+               u32xformat=PRIx32
+               u32XUformat=PRIX32
+               ;;
+       esac ;;
+esac
+
+case "$i32dformat" in
+'') echo "$0: Fatal: failed to find format strings for 32-bit integers, cannot continue." >&4
+    exit 1
+    ;;
+esac
+
 : Check format string for GID
 
 echo " "
@@ -21337,6 +21977,9 @@ int
 main(int ac, char **av)
 {
   signal(SIGSEGV, exit);
+#ifdef SIGBUS
+  signal(SIGBUS,  exit);
+#endif
 
   myprintf("%s%cs all right, then\n", "that", '\'');
   exit(0);
@@ -21577,25 +22220,15 @@ else
 fi
 $rm -f foo* bar*
 
-: see if this is a values.h system
-set values.h i_values
-eval $inhdr
-
 : Check the max offset that gmtime and localtime accept
 echo "Checking max offsets that gmtime () accepts"
 
-case $i_values in
-    define) yyy="#include <values.h>" ;;
-    *)      yyy="" ;;
-    esac
-
 case "$sGMTIME_min/$sGMTIME_max" in
     0/0|/)
        $cat >try.c <<EOCP
 #include <sys/types.h>
 #include <stdio.h>
 #include <time.h>
-$yyy
 
 int i;
 struct tm *tmp;
@@ -21674,7 +22307,6 @@ case "$sLOCALTIME_min/$sLOCALTIME_max" in
 #include <sys/types.h>
 #include <stdio.h>
 #include <time.h>
-$yyy
 
 int i;
 struct tm *tmp;
@@ -22143,17 +22775,17 @@ case "$doinit" in
 yes)
        echo "Generating a list of signal names and numbers..." >&4
        . ./signal_cmd
-       sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
-       sig_name=`$awk 'BEGIN { printf "ZERO " }
-                       !/^NSIG/ { printf "%s ", $1 }' signal.lst`
-       sig_num=`$awk  'BEGIN { printf "0 " }
-                       !/^NSIG/ { printf "%d ", $2 }' signal.lst`
-       sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
-                            !/^NSIG/   { printf "\"%s\", ", $1 }
-                            END        { printf "0\n" }' signal.lst`
-       sig_num_init=`$awk  'BEGIN      { printf "0, " }
-                            !/^NSIG/   { printf "%d, ", $2}
-                            END        { printf "0\n"}' signal.lst`
+       sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
+       sig_name=`$awk 'BEGIN { printf "ZERO " }
+                       !/^NSIG/ { printf "%s ", $1 }' signal.lst`
+       sig_num=`$awk  'BEGIN { printf "0 " }
+                       !/^NSIG/ { printf "%d ", $2 }' signal.lst`
+       sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
+                            !/^NSIG/   { printf "\"%s\", ", $1 }
+                            END        { printf "0\n" }' signal.lst`
+       sig_num_init=`$awk  'BEGIN      { printf "0, " }
+                            !/^NSIG/   { printf "%d, ", $2}
+                            END        { printf "0\n"}' signal.lst`
        ;;
 esac
 echo "The following $sig_count signals are available:"
@@ -22212,7 +22844,6 @@ else
        echo "(I can't compile the test program--guessing $sizesize.)" >&4
 fi
 
-
 : check for socklen_t
 echo " "
 echo "Checking to see if you have socklen_t..." >&4
@@ -22333,6 +22964,74 @@ EOM
 fi
 $rm_try
 
+: Check the size of st_dev
+$echo " "
+$echo "Checking the size of st_dev..." >&4
+$cat > try.c <<EOCP
+#include <sys/stat.h>
+#include <stdio.h>
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+int main() {
+    struct stat st;
+    printf("%d\n", (int)sizeof(st.st_dev));
+    exit(0);
+}
+EOCP
+set try
+if eval $compile_ok; then
+       val=`$run ./try`
+       case "$val" in
+       '')     st_dev_size=4
+               $echo "(I can't execute the test program--guessing $st_dev_size.)" >&4
+               ;;
+       *)      st_dev_size=$val
+               $echo "Your st_dev is $st_dev_size bytes long."
+               ;;
+       esac
+else
+       st_dev_size=4
+       $echo "(I can't compile the test program--guessing $st_dev_size.)" >&4
+fi
+$rm_try
+
+: Check if st_dev is signed
+$echo " "
+$echo "Checking the sign of st_dev..." >&4
+$cat > try.c <<EOCP
+#include <sys/stat.h>
+#include <stdio.h>
+int main() {
+       struct stat foo;
+        foo.st_dev = -1;
+       if (foo.st_dev < 0)
+               printf("-1\n");
+       else
+               printf("1\n");
+}
+EOCP
+set try
+if eval $compile; then
+       val=`$run ./try`
+       case "$val" in
+       '')     st_dev_sign=1
+               $echo "(I can't execute the test program--guessing unsigned.)" >&4
+               ;;
+       *)      st_dev_sign=$val
+               case "$st_dev_sign" in
+                1) $echo "Your st_dev is unsigned." ;;
+               -1) $echo "Your st_dev is signed."   ;;
+               esac
+               ;;
+       esac
+else
+       st_dev_sign=1
+       $echo "(I can't compile the test program--guessing unsigned.)" >&4
+fi
+$rm_try
+
 : Check the size of st_ino
 $echo " "
 $echo "Checking the size of st_ino..." >&4
@@ -22485,7 +23184,6 @@ else
        echo "(I can't compile the test program--guessing unsigned.)" >&4
 fi
 
-
 : Check format string for UID
 echo " "
 $echo "Checking the format string to be used for uids..." >&4
@@ -22525,6 +23223,34 @@ case "$uidsign" in
        ;;
 esac
 
+: Ask about strict by default.
+case "$usedefaultstrict" in
+    $define|true|[Yy]*)
+       dflt="y"
+       ;;
+    *)
+       dflt="n"
+       ;;
+    esac
+
+cat <<EOM
+
+EXPERIMENTAL: Perl can now be built with strict on by default when not
+invoked with -e or -E. This is a diagnostic tool for development.
+
+Unless you are familiar with this feature, you should probably answer 'no'.
+
+EOM
+
+rp='Would you like to build perl with strict enabled by default?'
+. ./myread
+case "$ans" in
+y|Y) val="$define" ;;
+*)   val="$undef"  ;;
+esac
+set usedefaultstrict
+eval $setvar
+
 : Determine if we can use sysctl with KERN_PROC_PATHNAME to find executing program
 echo " "
 echo "Determining whether we can use sysctl with KERN_PROC_PATHNAME to find executing program..." >&4
@@ -22781,10 +23507,6 @@ case "$yacc" in
        ;;
 esac
 
-: see if this is a assert.h system
-set assert.h i_assert
-eval $inhdr
-
 : see if this is a bfd.h system
 set bfd.h i_bfd
 eval $inhdr
@@ -22844,30 +23566,6 @@ else
        i_machcthr="$undef"
 fi
 
-: see if memory.h is available.
-val=''
-set memory.h val
-eval $inhdr
-
-: See if it conflicts with string.h
-case "$val" in
-$define)
-       case "$strings" in
-       '') ;;
-       *)
-               $cppstdin $cppflags $cppminus < $strings > mem.h
-               if $contains 'memcpy' mem.h >/dev/null 2>&1; then
-                       echo " "
-                       echo "We won't be including <memory.h>."
-                       val="$undef"
-               fi
-               $rm -f mem.h
-               ;;
-       esac
-esac
-set i_memory
-eval $setvar
-
 : see if this is a mntent.h system
 set mntent.h i_mntent
 eval $inhdr
@@ -22932,7 +23630,7 @@ FAVOR_BSD FILE_OFFSET_BITS FORTIFY_SOURCE FreeBSD
 GCC_NEW_VARARGS gcos gcx gimpel GLIBC GLIBC_MINOR GNUC GNUC_MINOR
 GNU_LIBRARY GNU_SOURCE GO32 gould GOULD_PN
 H3050R H3050RX hbullx20 hcx host_mips hp200 hp300 HP700 hp700
-hp800 hp9000 hp9000s200 hp9000s300 hp9000s400 hp9000s500
+hp800 hp9000 hp9000s200 hp9000s300 hp9000s400
 hp9000s700 hp9000s800 hp9k8 hppa hpux HPUX_SOURCE hp_osf
 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960 IA32 IA64
 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
@@ -22946,7 +23644,7 @@ M68000 m68k m88100 m88k M88KBCS_TARGET MACH machine MachTen
 MATH_HAS_NO_SIDE_EFFECTS mc300 mc500 mc68000 mc68010 mc68020
 mc68030 mc68040 mc68060 mc68k mc68k32 mc700 mc88000 mc88100
 merlin mert MiNT mips MIPSEB MIPSEL MIPS_FPSET MIPS_ISA MIPS_SIM
-MIPS_SZINT MIPS_SZLONG MIPS_SZPTR MODERN_C motorola mpeix MSDOS
+MIPS_SZINT MIPS_SZLONG MIPS_SZPTR MODERN_C motorola MSDOS
 MTXINU MULTIMAX MVS mvs M_AMD64 M_ARM M_ARMT M_COFF M_I186 M_I286
 M_I386 M_I8086 M_I86 M_I86SM M_IA64 M_IX86 M_PPC M_SYS3 M_SYS5
 M_SYSIII M_SYSV M_UNIX M_X86 M_XENIX
@@ -23031,7 +23729,7 @@ cat <<'EOSH' >> Cppsym.try
     printf "#ifdef _%s\nprintf(\"_%s=%%s\\n\", STRINGIFY(_%s));\n#endif\n", $1, $1, $1
     printf "#ifdef __%s\nprintf(\"__%s=%%s\\n\", STRINGIFY(__%s));\n#endif\n", $1, $1, $1
     printf "#ifdef __%s__\nprintf(\"__%s__=%%s\\n\", STRINGIFY(__%s__));\n#endif\n", $1, $1, $1
-}'      >> try.c
+}' >> try.c
 echo 'return 0;}' >> try.c
 EOSH
 cat <<EOSH >> Cppsym.try
@@ -23137,7 +23835,7 @@ fi
 
 : add -D_FORTIFY_SOURCE if feasible and not already there
 case "$gccversion" in
-[4567].*)      case "$optimize$ccflags" in
+[456789].*|[1-9][0-9]*)        case "$optimize$ccflags" in
        *-O*)   case "$ccflags$cppsymbols" in
                *_FORTIFY_SOURCE=*) # Don't add it again.
                        echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4
@@ -23155,6 +23853,24 @@ case "$gccversion" in
        ;;
 esac
 
+: script used to emit important warnings
+cat >warn <<EOS
+$startsh
+if test \$# -gt 0; then
+       echo "\$@" >msg
+else
+       cat >msg
+fi
+echo "*** WARNING:" >&4
+sed -e 's/^/*** /' <msg >&4
+echo "*** " >&4
+cat msg >>config.msg
+echo " " >>config.msg
+rm -f msg
+EOS
+chmod +x warn
+$eunicefix warn
+
 : see if this is a termio system
 val="$undef"
 val2="$undef"
@@ -23445,11 +24161,6 @@ for xxx in $xs_extensions ; do
                $define) avail_ext="$avail_ext $xxx" ;;
                esac
                ;;
-       I18N/Langinfo|i18n_lan)
-               case "$i_langinfo$d_nl_langinfo" in
-               $define$define) avail_ext="$avail_ext $xxx" ;;
-               esac
-               ;;
        IPC/SysV|ipc/sysv)
                : XXX Do we need a useipcsysv variable here
                case "${d_msg}${d_sem}${d_shm}" in
@@ -23503,6 +24214,11 @@ for xxx in $xs_extensions ; do
                true|$define|y) avail_ext="$avail_ext $xxx" ;;
                esac
                ;;
+       I18N/Langinfo|langinfo)
+               case "$uselanginfo" in
+               true|define|y) avail_ext="$avail_ext $xxx" ;;
+               esac
+               ;;
        Sys/Syslog|sys/syslog)
                case $osname in
                        amigaos) ;; # not really very useful on AmigaOS
@@ -23514,14 +24230,6 @@ for xxx in $xs_extensions ; do
                        ;;
                esac
                ;;
-       Thread|thread)
-                case "$usethreads" in
-                true|$define|y)
-                        case "$use5005threads" in
-                        $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
-                        esac
-               esac
-               ;;
        threads|threads/shared)
                # threads and threads::shared are special cases.
                # To stop people from asking "Perl 5.8.0 was supposed
@@ -23926,6 +24634,7 @@ chmod='$chmod'
 chown='$chown'
 clocktype='$clocktype'
 comm='$comm'
+compiler_warning='$compiler_warning'
 compress='$compress'
 contains='$contains'
 cp='$cp'
@@ -23959,6 +24668,7 @@ d_PRIu64='$d_PRIu64'
 d_PRIx64='$d_PRIx64'
 d_SCNfldbl='$d_SCNfldbl'
 d__fwalk='$d__fwalk'
+d_accept4='$d_accept4'
 d_access='$d_access'
 d_accessx='$d_accessx'
 d_acosh='$d_acosh'
@@ -23971,6 +24681,7 @@ d_asinh='$d_asinh'
 d_atanh='$d_atanh'
 d_atolf='$d_atolf'
 d_atoll='$d_atoll'
+d_attribute_always_inline='$d_attribute_always_inline'
 d_attribute_deprecated='$d_attribute_deprecated'
 d_attribute_format='$d_attribute_format'
 d_attribute_malloc='$d_attribute_malloc'
@@ -23978,6 +24689,7 @@ d_attribute_nonnull='$d_attribute_nonnull'
 d_attribute_noreturn='$d_attribute_noreturn'
 d_attribute_pure='$d_attribute_pure'
 d_attribute_unused='$d_attribute_unused'
+d_attribute_visibility='$d_attribute_visibility'
 d_attribute_warn_unused_result='$d_attribute_warn_unused_result'
 d_backtrace='$d_backtrace'
 d_bsd='$d_bsd'
@@ -23999,7 +24711,6 @@ d_class='$d_class'
 d_clearenv='$d_clearenv'
 d_closedir='$d_closedir'
 d_cmsghdr_s='$d_cmsghdr_s'
-d_const='$d_const'
 d_copysign='$d_copysign'
 d_copysignl='$d_copysignl'
 d_cplusplus='$d_cplusplus'
@@ -24011,7 +24722,6 @@ d_ctermid_r='$d_ctermid_r'
 d_ctime64='$d_ctime64'
 d_ctime_r='$d_ctime_r'
 d_cuserid='$d_cuserid'
-d_dbl_dig='$d_dbl_dig'
 d_dbminitproto='$d_dbminitproto'
 d_difftime64='$d_difftime64'
 d_difftime='$d_difftime'
@@ -24034,6 +24744,7 @@ d_double_style_vax='$d_double_style_vax'
 d_drand48_r='$d_drand48_r'
 d_drand48proto='$d_drand48proto'
 d_dup2='$d_dup2'
+d_dup3='$d_dup3'
 d_duplocale='$d_duplocale'
 d_eaccess='$d_eaccess'
 d_endgrent='$d_endgrent'
@@ -24067,6 +24778,8 @@ d_fdclose='$d_fdclose'
 d_fdim='$d_fdim'
 d_fds_bits='$d_fds_bits'
 d_fegetround='$d_fegetround'
+d_ffs='$d_ffs'
+d_ffsl='$d_ffsl'
 d_fgetpos='$d_fgetpos'
 d_finite='$d_finite'
 d_finitel='$d_finitel'
@@ -24102,6 +24815,7 @@ d_gdbm_ndbm_h_uses_prototypes='$d_gdbm_ndbm_h_uses_prototypes'
 d_gdbmndbm_h_uses_prototypes='$d_gdbmndbm_h_uses_prototypes'
 d_getaddrinfo='$d_getaddrinfo'
 d_getcwd='$d_getcwd'
+d_getenv_preserves_other_thread='$d_getenv_preserves_other_thread'
 d_getespwnam='$d_getespwnam'
 d_getfsstat='$d_getfsstat'
 d_getgrent='$d_getgrent'
@@ -24162,13 +24876,13 @@ d_gmtime64='$d_gmtime64'
 d_gmtime_r='$d_gmtime_r'
 d_gnulibc='$d_gnulibc'
 d_grpasswd='$d_grpasswd'
+d_has_C_UTF8='$d_has_C_UTF8'
 d_hasmntopt='$d_hasmntopt'
 d_htonl='$d_htonl'
 d_hypot='$d_hypot'
 d_ilogb='$d_ilogb'
 d_ilogbl='$d_ilogbl'
 d_inc_version_list='$d_inc_version_list'
-d_index='$d_index'
 d_inetaton='$d_inetaton'
 d_inetntop='$d_inetntop'
 d_inetpton='$d_inetpton'
@@ -24229,6 +24943,7 @@ d_lstat='$d_lstat'
 d_madvise='$d_madvise'
 d_malloc_good_size='$d_malloc_good_size'
 d_malloc_size='$d_malloc_size'
+d_malloc_usable_size='$d_malloc_usable_size'
 d_mblen='$d_mblen'
 d_mbrlen='$d_mbrlen'
 d_mbrtowc='$d_mbrtowc'
@@ -24239,6 +24954,7 @@ d_memrchr='$d_memrchr'
 d_mkdir='$d_mkdir'
 d_mkdtemp='$d_mkdtemp'
 d_mkfifo='$d_mkfifo'
+d_mkostemp='$d_mkostemp'
 d_mkstemp='$d_mkstemp'
 d_mkstemps='$d_mkstemps'
 d_mktime64='$d_mktime64'
@@ -24271,6 +24987,8 @@ d_nextafter='$d_nextafter'
 d_nexttoward='$d_nexttoward'
 d_nice='$d_nice'
 d_nl_langinfo='$d_nl_langinfo'
+d_nl_langinfo_l='$d_nl_langinfo_l'
+d_non_int_bitfields='$d_non_int_bitfields'
 d_nv_preserves_uv='$d_nv_preserves_uv'
 d_nv_zero_is_allbits_zero='$d_nv_zero_is_allbits_zero'
 d_off64_t='$d_off64_t'
@@ -24283,6 +25001,7 @@ d_pathconf='$d_pathconf'
 d_pause='$d_pause'
 d_perl_otherlibdirs='$d_perl_otherlibdirs'
 d_phostname='$d_phostname'
+d_pipe2='$d_pipe2'
 d_pipe='$d_pipe'
 d_poll='$d_poll'
 d_portable='$d_portable'
@@ -24339,6 +25058,7 @@ d_semget='$d_semget'
 d_semop='$d_semop'
 d_sendmsg='$d_sendmsg'
 d_setegid='$d_setegid'
+d_setenv='$d_setenv'
 d_seteuid='$d_seteuid'
 d_setgrent='$d_setgrent'
 d_setgrent_r='$d_setgrent_r'
@@ -24348,6 +25068,7 @@ d_sethostent_r='$d_sethostent_r'
 d_setitimer='$d_setitimer'
 d_setlinebuf='$d_setlinebuf'
 d_setlocale='$d_setlocale'
+d_setlocale_accepts_any_locale_name='$d_setlocale_accepts_any_locale_name'
 d_setlocale_r='$d_setlocale_r'
 d_setnent='$d_setnent'
 d_setnetent_r='$d_setnetent_r'
@@ -24390,8 +25111,10 @@ d_sigprocmask='$d_sigprocmask'
 d_sigsetjmp='$d_sigsetjmp'
 d_sin6_scope_id='$d_sin6_scope_id'
 d_sitearch='$d_sitearch'
+d_snprintf='$d_snprintf'
 d_sockaddr_in6='$d_sockaddr_in6'
 d_sockaddr_sa_len='$d_sockaddr_sa_len'
+d_sockaddr_storage='$d_sockaddr_storage'
 d_sockatmark='$d_sockatmark'
 d_sockatmarkproto='$d_sockatmarkproto'
 d_socket='$d_socket'
@@ -24416,10 +25139,7 @@ d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
 d_stdio_stream_array='$d_stdio_stream_array'
 d_stdiobase='$d_stdiobase'
 d_stdstdio='$d_stdstdio'
-d_strchr='$d_strchr'
 d_strcoll='$d_strcoll'
-d_strerrm='$d_strerrm'
-d_strerror='$d_strerror'
 d_strerror_l='$d_strerror_l'
 d_strerror_r='$d_strerror_r'
 d_strftime='$d_strftime'
@@ -24427,6 +25147,7 @@ d_strlcat='$d_strlcat'
 d_strlcpy='$d_strlcpy'
 d_strnlen='$d_strnlen'
 d_strtod='$d_strtod'
+d_strtod_l='$d_strtod_l'
 d_strtol='$d_strtol'
 d_strtold='$d_strtold'
 d_strtold_l='$d_strtold_l'
@@ -24436,6 +25157,7 @@ d_strtoul='$d_strtoul'
 d_strtoull='$d_strtoull'
 d_strtouq='$d_strtouq'
 d_strxfrm='$d_strxfrm'
+d_strxfrm_l='$d_strxfrm_l'
 d_suidsafe='$d_suidsafe'
 d_symlink='$d_symlink'
 d_syscall='$d_syscall'
@@ -24449,6 +25171,7 @@ d_tcsetpgrp='$d_tcsetpgrp'
 d_telldir='$d_telldir'
 d_telldirproto='$d_telldirproto'
 d_tgamma='$d_tgamma'
+d_thread_local='$d_thread_local'
 d_thread_safe_nl_langinfo_l='$d_thread_safe_nl_langinfo_l'
 d_time='$d_time'
 d_timegm='$d_timegm'
@@ -24456,6 +25179,8 @@ d_times='$d_times'
 d_tm_tm_gmtoff='$d_tm_tm_gmtoff'
 d_tm_tm_zone='$d_tm_tm_zone'
 d_tmpnam_r='$d_tmpnam_r'
+d_towlower='$d_towlower'
+d_towupper='$d_towupper'
 d_trunc='$d_trunc'
 d_truncate='$d_truncate'
 d_truncl='$d_truncl'
@@ -24481,8 +25206,10 @@ d_vfork='$d_vfork'
 d_void_closedir='$d_void_closedir'
 d_voidsig='$d_voidsig'
 d_voidtty='$d_voidtty'
+d_vsnprintf='$d_vsnprintf'
 d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
+d_wcrtomb='$d_wcrtomb'
 d_wcscmp='$d_wcscmp'
 d_wcstombs='$d_wcstombs'
 d_wcsxfrm='$d_wcsxfrm'
@@ -24587,6 +25314,7 @@ html3dir='$html3dir'
 html3direxp='$html3direxp'
 i16size='$i16size'
 i16type='$i16type'
+i32dformat='$i32dformat'
 i32size='$i32size'
 i32type='$i32type'
 i64size='$i64size'
@@ -24594,7 +25322,6 @@ i64type='$i64type'
 i8size='$i8size'
 i8type='$i8type'
 i_arpainet='$i_arpainet'
-i_assert='$i_assert'
 i_bfd='$i_bfd'
 i_bsdioctl='$i_bsdioctl'
 i_crypt='$i_crypt'
@@ -24605,7 +25332,6 @@ i_dlfcn='$i_dlfcn'
 i_execinfo='$i_execinfo'
 i_fcntl='$i_fcntl'
 i_fenv='$i_fenv'
-i_float='$i_float'
 i_fp='$i_fp'
 i_fp_class='$i_fp_class'
 i_gdbm='$i_gdbm'
@@ -24616,13 +25342,10 @@ i_ieeefp='$i_ieeefp'
 i_inttypes='$i_inttypes'
 i_langinfo='$i_langinfo'
 i_libutil='$i_libutil'
-i_limits='$i_limits'
 i_locale='$i_locale'
 i_machcthr='$i_machcthr'
 i_malloc='$i_malloc'
 i_mallocmalloc='$i_mallocmalloc'
-i_math='$i_math'
-i_memory='$i_memory'
 i_mntent='$i_mntent'
 i_ndbm='$i_ndbm'
 i_netdb='$i_netdb'
@@ -24641,7 +25364,6 @@ i_socks='$i_socks'
 i_stdbool='$i_stdbool'
 i_stdint='$i_stdint'
 i_stdlib='$i_stdlib'
-i_string='$i_string'
 i_sunmath='$i_sunmath'
 i_sysaccess='$i_sysaccess'
 i_sysdir='$i_sysdir'
@@ -24678,9 +25400,9 @@ i_time='$i_time'
 i_unistd='$i_unistd'
 i_ustat='$i_ustat'
 i_utime='$i_utime'
-i_values='$i_values'
 i_vfork='$i_vfork'
 i_wchar='$i_wchar'
+i_wctype='$i_wctype'
 i_xlocale='$i_xlocale'
 ignore_versioned_solibs='$ignore_versioned_solibs'
 inc_version_list='$inc_version_list'
@@ -24826,6 +25548,7 @@ perl5='$perl5'
 perl='$perl'
 perl_patchlevel='$perl_patchlevel'
 perl_static_inline='$perl_static_inline'
+perl_thread_local='$perl_thread_local'
 perladmin='$perladmin'
 perllibs='$perllibs'
 perlpath='$perlpath'
@@ -24937,6 +25660,8 @@ srand48_r_proto='$srand48_r_proto'
 srandom_r_proto='$srandom_r_proto'
 src='$src'
 ssizetype='$ssizetype'
+st_dev_sign='$st_dev_sign'
+st_dev_size='$st_dev_size'
 st_ino_sign='$st_ino_sign'
 st_ino_size='$st_ino_size'
 startperl='$startperl'
@@ -24950,7 +25675,6 @@ stdio_filbuf='$stdio_filbuf'
 stdio_ptr='$stdio_ptr'
 stdio_stream_array='$stdio_stream_array'
 strerror_r_proto='$strerror_r_proto'
-strings='$strings'
 submit='$submit'
 subversion='$subversion'
 sysman='$sysman'
@@ -24978,8 +25702,12 @@ troff='$troff'
 ttyname_r_proto='$ttyname_r_proto'
 u16size='$u16size'
 u16type='$u16type'
+u32XUformat='$u32XUformat'
+u32oformat='$u32oformat'
 u32size='$u32size'
 u32type='$u32type'
+u32uformat='$u32uformat'
+u32xformat='$u32xformat'
 u64size='$u64size'
 u64type='$u64type'
 u8size='$u8size'
@@ -24991,17 +25719,18 @@ uidtype='$uidtype'
 uname='$uname'
 uniq='$uniq'
 uquadtype='$uquadtype'
-use5005threads='$use5005threads'
 use64bitall='$use64bitall'
 use64bitint='$use64bitint'
 usecbacktrace='$usecbacktrace'
 usecrosscompile='$usecrosscompile'
+usedefaultstrict='$usedefaultstrict'
 usedevel='$usedevel'
 usedl='$usedl'
 usedtrace='$usedtrace'
 usefaststdio='$usefaststdio'
 useithreads='$useithreads'
 usekernprocpathname='$usekernprocpathname'
+uselanginfo='$uselanginfo'
 uselargefiles='$uselargefiles'
 uselongdouble='$uselongdouble'
 usemallocwrap='$usemallocwrap'
@@ -25055,6 +25784,7 @@ version_patchlevel_string='$version_patchlevel_string'
 versiononly='$versiononly'
 vi='$vi'
 xlibpth='$xlibpth'
+xlocale_needed='$xlocale_needed'
 yacc='$yacc'
 yaccflags='$yaccflags'
 zcat='$zcat'