This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Configure: avoid here-doc in eval-ed snippet
[perl5.git] / Configure
index 0db5887..acea1c1 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -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=''
@@ -371,6 +372,7 @@ cppminus=''
 cpprun=''
 cppstdin=''
 d__fwalk=''
+d_accept4=''
 d_access=''
 d_accessx=''
 d_acosh=''
@@ -380,6 +382,7 @@ asctime_r_proto=''
 d_asctime_r=''
 d_asinh=''
 d_atanh=''
+d_attribute_always_inline=''
 d_attribute_deprecated=''
 d_attribute_format=''
 d_attribute_malloc=''
@@ -408,7 +411,6 @@ d_clearenv=''
 d_closedir=''
 d_void_closedir=''
 d_cmsghdr_s=''
-d_const=''
 d_copysign=''
 d_copysignl=''
 d_cplusplus=''
@@ -438,6 +440,7 @@ d_drand48_r=''
 drand48_r_proto=''
 d_drand48proto=''
 d_dup2=''
+d_dup3=''
 d_eaccess=''
 d_endgrent=''
 d_endgrent_r=''
@@ -655,6 +658,7 @@ d_lstat=''
 d_madvise=''
 d_malloc_good_size=''
 d_malloc_size=''
+d_malloc_usable_size=''
 d_mblen=''
 d_mbrlen=''
 d_mbrtowc=''
@@ -665,6 +669,7 @@ d_memrchr=''
 d_mkdir=''
 d_mkdtemp=''
 d_mkfifo=''
+d_mkostemp=''
 d_mkstemp=''
 d_mkstemps=''
 d_mktime=''
@@ -700,6 +705,7 @@ d_open3=''
 d_fpathconf=''
 d_pathconf=''
 d_pause=''
+d_pipe2=''
 d_pipe=''
 d_poll=''
 d_portable=''
@@ -758,7 +764,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=''
@@ -807,6 +815,8 @@ d_signbit=''
 d_sigprocmask=''
 d_sigsetjmp=''
 usesitecustomize=''
+d_snprintf=''
+d_vsnprintf=''
 d_sockatmark=''
 d_sockatmarkproto=''
 d_ip_mreq=''
@@ -866,6 +876,7 @@ d_strlcat=''
 d_strlcpy=''
 d_strnlen=''
 d_strtod=''
+d_strtod_l=''
 d_strtol=''
 d_strtold=''
 d_strtold_l=''
@@ -897,6 +908,8 @@ clocktype=''
 d_times=''
 d_tmpnam_r=''
 tmpnam_r_proto=''
+d_towlower=''
+d_towupper=''
 d_trunc=''
 d_truncate=''
 d_truncl=''
@@ -921,6 +934,7 @@ d_voidsig=''
 signal_t=''
 d_wait4=''
 d_waitpid=''
+d_wcrtomb=''
 d_wcscmp=''
 d_wcstombs=''
 d_wcsxfrm=''
@@ -1065,6 +1079,7 @@ i_ustat=''
 i_utime=''
 i_vfork=''
 i_wchar=''
+i_wctype=''
 d_inc_version_list=''
 inc_version_list=''
 inc_version_list_init=''
@@ -1462,6 +1477,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=''
@@ -1520,8 +1537,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 contact me (Perl Maintainers) at https://github.com/Perl/perl5/issues
+and we'll try to straighten this all out.
 EOM
        exit 1
        ;;
@@ -2104,7 +2121,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
@@ -2384,7 +2401,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:
 
@@ -3353,7 +3370,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
@@ -3489,6 +3506,9 @@ EOM
                        ;;
                MiNT)   osname=mint
                        ;;
+               minix)  osname=minix
+                       osvers=`$uname -r`
+                       ;;
                netbsd*) osname=netbsd
                        osvers="$3"
                        ;;
@@ -3500,8 +3520,8 @@ EOM
                        ;;
                nonstop-ux) osname=nonstopux ;;
                openbsd) osname=openbsd
