2010-09-20 Jie Zhang Issue #5256 libstdc++-v3/ Backport from mainline: 2010-05-21 Joseph Myers * acinclude.m4 (GLIBCXX_ENABLE_CLOCALE): Use GNU locale model for glibc 2.3 and later, but not uClibc, without an execution test. * configure: Regenerate. * doc/xml/manual/configure.xml, doc/xml/manual/prerequisites.xml, doc/xml/faq.xml: Update. === modified file 'libstdc++-v3/acinclude.m4' Index: gcc-4.5/libstdc++-v3/acinclude.m4 =================================================================== --- gcc-4.5.orig/libstdc++-v3/acinclude.m4 +++ gcc-4.5/libstdc++-v3/acinclude.m4 @@ -1740,41 +1740,11 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [ if test $enable_clocale_flag = gnu; then AC_EGREP_CPP([_GLIBCXX_ok], [ #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) + #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__) _GLIBCXX_ok #endif ], enable_clocale_flag=gnu, enable_clocale_flag=generic) - if test $enable_clocale = auto; then - # Test for bugs early in glibc-2.2.x series - AC_TRY_RUN([ - #define _GNU_SOURCE 1 - #include - #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) - extern __typeof(newlocale) __newlocale; - extern __typeof(duplocale) __duplocale; - extern __typeof(strcoll_l) __strcoll_l; - #endif - int main() - { - const char __one[] = "Äuglein Augmen"; - const char __two[] = "Äuglein"; - int i; - int j; - __locale_t loc; - __locale_t loc_dup; - loc = __newlocale(1 << LC_ALL, "de_DE", 0); - loc_dup = __duplocale(loc); - i = __strcoll_l(__one, __two, loc); - j = __strcoll_l(__one, __two, loc_dup); - return 0; - } - ], - [enable_clocale_flag=gnu],[enable_clocale_flag=generic], - [enable_clocale_flag=generic]) - fi - # Set it to scream when it hurts. ac_save_CFLAGS="$CFLAGS" CFLAGS="-Wimplicit-function-declaration -Werror" Index: gcc-4.5/libstdc++-v3/configure =================================================================== --- gcc-4.5.orig/libstdc++-v3/configure +++ gcc-4.5/libstdc++-v3/configure @@ -15627,7 +15627,7 @@ fi /* end confdefs.h. */ #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) + #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__) _GLIBCXX_ok #endif @@ -15641,49 +15641,6 @@ fi rm -f conftest* - if test $enable_clocale = auto; then - # Test for bugs early in glibc-2.2.x series - if test "$cross_compiling" = yes; then : - enable_clocale_flag=generic -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #define _GNU_SOURCE 1 - #include - #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) - extern __typeof(newlocale) __newlocale; - extern __typeof(duplocale) __duplocale; - extern __typeof(strcoll_l) __strcoll_l; - #endif - int main() - { - const char __one[] = "Äuglein Augmen"; - const char __two[] = "Äuglein"; - int i; - int j; - __locale_t loc; - __locale_t loc_dup; - loc = __newlocale(1 << LC_ALL, "de_DE", 0); - loc_dup = __duplocale(loc); - i = __strcoll_l(__one, __two, loc); - j = __strcoll_l(__one, __two, loc_dup); - return 0; - } - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - enable_clocale_flag=gnu -else - enable_clocale_flag=generic -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi - # Set it to scream when it hurts. ac_save_CFLAGS="$CFLAGS" CFLAGS="-Wimplicit-function-declaration -Werror" Index: gcc-4.5/libstdc++-v3/doc/xml/faq.xml =================================================================== --- gcc-4.5.orig/libstdc++-v3/doc/xml/faq.xml +++ gcc-4.5/libstdc++-v3/doc/xml/faq.xml @@ -636,6 +636,8 @@ C library (glibc) version 2.2.5. That version of glibc is over a year old and contains necessary bugfixes. Many GNU/Linux distros make glibc version 2.3.x available now. + libstdc++ 4.6.0 and later require glibc 2.3 or later for this + localization and formatting code. The guideline is simple: the more recent the C++ library, the more recent the C library. (This is also documented in the main Index: gcc-4.5/libstdc++-v3/doc/xml/manual/configure.xml =================================================================== --- gcc-4.5.orig/libstdc++-v3/doc/xml/manual/configure.xml +++ gcc-4.5/libstdc++-v3/doc/xml/manual/configure.xml @@ -113,8 +113,7 @@ If not explicitly specified, the configure proccess tries to guess the most suitable package from the choices above. The default is 'generic'. On glibc-based systems of sufficient - vintage (2.2.5 and newer) and capability (with installed DE and - FR locale data), 'gnu' is automatically selected. This option + vintage (2.3 and newer), 'gnu' is automatically selected. This option can change the library ABI. Index: gcc-4.5/libstdc++-v3/doc/xml/manual/prerequisites.xml =================================================================== --- gcc-4.5.orig/libstdc++-v3/doc/xml/manual/prerequisites.xml +++ gcc-4.5/libstdc++-v3/doc/xml/manual/prerequisites.xml @@ -52,16 +52,8 @@ If gcc 3.1.0 or later on is being used on linux, an attempt will be made to use "C" library functionality necessary for - C++ named locale support. For gcc 3.2.1 and later, this - means that glibc 2.2.5 or later is required and the "C" - library de_DE locale information must be installed. - - - - Note however that the sanity checks involving the de_DE - locale are skipped when an explicit --enable-clocale=gnu - configure option is used: only the basic checks are carried - out, defending against misconfigurations. + C++ named locale support. For gcc 4.6.0 and later, this + means that glibc 2.3 or later is required.