diff --git a/config/c-library.m4 b/config/c-library.m4
index 1d28c45..50d068d 100644
*** a/config/c-library.m4
--- b/config/c-library.m4
*************** fi
*** 316,319 ****
  if test "$pgac_cv_type_locale_t" = 'yes (in xlocale.h)'; then
    AC_DEFINE(LOCALE_T_IN_XLOCALE, 1,
              [Define to 1 if `locale_t' requires <xlocale.h>.])
! fi])])# PGAC_HEADER_XLOCALE
--- 316,349 ----
  if test "$pgac_cv_type_locale_t" = 'yes (in xlocale.h)'; then
    AC_DEFINE(LOCALE_T_IN_XLOCALE, 1,
              [Define to 1 if `locale_t' requires <xlocale.h>.])
! fi])# PGAC_TYPE_LOCALE_T
! 
! 
! # PGAC_FUNC_WCSTOMBS_L
! # --------------------
! # Try to find a declaration for wcstombs_l().  It might be in stdlib.h
! # (following the POSIX requirement for wcstombs()), or in locale.h, or in
! # xlocale.h.  If it's in the latter, define WCSTOMBS_L_IN_XLOCALE.
! #
! AC_DEFUN([PGAC_FUNC_WCSTOMBS_L],
! [AC_CACHE_CHECK([for wcstombs_l declaration], pgac_cv_func_wcstombs_l,
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! [#include <stdlib.h>
! #include <locale.h>],
! [#ifndef wcstombs_l
! (void) wcstombs_l;
! #endif])],
! [pgac_cv_func_wcstombs_l='yes'],
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! [#include <stdlib.h>
! #include <locale.h>
! #include <xlocale.h>],
! [#ifndef wcstombs_l
! (void) wcstombs_l;
! #endif])],
! [pgac_cv_func_wcstombs_l='yes (in xlocale.h)'],
! [pgac_cv_func_wcstombs_l='no'])])])
! if test "$pgac_cv_func_wcstombs_l" = 'yes (in xlocale.h)'; then
!   AC_DEFINE(WCSTOMBS_L_IN_XLOCALE, 1,
!             [Define to 1 if `wcstombs_l' requires <xlocale.h>.])
! fi])# PGAC_FUNC_WCSTOMBS_L
diff --git a/configure b/configure
index 08cff23..a45be67 100755
*** a/configure
--- b/configure
*************** $as_echo "#define GETTIMEOFDAY_1ARG 1" >
*** 12364,12369 ****
--- 12364,12422 ----
  
  fi
  
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcstombs_l declaration" >&5
+ $as_echo_n "checking for wcstombs_l declaration... " >&6; }
+ if ${pgac_cv_func_wcstombs_l+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <locale.h>
+ int
+ main ()
+ {
+ #ifndef wcstombs_l
+ (void) wcstombs_l;
+ #endif
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+   pgac_cv_func_wcstombs_l='yes'
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <locale.h>
+ #include <xlocale.h>
+ int
+ main ()
+ {
+ #ifndef wcstombs_l
+ (void) wcstombs_l;
+ #endif
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+   pgac_cv_func_wcstombs_l='yes (in xlocale.h)'
+ else
+   pgac_cv_func_wcstombs_l='no'
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_func_wcstombs_l" >&5
+ $as_echo "$pgac_cv_func_wcstombs_l" >&6; }
+ if test "$pgac_cv_func_wcstombs_l" = 'yes (in xlocale.h)'; then
+ 
+ $as_echo "#define WCSTOMBS_L_IN_XLOCALE 1" >>confdefs.h
+ 
+ fi
  
  # Some versions of libedit contain strlcpy(), setproctitle(), and other
  # symbols that that library has no business exposing to the world.  Pending
diff --git a/configure.in b/configure.in
index 0b7dd97..c298926 100644
*** a/configure.in
--- b/configure.in
*************** fi
*** 1423,1428 ****
--- 1423,1429 ----
  PGAC_VAR_INT_TIMEZONE
  AC_FUNC_ACCEPT_ARGTYPES
  PGAC_FUNC_GETTIMEOFDAY_1ARG
+ PGAC_FUNC_WCSTOMBS_L
  
  # Some versions of libedit contain strlcpy(), setproctitle(), and other
  # symbols that that library has no business exposing to the world.  Pending
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index b3ceea5..3813226 100644
*** a/src/include/pg_config.h.in
--- b/src/include/pg_config.h.in
***************
*** 851,856 ****
--- 851,859 ----
  /* Define to select Win32-style shared memory. */
  #undef USE_WIN32_SHARED_MEMORY
  
+ /* Define to 1 if `wcstombs_l' requires <xlocale.h>. */
+ #undef WCSTOMBS_L_IN_XLOCALE
+ 
  /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
     significant byte first (like Motorola and SPARC, unlike Intel). */
  #if defined AC_APPLE_UNIVERSAL_BUILD
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 8566065..eba36df 100644
*** a/src/include/pg_config.h.win32
--- b/src/include/pg_config.h.win32
***************
*** 657,662 ****
--- 657,665 ----
  /* Define to select Win32-style semaphores. */
  #define USE_WIN32_SEMAPHORES 1
  
+ /* Define to 1 if `wcstombs_l' requires <xlocale.h>. */
+ /* #undef WCSTOMBS_L_IN_XLOCALE */
+ 
  /* Number of bits in a file offset, on hosts where this is settable. */
  /* #undef _FILE_OFFSET_BITS */
  
diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h
index 2e6dba1..0a4b9f7 100644
*** a/src/include/utils/pg_locale.h
--- b/src/include/utils/pg_locale.h
***************
*** 13,19 ****
  #define _PG_LOCALE_
  
  #include <locale.h>
! #ifdef LOCALE_T_IN_XLOCALE
  #include <xlocale.h>
  #endif
  
--- 13,19 ----
  #define _PG_LOCALE_
  
  #include <locale.h>
! #if defined(LOCALE_T_IN_XLOCALE) || defined(WCSTOMBS_L_IN_XLOCALE)
  #include <xlocale.h>
  #endif
  
