From 0e956fc164b97347279045e60033e6f2f176df3b Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Wed, 3 Sep 2003 07:18:18 +0000 Subject: Add support for enabling use of libintl. Add support for libstd++ in full locale mode, and remove the need for config hacks when using uClibc stub locale support. TODO -- gdb intl support is still broken. uClibc should auto-download the pregenerated locale data --- sources/gcc-810-libstd++-locale.patch | 200 ++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 sources/gcc-810-libstd++-locale.patch (limited to 'sources') diff --git a/sources/gcc-810-libstd++-locale.patch b/sources/gcc-810-libstd++-locale.patch new file mode 100644 index 000000000..ab476a693 --- /dev/null +++ b/sources/gcc-810-libstd++-locale.patch @@ -0,0 +1,200 @@ +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.cc +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.cc 2003-02-28 00:09:52.000000000 -0600 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.cc 2003-08-31 10:55:17.000000000 -0500 +@@ -195,12 +195,15 @@ + "LC_TIME", + "LC_COLLATE", + "LC_MONETARY", +- "LC_MESSAGES", ++ "LC_MESSAGES" ++#if _GLIBCPP_NUM_CATEGORIES != 0 ++ , + "LC_PAPER", + "LC_NAME", + "LC_ADDRESS", + "LC_TELEPHONE", + "LC_MEASUREMENT", + "LC_IDENTIFICATION" ++#endif + }; + } // namespace std +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.h gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.h +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c_locale.h 2003-01-23 12:56:16.000000000 -0600 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/c_locale.h 2003-08-31 10:55:17.000000000 -0500 +@@ -46,6 +46,10 @@ + #define _GLIBCPP_C_LOCALE_GNU 1 + + #define _GLIBCPP_NUM_CATEGORIES 6 ++#ifdef __UCLIBC__ ++#undef _GLIBCPP_NUM_CATEGORIES ++#define _GLIBCPP_NUM_CATEGORIES 0 ++#endif + + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + namespace __gnu_cxx +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c++locale_internal.h gcc-3.3.1/libstdc++-v3/config/locale/gnu/c++locale_internal.h +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/c++locale_internal.h 2002-09-05 02:46:16.000000000 -0500 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/c++locale_internal.h 2003-08-31 10:55:17.000000000 -0500 +@@ -48,7 +48,9 @@ + extern "C" __typeof(towlower_l) __towlower_l; + extern "C" __typeof(towupper_l) __towupper_l; + extern "C" __typeof(wcscoll_l) __wcscoll_l; ++#ifdef HAVE_WCSFTIME + extern "C" __typeof(wcsftime_l) __wcsftime_l; ++#endif + extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l; + extern "C" __typeof(wctype_l) __wctype_l; + extern "C" __typeof(newlocale) __newlocale; +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.cc +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.cc 2003-02-28 00:09:52.000000000 -0600 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.cc 2003-08-31 10:55:17.000000000 -0500 +@@ -36,6 +36,13 @@ + #include + #include + ++#ifdef __UCLIBC__ ++extern "C" char *__dcgettext(const char *domainname, ++ const char *msgid, int category); ++#undef gettext ++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES) ++#endif ++ + namespace std + { + // Specializations. +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.h gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.h +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/messages_members.h 2003-01-06 16:20:03.000000000 -0600 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/messages_members.h 2003-08-31 10:55:17.000000000 -0500 +@@ -33,6 +33,12 @@ + + // Written by Benjamin Kosnik + ++#ifdef __UCLIBC__ ++extern "C" char *__textdomain(const char *domainname); ++extern "C" char *__bindtextdomain(const char *domainname, ++ const char *dirname); ++#endif ++ + // Non-virtual member functions. + template + messages<_CharT>::messages(size_t __refs) +@@ -61,7 +67,11 @@ + messages<_CharT>::open(const basic_string& __s, const locale& __loc, + const char* __dir) const + { ++#ifdef __UCLIBC__ ++ __bindtextdomain(__s.c_str(), __dir); ++#else + bindtextdomain(__s.c_str(), __dir); ++#endif + return this->do_open(__s, __loc); + } + +@@ -83,7 +93,11 @@ + { + // No error checking is done, assume the catalog exists and can + // be used. ++#ifdef __UCLIBC__ ++ __textdomain(__s.c_str()); ++#else + textdomain(__s.c_str()); ++#endif + return 0; + } + +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/numeric_members.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/numeric_members.cc +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/numeric_members.cc 2003-02-28 00:09:52.000000000 -0600 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/numeric_members.cc 2003-08-31 10:55:18.000000000 -0500 +@@ -86,8 +86,13 @@ + else + { + // Named locale. ++#ifdef __UCLIBC__ ++ _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __cloc->decimal_point_wc }).__w); ++ _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __cloc->thousands_sep_wc }).__w); ++#else + _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); + _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); ++#endif + if (_M_thousands_sep == L'\0') + _M_grouping = ""; + else +diff -urN gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/time_members.cc gcc-3.3.1/libstdc++-v3/config/locale/gnu/time_members.cc +--- gcc-3.3.1-old/libstdc++-v3/config/locale/gnu/time_members.cc 2003-02-28 00:09:52.000000000 -0600 ++++ gcc-3.3.1/libstdc++-v3/config/locale/gnu/time_members.cc 2003-08-31 10:55:18.000000000 -0500 +@@ -183,6 +183,7 @@ + } + } + ++#ifndef __UCLIBC__ + #ifdef _GLIBCPP_USE_WCHAR_T + template<> + void +@@ -328,4 +329,5 @@ + } + } + #endif ++#endif + } +diff -urN gcc-3.3.1-old/libstdc++-v3/config/os/gnu-linux/ctype_base.h gcc-3.3.1/libstdc++-v3/config/os/gnu-linux/ctype_base.h +--- gcc-3.3.1-old/libstdc++-v3/config/os/gnu-linux/ctype_base.h 2002-09-09 15:26:41.000000000 -0500 ++++ gcc-3.3.1/libstdc++-v3/config/os/gnu-linux/ctype_base.h 2003-08-31 10:55:18.000000000 -0500 +@@ -36,11 +36,18 @@ + struct ctype_base + { + // Non-standard typedefs. ++#ifdef __UCLIBC__ ++ typedef const __ctype_touplow_t* __to_type; ++ // NB: Offsets into ctype::_M_table force a particular size ++ // on the mask type. Because of this, we don't use an enum. ++ typedef __ctype_mask_t mask; ++#else + typedef const int* __to_type; +- + // NB: Offsets into ctype::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. + typedef unsigned short mask; ++#endif ++ + static const mask upper = _ISupper; + static const mask lower = _ISlower; + static const mask alpha = _ISalpha; +diff -urN gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cstdlib.h gcc-3.3.1/libstdc++-v3/include/c_std/std_cstdlib.h +--- gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cstdlib.h 2003-04-18 05:08:05.000000000 -0500 ++++ gcc-3.3.1/libstdc++-v3/include/c_std/std_cstdlib.h 2003-08-31 10:55:18.000000000 -0500 +@@ -101,9 +101,11 @@ + using ::labs; + using ::ldiv; + using ::malloc; ++#if _GLIBCPP_USE_WCHAR_T + using ::mblen; + using ::mbstowcs; + using ::mbtowc; ++#endif + using ::qsort; + using ::rand; + using ::realloc; +@@ -112,8 +114,10 @@ + using ::strtol; + using ::strtoul; + using ::system; ++#if _GLIBCPP_USE_WCHAR_T + using ::wcstombs; + using ::wctomb; ++#endif + + inline long + abs(long __i) { return labs(__i); } +diff -urN gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.1/libstdc++-v3/include/c_std/std_cwchar.h +--- gcc-3.3.1-old/libstdc++-v3/include/c_std/std_cwchar.h 2003-04-18 05:08:05.000000000 -0500 ++++ gcc-3.3.1/libstdc++-v3/include/c_std/std_cwchar.h 2003-08-31 10:55:18.000000000 -0500 +@@ -165,7 +165,9 @@ + using ::wcscoll; + using ::wcscpy; + using ::wcscspn; ++#ifdef HAVE_WCSFTIME + using ::wcsftime; ++#endif + using ::wcslen; + using ::wcsncat; + using ::wcsncmp; -- cgit v1.2.3