-                       osvers="$3"
-                       ;;
+                       osvers="$3"
+                       ;;
                os2)    osname=os2
                        osvers="$4"
                        ;;
@@ -4152,14 +4172,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=`./loc . /usr/local /usr/local /local /opt /usr`
        ;;
-*?/)
-       dflt=`echo "$prefix" | sed 's/.$//'`
-       ;;
-*)
-       dflt="$prefix"
+*)     dflt="$prefix"
        ;;
 esac
 $cat <<EOM
@@ -4178,16 +4193,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
@@ -4679,7 +4703,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='' ;;
@@ -4719,7 +4743,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 | \
@@ -5200,7 +5224,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
@@ -5445,13 +5469,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.
@@ -5460,7 +5484,7 @@ default|recommended)
                ;;
        esac
        case "$gccversion" in
-       1*) ;;
+       1.*) ;;
        2.[0-8]*) ;;
        ?*)     set strict-aliasing -fno-strict-aliasing
                eval $checkccflag
@@ -5578,7 +5602,7 @@ case "$cppflags" in
     ;;
 esac
 case "$gccversion" in
-1*) cppflags="$cppflags -D__GNUC__"
+1.*) cppflags="$cppflags -D__GNUC__"
 esac
 case "$mips_type" in
 '');;
@@ -5764,7 +5788,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;
@@ -5773,7 +5797,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'
@@ -7239,7 +7263,7 @@ prefixit='case "$3" in
                none)
                        eval "tp=\"\$$2\"";
                        case "$tp" in
-                       ""|" ") eval "$1=\"\$$2\"";;
+                       ""|" "|none) eval "$1=\"\$$2\"";;
                        *) eval "$1=";;
                        esac;;
                esac;;
@@ -7788,7 +7812,6 @@ EOM
        ;;
 esac
 
-
 : determine whether to use malloc wrapping
 echo " "
 case "$usemallocwrap" in
@@ -8094,6 +8117,10 @@ while $test 1 ; do
        $define|true|[yY]*)
                dflt='y'
                ;;
+       $undef|false|[nN]*)
+               dflt='n'
+               dflt_dtrace=""
+               ;;
        ?*)
                dflt='y'
                dflt_dtrace=$usedtrace
@@ -8530,7 +8557,7 @@ EOM
        if $test "X$sysroot" != X; then
            case "$gccversion" in
                '') ;;
-               *)  dflt="$dflt --sysroot $sysroot" ;;
+               *)  dflt="$dflt --sysroot=$sysroot" ;;
            esac
        fi
 
@@ -8757,7 +8784,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
@@ -8794,7 +8821,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)
@@ -8952,8 +8979,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'
@@ -9198,7 +9225,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="[       . ]"
@@ -9231,7 +9258,7 @@ case "$myhostname" in
                                .) dflt=.`$sed -n -e 's/        / /g' \
                                     -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
                                     -e 1q 2>/dev/null`
-                                       ;;
+                                       ;;
                                esac
                        fi
                        ;;
@@ -9591,16 +9618,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
@@ -9640,7 +9663,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
@@ -9803,8 +9825,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
@@ -10363,15 +10385,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
@@ -10384,7 +10406,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
@@ -10403,7 +10425,7 @@ char *myname = "sprintf";
 #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",
@@ -10552,6 +10574,7 @@ for xxx_convert in $xxx_list; do
                fi
        else
                echo "$xxx_convert NOT found." >&4
+               xxx_convert=''
        fi
 done
 
@@ -10582,6 +10605,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
 
@@ -10725,6 +10752,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;
@@ -10912,7 +10940,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*) ;;
@@ -10989,8 +11017,15 @@ $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
@@ -11217,6 +11252,34 @@ 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 $contains '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*
+
 : see if getpgrp exists
 set getpgrp d_getpgrp
 eval $inlibc
@@ -11226,6 +11289,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
@@ -11292,6 +11356,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
@@ -12032,28 +12097,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
@@ -12129,7 +12172,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*) ;;
@@ -12186,7 +12229,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*) ;;
@@ -12239,7 +12282,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*) ;;
@@ -12607,7 +12650,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*) ;;
@@ -12637,6 +12680,34 @@ eval $hasproto
 set dup2 d_dup2
 eval $inlibc
 
