123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- Allow C99-depending features of libstdc++ with uClibc
- The libstdc++ code is fairly restrictive on how it checks for C99
- compatibility: it requires *complete* C99 support to enable certain
- features. 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 fact
- work because uClibc provides the necessary functions.
- This patch is similar and highly inspired from
- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58393, but implemented in
- a way that doesn't involve changing the configure.ac script, as
- autoreconfiguring gcc is complicated. It simply relies on the fact
- that 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 llabs
- Index: 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 vfscanf
- Index: 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 llabs
- Index: 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 wcstoll
- Index: 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
|