| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | Allow C99-depending features of libstdc++ with uClibcThe libstdc++ code is fairly restrictive on how it checks for C99compatibility: it requires *complete* C99 support to enable certainfeatures. For example, uClibc provides a good number of C99 features,but not C99 complex number support. For this reason, libstdc++completely disables many the standard C++ methods that can in factwork because uClibc provides the necessary functions.This patch is similar and highly inspired fromhttps://gcc.gnu.org/bugzilla/show_bug.cgi?id=58393, but implemented ina way that doesn't involve changing the configure.ac script, asautoreconfiguring gcc is complicated. It simply relies on the factthat uClibc defines the __UCLIBC__ definition.Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>Index: b/libstdc++-v3/config/locale/generic/c_locale.h===================================================================--- a/libstdc++-v3/config/locale/generic/c_locale.h+++ b/libstdc++-v3/config/locale/generic/c_locale.h@@ -70,7 +70,7 @@     __builtin_va_list __args;     __builtin_va_start(__args, __fmt); -#ifdef _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)     const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); #else     const int __ret = __builtin_vsprintf(__out, __fmt, __args);Index: b/libstdc++-v3/config/locale/gnu/c_locale.h===================================================================--- a/libstdc++-v3/config/locale/gnu/c_locale.h+++ b/libstdc++-v3/config/locale/gnu/c_locale.h@@ -88,7 +88,7 @@     __builtin_va_list __args;     __builtin_va_start(__args, __fmt); -#ifdef _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)     const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); #else     const int __ret = __builtin_vsprintf(__out, __fmt, __args);Index: b/libstdc++-v3/include/bits/basic_string.h===================================================================--- a/libstdc++-v3/include/bits/basic_string.h+++ b/libstdc++-v3/include/bits/basic_string.h@@ -2828,7 +2828,7 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace -#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \+#if ((__cplusplus >= 201103L) && (defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)) \      && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))  #include <ext/string_conversions.h>Index: b/libstdc++-v3/include/bits/locale_facets.tcc===================================================================--- a/libstdc++-v3/include/bits/locale_facets.tcc+++ b/libstdc++-v3/include/bits/locale_facets.tcc@@ -987,7 +987,7 @@ 	char __fbuf[16]; 	__num_base::_S_format_float(__io, __fbuf, __mod); -#ifdef _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__) 	// First try a buffer perhaps big enough (most probably sufficient 	// for non-ios_base::fixed outputs) 	int __cs_size = __max_digits * 3;Index: b/libstdc++-v3/include/bits/locale_facets_nonio.tcc===================================================================--- a/libstdc++-v3/include/bits/locale_facets_nonio.tcc+++ b/libstdc++-v3/include/bits/locale_facets_nonio.tcc@@ -572,7 +572,7 @@     {       const locale __loc = __io.getloc();       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);-#ifdef _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)       // First try a buffer perhaps big enough.       int __cs_size = 64;       char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));Index: b/libstdc++-v3/include/c_compatibility/math.h===================================================================--- a/libstdc++-v3/include/c_compatibility/math.h+++ b/libstdc++-v3/include/c_compatibility/math.h@@ -56,7 +56,7 @@ using std::floor; using std::fmod; -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__) using std::fpclassify; using std::isfinite; using std::isinf;Index: b/libstdc++-v3/include/c_compatibility/wchar.h===================================================================--- a/libstdc++-v3/include/c_compatibility/wchar.h+++ b/libstdc++-v3/include/c_compatibility/wchar.h@@ -103,7 +103,7 @@ using std::wmemset; using std::wcsftime; -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__) using std::wcstold; using std::wcstoll; using std::wcstoull;Index: b/libstdc++-v3/include/c_global/cstdlib===================================================================--- a/libstdc++-v3/include/c_global/cstdlib+++ b/libstdc++-v3/include/c_global/cstdlib@@ -182,7 +182,7 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  #undef _Exit #undef llabsIndex: b/libstdc++-v3/include/c_global/cwchar===================================================================--- a/libstdc++-v3/include/c_global/cwchar+++ b/libstdc++-v3/include/c_global/cwchar@@ -232,7 +232,7 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  #undef wcstold #undef wcstoll@@ -289,7 +289,7 @@   using std::vwscanf; #endif -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)   using std::wcstold;   using std::wcstoll;   using std::wcstoull;Index: b/libstdc++-v3/include/c_std/cstdio===================================================================--- a/libstdc++-v3/include/c_std/cstdio+++ b/libstdc++-v3/include/c_std/cstdio@@ -144,7 +144,7 @@   using ::vsprintf; } // namespace std -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  #undef snprintf #undef vfscanfIndex: b/libstdc++-v3/include/c_std/cstdlib===================================================================--- a/libstdc++-v3/include/c_std/cstdlib+++ b/libstdc++-v3/include/c_std/cstdlib@@ -180,7 +180,7 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  #undef _Exit #undef llabsIndex: b/libstdc++-v3/include/c_std/cwchar===================================================================--- a/libstdc++-v3/include/c_std/cwchar+++ b/libstdc++-v3/include/c_std/cwchar@@ -228,7 +228,7 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  #undef wcstold #undef wcstollIndex: b/libstdc++-v3/include/ext/vstring.h===================================================================--- a/libstdc++-v3/include/ext/vstring.h+++ b/libstdc++-v3/include/ext/vstring.h@@ -2680,7 +2680,7 @@ _GLIBCXX_END_NAMESPACE_VERSION } // namespace -#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99))+#if ((__cplusplus >= 201103L) && (defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)))  #include <ext/string_conversions.h> Index: b/libstdc++-v3/include/tr1/cstdio===================================================================--- a/libstdc++-v3/include/tr1/cstdio+++ b/libstdc++-v3/include/tr1/cstdio@@ -33,7 +33,7 @@  #include <cstdio> -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  namespace std _GLIBCXX_VISIBILITY(default) {Index: b/libstdc++-v3/include/tr1/cstdlib===================================================================--- a/libstdc++-v3/include/tr1/cstdlib+++ b/libstdc++-v3/include/tr1/cstdlib@@ -35,7 +35,7 @@  #if _GLIBCXX_HOSTED -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  namespace std _GLIBCXX_VISIBILITY(default) {Index: b/libstdc++-v3/include/tr1/cwchar===================================================================--- a/libstdc++-v3/include/tr1/cwchar+++ b/libstdc++-v3/include/tr1/cwchar@@ -52,7 +52,7 @@   using std::vwscanf; #endif -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)   using std::wcstold;   using std::wcstoll;   using std::wcstoull;Index: b/libstdc++-v3/include/tr1/stdlib.h===================================================================--- a/libstdc++-v3/include/tr1/stdlib.h+++ b/libstdc++-v3/include/tr1/stdlib.h@@ -33,7 +33,7 @@  #if _GLIBCXX_HOSTED -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  using std::tr1::atoll; using std::tr1::strtoll;Index: b/libstdc++-v3/src/c++11/debug.cc===================================================================--- a/libstdc++-v3/src/c++11/debug.cc+++ b/libstdc++-v3/src/c++11/debug.cc@@ -788,7 +788,7 @@ 				     int __n __attribute__ ((__unused__)),  				     const char* __fmt, _Tp __s) const throw ()     {-#ifdef _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)       std::snprintf(__buf, __n, __fmt, __s); #else       std::sprintf(__buf, __fmt, __s);Index: b/libstdc++-v3/include/c_global/cstdio===================================================================--- a/libstdc++-v3/include/c_global/cstdio+++ b/libstdc++-v3/include/c_global/cstdio@@ -146,7 +146,7 @@   using ::vsprintf; } // namespace -#if _GLIBCXX_USE_C99+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)  #undef snprintf #undef vfscanf
 |