+: see if dup3 exists
+set dup3 d_dup3
+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
+
 : see if eaccess exists
 set eaccess d_eaccess
 eval $inlibc
@@ -12694,7 +12765,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*) ;;
@@ -12747,7 +12818,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*) ;;
@@ -12796,7 +12867,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*) ;;
@@ -12845,7 +12916,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*) ;;
@@ -12982,7 +13053,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*) ;;
@@ -13031,7 +13102,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*) ;;
@@ -13617,7 +13688,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" ;;
@@ -13691,8 +13762,6 @@ esac
 set d_faststdio
 eval $setvar
 
-
-
 : see if fchdir exists
 set fchdir d_fchdir
 eval $inlibc
@@ -13986,30 +14055,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
@@ -14055,7 +14100,6 @@ eval $inlibc
 set fstatvfs d_fstatvfs
 eval $inlibc
 
-
 : see if fsync exists
 set fsync d_fsync
 eval $inlibc
@@ -14073,9 +14117,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 ()
 {
@@ -14244,7 +14290,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*) ;;
@@ -14297,7 +14343,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*) ;;
@@ -14354,7 +14400,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*) ;;
@@ -14532,7 +14578,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*) ;;
@@ -14581,7 +14627,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*) ;;
@@ -14642,7 +14688,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*) ;;
@@ -14708,7 +14754,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*) ;;
@@ -14801,7 +14847,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*) ;;
@@ -14854,7 +14900,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*) ;;
@@ -14915,7 +14961,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*) ;;
@@ -15003,7 +15049,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*) ;;
@@ -15052,7 +15098,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*) ;;
@@ -15105,7 +15151,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*) ;;
@@ -15179,7 +15225,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*) ;;
@@ -15232,7 +15278,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*) ;;
@@ -15285,7 +15331,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*) ;;
@@ -15348,7 +15394,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*) ;;
@@ -15397,7 +15443,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*) ;;
@@ -15450,7 +15496,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*) ;;
@@ -15508,7 +15554,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*) ;;
@@ -15572,7 +15618,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*) ;;
@@ -15768,7 +15814,7 @@ eval $inlibc
 echo "Checking to see if you have isless..." >&4
 $cat >try.c <<EOCP
 #include <math.h>
-int main() { return isless(0.0); }
+int main() { return isless(2.0, 1.0); }
 EOCP
 set try
 if eval $compile; then
@@ -15861,27 +15907,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
@@ -15890,6 +15933,7 @@ else
 fi
 set d_lchown
 eval $setvar
+$rm_try
 
 : See if number of significant digits in a double precision number is known
 echo " "
@@ -15991,7 +16035,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*) ;;
@@ -16134,6 +16178,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
@@ -16155,12 +16203,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
@@ -16174,6 +16256,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
@@ -16186,7 +16272,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
 
@@ -16211,8 +16297,6 @@ END
        ;;
 esac
 
-
-
 : see if sqrtl exists
 set sqrtl d_sqrtl
 eval $inlibc
@@ -16342,7 +16426,6 @@ case "$d_msghdr_s" in
 *)              echo "No, it doesn't." ;;
 esac
 
-
 : see if msync exists
 set msync d_msync
 eval $inlibc
 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
@@ -17184,7 +17271,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*) ;;
@@ -17239,7 +17326,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*) ;;
@@ -17284,7 +17371,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*) ;;
@@ -17558,21 +17645,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
@@ -17656,7 +17753,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*) ;;
@@ -17705,7 +17802,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*) ;;
@@ -17734,14 +17831,188 @@ eval $inlibc
 set setlinebuf d_setlinebuf
 eval $inlibc
 
-: see if setlocale exists
-set setlocale d_setlocale
-eval $inlibc
-
 : see if locale.h is available
 set locale.h i_locale
 eval $inhdr
 
+: see if this system has wctype.h
+set wctype.h i_wctype
+eval $inhdr
+
+: see if towupper exists
+set towupper d_towupper
+eval $inlibc
+
+: check for setlocale function and behavior
+$cat <<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
+set try
+if eval $compile; then
+    echo "Your system has setlocale()..." >&4
+    $run ./try
+    case $? in
+        0) echo "and it seems sane" >&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" >&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
+$rm_try
+
 : see if setlocale_r exists
 set setlocale_r d_setlocale_r
 eval $inlibc
@@ -17762,7 +18033,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*) ;;
@@ -17811,7 +18082,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*) ;;
@@ -17876,7 +18147,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*) ;;
@@ -17925,7 +18196,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*) ;;
@@ -17994,7 +18265,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*) ;;
@@ -18330,6 +18601,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
@@ -18363,7 +18699,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*) ;;
@@ -18404,7 +18740,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*) ;;
@@ -18467,7 +18803,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)
@@ -18597,7 +18932,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)
@@ -18608,7 +18943,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
@@ -18664,7 +18999,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*) ;;
@@ -18690,12 +19025,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
@@ -18705,6 +19074,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
@@ -18735,9 +19108,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);
@@ -18790,11 +19163,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);
@@ -18814,7 +19187,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
@@ -18827,7 +19200,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
@@ -18870,14 +19243,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);
@@ -18893,7 +19266,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)
@@ -18927,11 +19300,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);
@@ -18947,7 +19320,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)
@@ -19174,7 +19547,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*) ;;
@@ -19195,6 +19568,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
@@ -19231,7 +19608,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*) ;;
@@ -19548,6 +19925,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'
@@ -19751,10 +20132,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
@@ -19845,16 +20222,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()
@@ -19888,16 +20262,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()
@@ -20443,7 +20814,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="$?"
@@ -20577,7 +20948,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.)
@@ -20709,7 +21080,6 @@ else
        echo "(I can't compile the test program--guessing $gidsize.)" >&4
 fi
 
-
 : Check if GID is signed
 echo " "
 case "$gidtype" in
@@ -20747,7 +21117,6 @@ else
        echo "(I can't compile the test program--guessing unsigned.)" >&4
 fi
 
-
 : Check 64bit sizes
 echo " "
 
@@ -20770,7 +21139,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
@@ -20792,7 +21161,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
@@ -20815,7 +21184,7 @@ EOCP
                case "$yyy" in
                12345678901)
                        sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
-                       sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
+                       sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
                        echo "We will use the C9X style."
                        ;;
                esac
@@ -20837,7 +21206,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
@@ -20859,7 +21228,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
@@ -20881,7 +21250,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
@@ -21893,17 +22262,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:"
@@ -21962,7 +22331,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
@@ -22235,7 +22603,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
@@ -22668,7 +23035,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
@@ -22753,7 +23120,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
@@ -22859,7 +23226,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
@@ -23185,11 +23552,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
@@ -23243,6 +23605,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
@@ -23699,6 +24066,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'
@@ -23711,6 +24079,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'
@@ -23739,7 +24108,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'
@@ -23773,6 +24141,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'
@@ -23901,6 +24270,7 @@ 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'
@@ -23967,6 +24337,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'
@@ -23977,6 +24348,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'
@@ -24021,6 +24393,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'
@@ -24086,6 +24459,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'
@@ -24128,6 +24502,7 @@ 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_sockatmark='$d_sockatmark'
@@ -24162,6 +24537,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'
@@ -24191,6 +24567,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'
@@ -24216,8 +24594,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'
@@ -24409,6 +24789,7 @@ i_ustat='$i_ustat'
 i_utime='$i_utime'
 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'
@@ -24729,6 +25110,7 @@ usedtrace='$usedtrace'
 usefaststdio='$usefaststdio'
 useithreads='$useithreads'
 usekernprocpathname='$usekernprocpathname'
+uselanginfo='$uselanginfo'
 uselargefiles='$uselargefiles'
 uselongdouble='$uselongdouble'
 usemallocwrap='$usemallocwrap'