summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch
diff options
context:
space:
mode:
authorAdrian Dudau <adrian.dudau@enea.com>2013-12-12 13:38:32 +0100
committerAdrian Dudau <adrian.dudau@enea.com>2013-12-12 13:50:20 +0100
commite2e6f6fe07049f33cb6348780fa975162752e421 (patch)
treeb1813295411235d1297a0ed642b1346b24fdfb12 /meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch
downloadpoky-e2e6f6fe07049f33cb6348780fa975162752e421.tar.gz
initial commit of Enea Linux 3.1
Migrated from the internal git server on the dora-enea branch Signed-off-by: Adrian Dudau <adrian.dudau@enea.com>
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch2810
1 files changed, 2810 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch b/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch
new file mode 100644
index 0000000000..df22c54406
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.7/200-uclibc-locale.patch
@@ -0,0 +1,2810 @@
1Upstream-Status: Pending
2
3Index: gcc-4_7-branch/libstdc++-v3/acinclude.m4
4===================================================================
5--- gcc-4_7-branch.orig/libstdc++-v3/acinclude.m4 2012-04-10 10:19:50.395337128 -0700
6+++ gcc-4_7-branch/libstdc++-v3/acinclude.m4 2012-04-10 10:30:37.327368356 -0700
7@@ -1924,6 +1924,9 @@
8 # Default to "generic".
9 if test $enable_clocale_flag = auto; then
10 case ${target_os} in
11+ *-uclibc*)
12+ enable_clocale_flag=uclibc
13+ ;;
14 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
15 enable_clocale_flag=gnu
16 ;;
17@@ -2085,6 +2088,40 @@
18 CTIME_CC=config/locale/generic/time_members.cc
19 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
20 ;;
21+ uclibc)
22+ AC_MSG_RESULT(uclibc)
23+
24+ # Declare intention to use gettext, and add support for specific
25+ # languages.
26+ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
27+ ALL_LINGUAS="de fr"
28+
29+ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
30+ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
31+ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
32+ USE_NLS=yes
33+ fi
34+ # Export the build objects.
35+ for ling in $ALL_LINGUAS; do \
36+ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
37+ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
38+ done
39+ AC_SUBST(glibcxx_MOFILES)
40+ AC_SUBST(glibcxx_POFILES)
41+
42+ CLOCALE_H=config/locale/uclibc/c_locale.h
43+ CLOCALE_CC=config/locale/uclibc/c_locale.cc
44+ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
45+ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
46+ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
47+ CMESSAGES_H=config/locale/uclibc/messages_members.h
48+ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
49+ CMONEY_CC=config/locale/uclibc/monetary_members.cc
50+ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
51+ CTIME_H=config/locale/uclibc/time_members.h
52+ CTIME_CC=config/locale/uclibc/time_members.cc
53+ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
54+ ;;
55 esac
56
57 # This is where the testsuite looks for locale catalogs, using the
58Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
59===================================================================
60--- /dev/null 1970-01-01 00:00:00.000000000 +0000
61+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2012-04-10 10:30:37.327368356 -0700
62@@ -0,0 +1,63 @@
63+// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
64+
65+// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
66+//
67+// This file is part of the GNU ISO C++ Library. This library is free
68+// software; you can redistribute it and/or modify it under the
69+// terms of the GNU General Public License as published by the
70+// Free Software Foundation; either version 2, or (at your option)
71+// any later version.
72+
73+// This library is distributed in the hope that it will be useful,
74+// but WITHOUT ANY WARRANTY; without even the implied warranty of
75+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
76+// GNU General Public License for more details.
77+
78+// You should have received a copy of the GNU General Public License along
79+// with this library; see the file COPYING. If not, write to the Free
80+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
81+// USA.
82+
83+// As a special exception, you may use this file as part of a free software
84+// library without restriction. Specifically, if other files instantiate
85+// templates or use macros or inline functions from this file, or you compile
86+// this file and link it with other files to produce an executable, this
87+// file does not by itself cause the resulting executable to be covered by
88+// the GNU General Public License. This exception does not however
89+// invalidate any other reasons why the executable file might be covered by
90+// the GNU General Public License.
91+
92+// Written by Jakub Jelinek <jakub@redhat.com>
93+
94+#include <bits/c++config.h>
95+#include <clocale>
96+
97+#ifdef __UCLIBC_MJN3_ONLY__
98+#warning clean this up
99+#endif
100+
101+#ifdef __UCLIBC_HAS_XLOCALE__
102+
103+extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
104+extern "C" __typeof(strcoll_l) __strcoll_l;
105+extern "C" __typeof(strftime_l) __strftime_l;
106+extern "C" __typeof(strtod_l) __strtod_l;
107+extern "C" __typeof(strtof_l) __strtof_l;
108+extern "C" __typeof(strtold_l) __strtold_l;
109+extern "C" __typeof(strxfrm_l) __strxfrm_l;
110+extern "C" __typeof(newlocale) __newlocale;
111+extern "C" __typeof(freelocale) __freelocale;
112+extern "C" __typeof(duplocale) __duplocale;
113+extern "C" __typeof(uselocale) __uselocale;
114+
115+#ifdef _GLIBCXX_USE_WCHAR_T
116+extern "C" __typeof(iswctype_l) __iswctype_l;
117+extern "C" __typeof(towlower_l) __towlower_l;
118+extern "C" __typeof(towupper_l) __towupper_l;
119+extern "C" __typeof(wcscoll_l) __wcscoll_l;
120+extern "C" __typeof(wcsftime_l) __wcsftime_l;
121+extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
122+extern "C" __typeof(wctype_l) __wctype_l;
123+#endif
124+
125+#endif // GLIBC 2.3 and later
126Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.cc
127===================================================================
128--- /dev/null 1970-01-01 00:00:00.000000000 +0000
129+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.cc 2012-04-10 10:30:37.327368356 -0700
130@@ -0,0 +1,160 @@
131+// Wrapper for underlying C-language localization -*- C++ -*-
132+
133+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
134+//
135+// This file is part of the GNU ISO C++ Library. This library is free
136+// software; you can redistribute it and/or modify it under the
137+// terms of the GNU General Public License as published by the
138+// Free Software Foundation; either version 2, or (at your option)
139+// any later version.
140+
141+// This library is distributed in the hope that it will be useful,
142+// but WITHOUT ANY WARRANTY; without even the implied warranty of
143+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
144+// GNU General Public License for more details.
145+
146+// You should have received a copy of the GNU General Public License along
147+// with this library; see the file COPYING. If not, write to the Free
148+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
149+// USA.
150+
151+// As a special exception, you may use this file as part of a free software
152+// library without restriction. Specifically, if other files instantiate
153+// templates or use macros or inline functions from this file, or you compile
154+// this file and link it with other files to produce an executable, this
155+// file does not by itself cause the resulting executable to be covered by
156+// the GNU General Public License. This exception does not however
157+// invalidate any other reasons why the executable file might be covered by
158+// the GNU General Public License.
159+
160+//
161+// ISO C++ 14882: 22.8 Standard locale categories.
162+//
163+
164+// Written by Benjamin Kosnik <bkoz@redhat.com>
165+
166+#include <cerrno> // For errno
167+#include <locale>
168+#include <stdexcept>
169+#include <langinfo.h>
170+#include <bits/c++locale_internal.h>
171+
172+#ifndef __UCLIBC_HAS_XLOCALE__
173+#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
174+#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
175+#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
176+#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
177+#define __strtof_l(S, E, L) strtof((S), (E))
178+#define __strtod_l(S, E, L) strtod((S), (E))
179+#define __strtold_l(S, E, L) strtold((S), (E))
180+#warning should dummy __newlocale check for C|POSIX ?
181+#define __newlocale(a, b, c) NULL
182+#define __freelocale(a) ((void)0)
183+#define __duplocale(a) __c_locale()
184+#endif
185+
186+namespace std
187+{
188+ template<>
189+ void
190+ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
191+ const __c_locale& __cloc)
192+ {
193+ if (!(__err & ios_base::failbit))
194+ {
195+ char* __sanity;
196+ errno = 0;
197+ float __f = __strtof_l(__s, &__sanity, __cloc);
198+ if (__sanity != __s && errno != ERANGE)
199+ __v = __f;
200+ else
201+ __err |= ios_base::failbit;
202+ }
203+ }
204+
205+ template<>
206+ void
207+ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
208+ const __c_locale& __cloc)
209+ {
210+ if (!(__err & ios_base::failbit))
211+ {
212+ char* __sanity;
213+ errno = 0;
214+ double __d = __strtod_l(__s, &__sanity, __cloc);
215+ if (__sanity != __s && errno != ERANGE)
216+ __v = __d;
217+ else
218+ __err |= ios_base::failbit;
219+ }
220+ }
221+
222+ template<>
223+ void
224+ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
225+ const __c_locale& __cloc)
226+ {
227+ if (!(__err & ios_base::failbit))
228+ {
229+ char* __sanity;
230+ errno = 0;
231+ long double __ld = __strtold_l(__s, &__sanity, __cloc);
232+ if (__sanity != __s && errno != ERANGE)
233+ __v = __ld;
234+ else
235+ __err |= ios_base::failbit;
236+ }
237+ }
238+
239+ void
240+ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
241+ __c_locale __old)
242+ {
243+ __cloc = __newlocale(1 << LC_ALL, __s, __old);
244+#ifdef __UCLIBC_HAS_XLOCALE__
245+ if (!__cloc)
246+ {
247+ // This named locale is not supported by the underlying OS.
248+ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
249+ "name not valid"));
250+ }
251+#endif
252+ }
253+
254+ void
255+ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
256+ {
257+ if (_S_get_c_locale() != __cloc)
258+ __freelocale(__cloc);
259+ }
260+
261+ __c_locale
262+ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
263+ { return __duplocale(__cloc); }
264+} // namespace std
265+
266+namespace __gnu_cxx
267+{
268+ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
269+ {
270+ "LC_CTYPE",
271+ "LC_NUMERIC",
272+ "LC_TIME",
273+ "LC_COLLATE",
274+ "LC_MONETARY",
275+ "LC_MESSAGES",
276+#if _GLIBCXX_NUM_CATEGORIES != 0
277+ "LC_PAPER",
278+ "LC_NAME",
279+ "LC_ADDRESS",
280+ "LC_TELEPHONE",
281+ "LC_MEASUREMENT",
282+ "LC_IDENTIFICATION"
283+#endif
284+ };
285+}
286+
287+namespace std
288+{
289+ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
290+} // namespace std
291Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.h
292===================================================================
293--- /dev/null 1970-01-01 00:00:00.000000000 +0000
294+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/c_locale.h 2012-04-10 10:30:37.327368356 -0700
295@@ -0,0 +1,117 @@
296+// Wrapper for underlying C-language localization -*- C++ -*-
297+
298+// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
299+//
300+// This file is part of the GNU ISO C++ Library. This library is free
301+// software; you can redistribute it and/or modify it under the
302+// terms of the GNU General Public License as published by the
303+// Free Software Foundation; either version 2, or (at your option)
304+// any later version.
305+
306+// This library is distributed in the hope that it will be useful,
307+// but WITHOUT ANY WARRANTY; without even the implied warranty of
308+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
309+// GNU General Public License for more details.
310+
311+// You should have received a copy of the GNU General Public License along
312+// with this library; see the file COPYING. If not, write to the Free
313+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
314+// USA.
315+
316+// As a special exception, you may use this file as part of a free software
317+// library without restriction. Specifically, if other files instantiate
318+// templates or use macros or inline functions from this file, or you compile
319+// this file and link it with other files to produce an executable, this
320+// file does not by itself cause the resulting executable to be covered by
321+// the GNU General Public License. This exception does not however
322+// invalidate any other reasons why the executable file might be covered by
323+// the GNU General Public License.
324+
325+//
326+// ISO C++ 14882: 22.8 Standard locale categories.
327+//
328+
329+// Written by Benjamin Kosnik <bkoz@redhat.com>
330+
331+#ifndef _C_LOCALE_H
332+#define _C_LOCALE_H 1
333+
334+#pragma GCC system_header
335+
336+#include <cstring> // get std::strlen
337+#include <cstdio> // get std::snprintf or std::sprintf
338+#include <clocale>
339+#include <langinfo.h> // For codecvt
340+#ifdef __UCLIBC_MJN3_ONLY__
341+#warning fix this
342+#endif
343+#ifdef __UCLIBC_HAS_LOCALE__
344+#include <iconv.h> // For codecvt using iconv, iconv_t
345+#endif
346+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
347+#include <libintl.h> // For messages
348+#endif
349+
350+#ifdef __UCLIBC_MJN3_ONLY__
351+#warning what is _GLIBCXX_C_LOCALE_GNU for
352+#endif
353+#define _GLIBCXX_C_LOCALE_GNU 1
354+
355+#ifdef __UCLIBC_MJN3_ONLY__
356+#warning fix categories
357+#endif
358+// #define _GLIBCXX_NUM_CATEGORIES 6
359+#define _GLIBCXX_NUM_CATEGORIES 0
360+
361+#ifdef __UCLIBC_HAS_XLOCALE__
362+namespace __gnu_cxx
363+{
364+ extern "C" __typeof(uselocale) __uselocale;
365+}
366+#endif
367+
368+namespace std
369+{
370+#ifdef __UCLIBC_HAS_XLOCALE__
371+ typedef __locale_t __c_locale;
372+#else
373+ typedef int* __c_locale;
374+#endif
375+
376+ // Convert numeric value of type _Tv to string and return length of
377+ // string. If snprintf is available use it, otherwise fall back to
378+ // the unsafe sprintf which, in general, can be dangerous and should
379+ // be avoided.
380+ template<typename _Tv>
381+ int
382+ __convert_from_v(char* __out,
383+ const int __size __attribute__ ((__unused__)),
384+ const char* __fmt,
385+#ifdef __UCLIBC_HAS_XCLOCALE__
386+ _Tv __v, const __c_locale& __cloc, int __prec)
387+ {
388+ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
389+#else
390+ _Tv __v, const __c_locale&, int __prec)
391+ {
392+# ifdef __UCLIBC_HAS_LOCALE__
393+ char* __old = std::setlocale(LC_ALL, NULL);
394+ char* __sav = new char[std::strlen(__old) + 1];
395+ std::strcpy(__sav, __old);
396+ std::setlocale(LC_ALL, "C");
397+# endif
398+#endif
399+
400+ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
401+
402+#ifdef __UCLIBC_HAS_XCLOCALE__
403+ __gnu_cxx::__uselocale(__old);
404+#elif defined __UCLIBC_HAS_LOCALE__
405+ std::setlocale(LC_ALL, __sav);
406+ delete [] __sav;
407+#endif
408+ return __ret;
409+ }
410+}
411+
412+#endif
413Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
414===================================================================
415--- /dev/null 1970-01-01 00:00:00.000000000 +0000
416+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2012-04-10 10:30:37.327368356 -0700
417@@ -0,0 +1,308 @@
418+// std::codecvt implementation details, GNU version -*- C++ -*-
419+
420+// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
421+//
422+// This file is part of the GNU ISO C++ Library. This library is free
423+// software; you can redistribute it and/or modify it under the
424+// terms of the GNU General Public License as published by the
425+// Free Software Foundation; either version 2, or (at your option)
426+// any later version.
427+
428+// This library is distributed in the hope that it will be useful,
429+// but WITHOUT ANY WARRANTY; without even the implied warranty of
430+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
431+// GNU General Public License for more details.
432+
433+// You should have received a copy of the GNU General Public License along
434+// with this library; see the file COPYING. If not, write to the Free
435+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
436+// USA.
437+
438+// As a special exception, you may use this file as part of a free software
439+// library without restriction. Specifically, if other files instantiate
440+// templates or use macros or inline functions from this file, or you compile
441+// this file and link it with other files to produce an executable, this
442+// file does not by itself cause the resulting executable to be covered by
443+// the GNU General Public License. This exception does not however
444+// invalidate any other reasons why the executable file might be covered by
445+// the GNU General Public License.
446+
447+//
448+// ISO C++ 14882: 22.2.1.5 - Template class codecvt
449+//
450+
451+// Written by Benjamin Kosnik <bkoz@redhat.com>
452+
453+#include <locale>
454+#include <cstdlib> // For MB_CUR_MAX
455+#include <climits> // For MB_LEN_MAX
456+#include <bits/c++locale_internal.h>
457+
458+namespace std
459+{
460+ // Specializations.
461+#ifdef _GLIBCXX_USE_WCHAR_T
462+ codecvt_base::result
463+ codecvt<wchar_t, char, mbstate_t>::
464+ do_out(state_type& __state, const intern_type* __from,
465+ const intern_type* __from_end, const intern_type*& __from_next,
466+ extern_type* __to, extern_type* __to_end,
467+ extern_type*& __to_next) const
468+ {
469+ result __ret = ok;
470+ state_type __tmp_state(__state);
471+
472+#ifdef __UCLIBC_HAS_XLOCALE__
473+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
474+#endif
475+
476+ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
477+ // in case we fall back to wcrtomb and then continue, in a loop.
478+ // NB: wcsnrtombs is a GNU extension
479+ for (__from_next = __from, __to_next = __to;
480+ __from_next < __from_end && __to_next < __to_end
481+ && __ret == ok;)
482+ {
483+ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
484+ __from_end - __from_next);
485+ if (!__from_chunk_end)
486+ __from_chunk_end = __from_end;
487+
488+ __from = __from_next;
489+ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
490+ __from_chunk_end - __from_next,
491+ __to_end - __to_next, &__state);
492+ if (__conv == static_cast<size_t>(-1))
493+ {
494+ // In case of error, in order to stop at the exact place we
495+ // have to start again from the beginning with a series of
496+ // wcrtomb.
497+ for (; __from < __from_next; ++__from)
498+ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
499+ __state = __tmp_state;
500+ __ret = error;
501+ }
502+ else if (__from_next && __from_next < __from_chunk_end)
503+ {
504+ __to_next += __conv;
505+ __ret = partial;
506+ }
507+ else
508+ {
509+ __from_next = __from_chunk_end;
510+ __to_next += __conv;
511+ }
512+
513+ if (__from_next < __from_end && __ret == ok)
514+ {
515+ extern_type __buf[MB_LEN_MAX];
516+ __tmp_state = __state;
517+ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
518+ if (__conv > static_cast<size_t>(__to_end - __to_next))
519+ __ret = partial;
520+ else
521+ {
522+ memcpy(__to_next, __buf, __conv);
523+ __state = __tmp_state;
524+ __to_next += __conv;
525+ ++__from_next;
526+ }
527+ }
528+ }
529+
530+#ifdef __UCLIBC_HAS_XLOCALE__
531+ __uselocale(__old);
532+#endif
533+
534+ return __ret;
535+ }
536+
537+ codecvt_base::result
538+ codecvt<wchar_t, char, mbstate_t>::
539+ do_in(state_type& __state, const extern_type* __from,
540+ const extern_type* __from_end, const extern_type*& __from_next,
541+ intern_type* __to, intern_type* __to_end,
542+ intern_type*& __to_next) const
543+ {
544+ result __ret = ok;
545+ state_type __tmp_state(__state);
546+
547+#ifdef __UCLIBC_HAS_XLOCALE__
548+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
549+#endif
550+
551+ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
552+ // in case we store a L'\0' and then continue, in a loop.
553+ // NB: mbsnrtowcs is a GNU extension
554+ for (__from_next = __from, __to_next = __to;
555+ __from_next < __from_end && __to_next < __to_end
556+ && __ret == ok;)
557+ {
558+ const extern_type* __from_chunk_end;
559+ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
560+ __from_end
561+ - __from_next));
562+ if (!__from_chunk_end)
563+ __from_chunk_end = __from_end;
564+
565+ __from = __from_next;
566+ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
567+ __from_chunk_end - __from_next,
568+ __to_end - __to_next, &__state);
569+ if (__conv == static_cast<size_t>(-1))
570+ {
571+ // In case of error, in order to stop at the exact place we
572+ // have to start again from the beginning with a series of
573+ // mbrtowc.
574+ for (;; ++__to_next, __from += __conv)
575+ {
576+ __conv = mbrtowc(__to_next, __from, __from_end - __from,
577+ &__tmp_state);
578+ if (__conv == static_cast<size_t>(-1)
579+ || __conv == static_cast<size_t>(-2))
580+ break;
581+ }
582+ __from_next = __from;
583+ __state = __tmp_state;
584+ __ret = error;
585+ }
586+ else if (__from_next && __from_next < __from_chunk_end)
587+ {
588+ // It is unclear what to return in this case (see DR 382).
589+ __to_next += __conv;
590+ __ret = partial;
591+ }
592+ else
593+ {
594+ __from_next = __from_chunk_end;
595+ __to_next += __conv;
596+ }
597+
598+ if (__from_next < __from_end && __ret == ok)
599+ {
600+ if (__to_next < __to_end)
601+ {
602+ // XXX Probably wrong for stateful encodings
603+ __tmp_state = __state;
604+ ++__from_next;
605+ *__to_next++ = L'\0';
606+ }
607+ else
608+ __ret = partial;
609+ }
610+ }
611+
612+#ifdef __UCLIBC_HAS_XLOCALE__
613+ __uselocale(__old);
614+#endif
615+
616+ return __ret;
617+ }
618+
619+ int
620+ codecvt<wchar_t, char, mbstate_t>::
621+ do_encoding() const throw()
622+ {
623+ // XXX This implementation assumes that the encoding is
624+ // stateless and is either single-byte or variable-width.
625+ int __ret = 0;
626+#ifdef __UCLIBC_HAS_XLOCALE__
627+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
628+#endif
629+ if (MB_CUR_MAX == 1)
630+ __ret = 1;
631+#ifdef __UCLIBC_HAS_XLOCALE__
632+ __uselocale(__old);
633+#endif
634+ return __ret;
635+ }
636+
637+ int
638+ codecvt<wchar_t, char, mbstate_t>::
639+ do_max_length() const throw()
640+ {
641+#ifdef __UCLIBC_HAS_XLOCALE__
642+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
643+#endif
644+ // XXX Probably wrong for stateful encodings.
645+ int __ret = MB_CUR_MAX;
646+#ifdef __UCLIBC_HAS_XLOCALE__
647+ __uselocale(__old);
648+#endif
649+ return __ret;
650+ }
651+
652+ int
653+ codecvt<wchar_t, char, mbstate_t>::
654+ do_length(state_type& __state, const extern_type* __from,
655+ const extern_type* __end, size_t __max) const
656+ {
657+ int __ret = 0;
658+ state_type __tmp_state(__state);
659+
660+#ifdef __UCLIBC_HAS_XLOCALE__
661+ __c_locale __old = __uselocale(_M_c_locale_codecvt);
662+#endif
663+
664+ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
665+ // in case we advance past it and then continue, in a loop.
666+ // NB: mbsnrtowcs is a GNU extension
667+
668+ // A dummy internal buffer is needed in order for mbsnrtocws to consider
669+ // its fourth parameter (it wouldn't with NULL as first parameter).
670+ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
671+ * __max));
672+ while (__from < __end && __max)
673+ {
674+ const extern_type* __from_chunk_end;
675+ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
676+ __end
677+ - __from));
678+ if (!__from_chunk_end)
679+ __from_chunk_end = __end;
680+
681+ const extern_type* __tmp_from = __from;
682+ size_t __conv = mbsnrtowcs(__to, &__from,
683+ __from_chunk_end - __from,
684+ __max, &__state);
685+ if (__conv == static_cast<size_t>(-1))
686+ {
687+ // In case of error, in order to stop at the exact place we
688+ // have to start again from the beginning with a series of
689+ // mbrtowc.
690+ for (__from = __tmp_from;; __from += __conv)
691+ {
692+ __conv = mbrtowc(NULL, __from, __end - __from,
693+ &__tmp_state);
694+ if (__conv == static_cast<size_t>(-1)
695+ || __conv == static_cast<size_t>(-2))
696+ break;
697+ }
698+ __state = __tmp_state;
699+ __ret += __from - __tmp_from;
700+ break;
701+ }
702+ if (!__from)
703+ __from = __from_chunk_end;
704+
705+ __ret += __from - __tmp_from;
706+ __max -= __conv;
707+
708+ if (__from < __end && __max)
709+ {
710+ // XXX Probably wrong for stateful encodings
711+ __tmp_state = __state;
712+ ++__from;
713+ ++__ret;
714+ --__max;
715+ }
716+ }
717+
718+#ifdef __UCLIBC_HAS_XLOCALE__
719+ __uselocale(__old);
720+#endif
721+
722+ return __ret;
723+ }
724+#endif
725+}
726Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/collate_members.cc
727===================================================================
728--- /dev/null 1970-01-01 00:00:00.000000000 +0000
729+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/collate_members.cc 2012-04-10 10:30:37.327368356 -0700
730@@ -0,0 +1,80 @@
731+// std::collate implementation details, GNU version -*- C++ -*-
732+
733+// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
734+//
735+// This file is part of the GNU ISO C++ Library. This library is free
736+// software; you can redistribute it and/or modify it under the
737+// terms of the GNU General Public License as published by the
738+// Free Software Foundation; either version 2, or (at your option)
739+// any later version.
740+
741+// This library is distributed in the hope that it will be useful,
742+// but WITHOUT ANY WARRANTY; without even the implied warranty of
743+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
744+// GNU General Public License for more details.
745+
746+// You should have received a copy of the GNU General Public License along
747+// with this library; see the file COPYING. If not, write to the Free
748+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
749+// USA.
750+
751+// As a special exception, you may use this file as part of a free software
752+// library without restriction. Specifically, if other files instantiate
753+// templates or use macros or inline functions from this file, or you compile
754+// this file and link it with other files to produce an executable, this
755+// file does not by itself cause the resulting executable to be covered by
756+// the GNU General Public License. This exception does not however
757+// invalidate any other reasons why the executable file might be covered by
758+// the GNU General Public License.
759+
760+//
761+// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
762+//
763+
764+// Written by Benjamin Kosnik <bkoz@redhat.com>
765+
766+#include <locale>
767+#include <bits/c++locale_internal.h>
768+
769+#ifndef __UCLIBC_HAS_XLOCALE__
770+#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
771+#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
772+#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
773+#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
774+#endif
775+
776+namespace std
777+{
778+ // These are basically extensions to char_traits, and perhaps should
779+ // be put there instead of here.
780+ template<>
781+ int
782+ collate<char>::_M_compare(const char* __one, const char* __two) const
783+ {
784+ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
785+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
786+ }
787+
788+ template<>
789+ size_t
790+ collate<char>::_M_transform(char* __to, const char* __from,
791+ size_t __n) const
792+ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
793+
794+#ifdef _GLIBCXX_USE_WCHAR_T
795+ template<>
796+ int
797+ collate<wchar_t>::_M_compare(const wchar_t* __one,
798+ const wchar_t* __two) const
799+ {
800+ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
801+ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
802+ }
803+
804+ template<>
805+ size_t
806+ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
807+ size_t __n) const
808+ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
809+#endif
810+}
811Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/ctype_members.cc
812===================================================================
813--- /dev/null 1970-01-01 00:00:00.000000000 +0000
814+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2012-04-10 10:30:37.331368420 -0700
815@@ -0,0 +1,300 @@
816+// std::ctype implementation details, GNU version -*- C++ -*-
817+
818+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
819+//
820+// This file is part of the GNU ISO C++ Library. This library is free
821+// software; you can redistribute it and/or modify it under the
822+// terms of the GNU General Public License as published by the
823+// Free Software Foundation; either version 2, or (at your option)
824+// any later version.
825+
826+// This library is distributed in the hope that it will be useful,
827+// but WITHOUT ANY WARRANTY; without even the implied warranty of
828+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
829+// GNU General Public License for more details.
830+
831+// You should have received a copy of the GNU General Public License along
832+// with this library; see the file COPYING. If not, write to the Free
833+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
834+// USA.
835+
836+// As a special exception, you may use this file as part of a free software
837+// library without restriction. Specifically, if other files instantiate
838+// templates or use macros or inline functions from this file, or you compile
839+// this file and link it with other files to produce an executable, this
840+// file does not by itself cause the resulting executable to be covered by
841+// the GNU General Public License. This exception does not however
842+// invalidate any other reasons why the executable file might be covered by
843+// the GNU General Public License.
844+
845+//
846+// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
847+//
848+
849+// Written by Benjamin Kosnik <bkoz@redhat.com>
850+
851+#define _LIBC
852+#include <locale>
853+#undef _LIBC
854+#include <bits/c++locale_internal.h>
855+
856+#ifndef __UCLIBC_HAS_XLOCALE__
857+#define __wctype_l(S, L) wctype((S))
858+#define __towupper_l(C, L) towupper((C))
859+#define __towlower_l(C, L) towlower((C))
860+#define __iswctype_l(C, M, L) iswctype((C), (M))
861+#endif
862+
863+namespace std
864+{
865+ // NB: The other ctype<char> specializations are in src/locale.cc and
866+ // various /config/os/* files.
867+ template<>
868+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
869+ : ctype<char>(0, false, __refs)
870+ {
871+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
872+ {
873+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
874+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
875+#ifdef __UCLIBC_HAS_XLOCALE__
876+ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
877+ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
878+ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
879+#endif
880+ }
881+ }
882+
883+#ifdef _GLIBCXX_USE_WCHAR_T
884+ ctype<wchar_t>::__wmask_type
885+ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
886+ {
887+ __wmask_type __ret;
888+ switch (__m)
889+ {
890+ case space:
891+ __ret = __wctype_l("space", _M_c_locale_ctype);
892+ break;
893+ case print:
894+ __ret = __wctype_l("print", _M_c_locale_ctype);
895+ break;
896+ case cntrl:
897+ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
898+ break;
899+ case upper:
900+ __ret = __wctype_l("upper", _M_c_locale_ctype);
901+ break;
902+ case lower:
903+ __ret = __wctype_l("lower", _M_c_locale_ctype);
904+ break;
905+ case alpha:
906+ __ret = __wctype_l("alpha", _M_c_locale_ctype);
907+ break;
908+ case digit:
909+ __ret = __wctype_l("digit", _M_c_locale_ctype);
910+ break;
911+ case punct:
912+ __ret = __wctype_l("punct", _M_c_locale_ctype);
913+ break;
914+ case xdigit:
915+ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
916+ break;
917+ case alnum:
918+ __ret = __wctype_l("alnum", _M_c_locale_ctype);
919+ break;
920+ case graph:
921+ __ret = __wctype_l("graph", _M_c_locale_ctype);
922+ break;
923+ default:
924+ __ret = __wmask_type();
925+ }
926+ return __ret;
927+ }
928+
929+ wchar_t
930+ ctype<wchar_t>::do_toupper(wchar_t __c) const
931+ { return __towupper_l(__c, _M_c_locale_ctype); }
932+
933+ const wchar_t*
934+ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
935+ {
936+ while (__lo < __hi)
937+ {
938+ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
939+ ++__lo;
940+ }
941+ return __hi;
942+ }
943+
944+ wchar_t
945+ ctype<wchar_t>::do_tolower(wchar_t __c) const
946+ { return __towlower_l(__c, _M_c_locale_ctype); }
947+
948+ const wchar_t*
949+ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
950+ {
951+ while (__lo < __hi)
952+ {
953+ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
954+ ++__lo;
955+ }
956+ return __hi;
957+ }
958+
959+ bool
960+ ctype<wchar_t>::
961+ do_is(mask __m, wchar_t __c) const
962+ {
963+ // Highest bitmask in ctype_base == 10, but extra in "C"
964+ // library for blank.
965+ bool __ret = false;
966+ const size_t __bitmasksize = 11;
967+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
968+ if (__m & _M_bit[__bitcur]
969+ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
970+ {
971+ __ret = true;
972+ break;
973+ }
974+ return __ret;
975+ }
976+
977+ const wchar_t*
978+ ctype<wchar_t>::
979+ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
980+ {
981+ for (; __lo < __hi; ++__vec, ++__lo)
982+ {
983+ // Highest bitmask in ctype_base == 10, but extra in "C"
984+ // library for blank.
985+ const size_t __bitmasksize = 11;
986+ mask __m = 0;
987+ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
988+ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
989+ __m |= _M_bit[__bitcur];
990+ *__vec = __m;
991+ }
992+ return __hi;
993+ }
994+
995+ const wchar_t*
996+ ctype<wchar_t>::
997+ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
998+ {
999+ while (__lo < __hi && !this->do_is(__m, *__lo))
1000+ ++__lo;
1001+ return __lo;
1002+ }
1003+
1004+ const wchar_t*
1005+ ctype<wchar_t>::
1006+ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
1007+ {
1008+ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
1009+ ++__lo;
1010+ return __lo;
1011+ }
1012+
1013+ wchar_t
1014+ ctype<wchar_t>::
1015+ do_widen(char __c) const
1016+ { return _M_widen[static_cast<unsigned char>(__c)]; }
1017+
1018+ const char*
1019+ ctype<wchar_t>::
1020+ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
1021+ {
1022+ while (__lo < __hi)
1023+ {
1024+ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
1025+ ++__lo;
1026+ ++__dest;
1027+ }
1028+ return __hi;
1029+ }
1030+
1031+ char
1032+ ctype<wchar_t>::
1033+ do_narrow(wchar_t __wc, char __dfault) const
1034+ {
1035+ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
1036+ return _M_narrow[__wc];
1037+#ifdef __UCLIBC_HAS_XLOCALE__
1038+ __c_locale __old = __uselocale(_M_c_locale_ctype);
1039+#endif
1040+ const int __c = wctob(__wc);
1041+#ifdef __UCLIBC_HAS_XLOCALE__
1042+ __uselocale(__old);
1043+#endif
1044+ return (__c == EOF ? __dfault : static_cast<char>(__c));
1045+ }
1046+
1047+ const wchar_t*
1048+ ctype<wchar_t>::
1049+ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
1050+ char* __dest) const
1051+ {
1052+#ifdef __UCLIBC_HAS_XLOCALE__
1053+ __c_locale __old = __uselocale(_M_c_locale_ctype);
1054+#endif
1055+ if (_M_narrow_ok)
1056+ while (__lo < __hi)
1057+ {
1058+ if (*__lo >= 0 && *__lo < 128)
1059+ *__dest = _M_narrow[*__lo];
1060+ else
1061+ {
1062+ const int __c = wctob(*__lo);
1063+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
1064+ }
1065+ ++__lo;
1066+ ++__dest;
1067+ }
1068+ else
1069+ while (__lo < __hi)
1070+ {
1071+ const int __c = wctob(*__lo);
1072+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
1073+ ++__lo;
1074+ ++__dest;
1075+ }
1076+#ifdef __UCLIBC_HAS_XLOCALE__
1077+ __uselocale(__old);
1078+#endif
1079+ return __hi;
1080+ }
1081+
1082+ void
1083+ ctype<wchar_t>::_M_initialize_ctype()
1084+ {
1085+#ifdef __UCLIBC_HAS_XLOCALE__
1086+ __c_locale __old = __uselocale(_M_c_locale_ctype);
1087+#endif
1088+ wint_t __i;
1089+ for (__i = 0; __i < 128; ++__i)
1090+ {
1091+ const int __c = wctob(__i);
1092+ if (__c == EOF)
1093+ break;
1094+ else
1095+ _M_narrow[__i] = static_cast<char>(__c);
1096+ }
1097+ if (__i == 128)
1098+ _M_narrow_ok = true;
1099+ else
1100+ _M_narrow_ok = false;
1101+ for (size_t __j = 0;
1102+ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
1103+ _M_widen[__j] = btowc(__j);
1104+
1105+ for (size_t __k = 0; __k <= 11; ++__k)
1106+ {
1107+ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
1108+ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
1109+ }
1110+#ifdef __UCLIBC_HAS_XLOCALE__
1111+ __uselocale(__old);
1112+#endif
1113+ }
1114+#endif // _GLIBCXX_USE_WCHAR_T
1115+}
1116Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.cc
1117===================================================================
1118--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1119+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.cc 2012-04-10 10:30:37.331368420 -0700
1120@@ -0,0 +1,100 @@
1121+// std::messages implementation details, GNU version -*- C++ -*-
1122+
1123+// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
1124+//
1125+// This file is part of the GNU ISO C++ Library. This library is free
1126+// software; you can redistribute it and/or modify it under the
1127+// terms of the GNU General Public License as published by the
1128+// Free Software Foundation; either version 2, or (at your option)
1129+// any later version.
1130+
1131+// This library is distributed in the hope that it will be useful,
1132+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1133+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1134+// GNU General Public License for more details.
1135+
1136+// You should have received a copy of the GNU General Public License along
1137+// with this library; see the file COPYING. If not, write to the Free
1138+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1139+// USA.
1140+
1141+// As a special exception, you may use this file as part of a free software
1142+// library without restriction. Specifically, if other files instantiate
1143+// templates or use macros or inline functions from this file, or you compile
1144+// this file and link it with other files to produce an executable, this
1145+// file does not by itself cause the resulting executable to be covered by
1146+// the GNU General Public License. This exception does not however
1147+// invalidate any other reasons why the executable file might be covered by
1148+// the GNU General Public License.
1149+
1150+//
1151+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
1152+//
1153+
1154+// Written by Benjamin Kosnik <bkoz@redhat.com>
1155+
1156+#include <locale>
1157+#include <bits/c++locale_internal.h>
1158+
1159+#ifdef __UCLIBC_MJN3_ONLY__
1160+#warning fix gettext stuff
1161+#endif
1162+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
1163+extern "C" char *__dcgettext(const char *domainname,
1164+ const char *msgid, int category);
1165+#undef gettext
1166+#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
1167+#else
1168+#undef gettext
1169+#define gettext(msgid) (msgid)
1170+#endif
1171+
1172+namespace std
1173+{
1174+ // Specializations.
1175+ template<>
1176+ string
1177+ messages<char>::do_get(catalog, int, int, const string& __dfault) const
1178+ {
1179+#ifdef __UCLIBC_HAS_XLOCALE__
1180+ __c_locale __old = __uselocale(_M_c_locale_messages);
1181+ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
1182+ __uselocale(__old);
1183+ return string(__msg);
1184+#elif defined __UCLIBC_HAS_LOCALE__
1185+ char* __old = strdup(setlocale(LC_ALL, NULL));
1186+ setlocale(LC_ALL, _M_name_messages);
1187+ const char* __msg = gettext(__dfault.c_str());
1188+ setlocale(LC_ALL, __old);
1189+ free(__old);
1190+ return string(__msg);
1191+#else
1192+ const char* __msg = gettext(__dfault.c_str());
1193+ return string(__msg);
1194+#endif
1195+ }
1196+
1197+#ifdef _GLIBCXX_USE_WCHAR_T
1198+ template<>
1199+ wstring
1200+ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
1201+ {
1202+# ifdef __UCLIBC_HAS_XLOCALE__
1203+ __c_locale __old = __uselocale(_M_c_locale_messages);
1204+ char* __msg = gettext(_M_convert_to_char(__dfault));
1205+ __uselocale(__old);
1206+ return _M_convert_from_char(__msg);
1207+# elif defined __UCLIBC_HAS_LOCALE__
1208+ char* __old = strdup(setlocale(LC_ALL, NULL));
1209+ setlocale(LC_ALL, _M_name_messages);
1210+ char* __msg = gettext(_M_convert_to_char(__dfault));
1211+ setlocale(LC_ALL, __old);
1212+ free(__old);
1213+ return _M_convert_from_char(__msg);
1214+# else
1215+ char* __msg = gettext(_M_convert_to_char(__dfault));
1216+ return _M_convert_from_char(__msg);
1217+# endif
1218+ }
1219+#endif
1220+}
1221Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.h
1222===================================================================
1223--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1224+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/messages_members.h 2012-04-10 10:30:37.331368420 -0700
1225@@ -0,0 +1,118 @@
1226+// std::messages implementation details, GNU version -*- C++ -*-
1227+
1228+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
1229+//
1230+// This file is part of the GNU ISO C++ Library. This library is free
1231+// software; you can redistribute it and/or modify it under the
1232+// terms of the GNU General Public License as published by the
1233+// Free Software Foundation; either version 2, or (at your option)
1234+// any later version.
1235+
1236+// This library is distributed in the hope that it will be useful,
1237+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1238+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1239+// GNU General Public License for more details.
1240+
1241+// You should have received a copy of the GNU General Public License along
1242+// with this library; see the file COPYING. If not, write to the Free
1243+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1244+// USA.
1245+
1246+// As a special exception, you may use this file as part of a free software
1247+// library without restriction. Specifically, if other files instantiate
1248+// templates or use macros or inline functions from this file, or you compile
1249+// this file and link it with other files to produce an executable, this
1250+// file does not by itself cause the resulting executable to be covered by
1251+// the GNU General Public License. This exception does not however
1252+// invalidate any other reasons why the executable file might be covered by
1253+// the GNU General Public License.
1254+
1255+//
1256+// ISO C++ 14882: 22.2.7.1.2 messages functions
1257+//
1258+
1259+// Written by Benjamin Kosnik <bkoz@redhat.com>
1260+
1261+#ifdef __UCLIBC_MJN3_ONLY__
1262+#warning fix prototypes for *textdomain funcs
1263+#endif
1264+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
1265+extern "C" char *__textdomain(const char *domainname);
1266+extern "C" char *__bindtextdomain(const char *domainname,
1267+ const char *dirname);
1268+#else
1269+#undef __textdomain
1270+#undef __bindtextdomain
1271+#define __textdomain(D) ((void)0)
1272+#define __bindtextdomain(D,P) ((void)0)
1273+#endif
1274+
1275+ // Non-virtual member functions.
1276+ template<typename _CharT>
1277+ messages<_CharT>::messages(size_t __refs)
1278+ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
1279+ _M_name_messages(_S_get_c_name())
1280+ { }
1281+
1282+ template<typename _CharT>
1283+ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
1284+ size_t __refs)
1285+ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
1286+ _M_name_messages(__s)
1287+ {
1288+ char* __tmp = new char[std::strlen(__s) + 1];
1289+ std::strcpy(__tmp, __s);
1290+ _M_name_messages = __tmp;
1291+ }
1292+
1293+ template<typename _CharT>
1294+ typename messages<_CharT>::catalog
1295+ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
1296+ const char* __dir) const
1297+ {
1298+ __bindtextdomain(__s.c_str(), __dir);
1299+ return this->do_open(__s, __loc);
1300+ }
1301+
1302+ // Virtual member functions.
1303+ template<typename _CharT>
1304+ messages<_CharT>::~messages()
1305+ {
1306+ if (_M_name_messages != _S_get_c_name())
1307+ delete [] _M_name_messages;
1308+ _S_destroy_c_locale(_M_c_locale_messages);
1309+ }
1310+
1311+ template<typename _CharT>
1312+ typename messages<_CharT>::catalog
1313+ messages<_CharT>::do_open(const basic_string<char>& __s,
1314+ const locale&) const
1315+ {
1316+ // No error checking is done, assume the catalog exists and can
1317+ // be used.
1318+ __textdomain(__s.c_str());
1319+ return 0;
1320+ }
1321+
1322+ template<typename _CharT>
1323+ void
1324+ messages<_CharT>::do_close(catalog) const
1325+ { }
1326+
1327+ // messages_byname
1328+ template<typename _CharT>
1329+ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
1330+ : messages<_CharT>(__refs)
1331+ {
1332+ if (this->_M_name_messages != locale::facet::_S_get_c_name())
1333+ delete [] this->_M_name_messages;
1334+ char* __tmp = new char[std::strlen(__s) + 1];
1335+ std::strcpy(__tmp, __s);
1336+ this->_M_name_messages = __tmp;
1337+
1338+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
1339+ {
1340+ this->_S_destroy_c_locale(this->_M_c_locale_messages);
1341+ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
1342+ }
1343+ }
1344Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/monetary_members.cc
1345===================================================================
1346--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1347+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2012-04-10 10:30:37.331368420 -0700
1348@@ -0,0 +1,692 @@
1349+// std::moneypunct implementation details, GNU version -*- C++ -*-
1350+
1351+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
1352+//
1353+// This file is part of the GNU ISO C++ Library. This library is free
1354+// software; you can redistribute it and/or modify it under the
1355+// terms of the GNU General Public License as published by the
1356+// Free Software Foundation; either version 2, or (at your option)
1357+// any later version.
1358+
1359+// This library is distributed in the hope that it will be useful,
1360+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1361+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1362+// GNU General Public License for more details.
1363+
1364+// You should have received a copy of the GNU General Public License along
1365+// with this library; see the file COPYING. If not, write to the Free
1366+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1367+// USA.
1368+
1369+// As a special exception, you may use this file as part of a free software
1370+// library without restriction. Specifically, if other files instantiate
1371+// templates or use macros or inline functions from this file, or you compile
1372+// this file and link it with other files to produce an executable, this
1373+// file does not by itself cause the resulting executable to be covered by
1374+// the GNU General Public License. This exception does not however
1375+// invalidate any other reasons why the executable file might be covered by
1376+// the GNU General Public License.
1377+
1378+//
1379+// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
1380+//
1381+
1382+// Written by Benjamin Kosnik <bkoz@redhat.com>
1383+
1384+#define _LIBC
1385+#include <locale>
1386+#undef _LIBC
1387+#include <bits/c++locale_internal.h>
1388+
1389+#ifdef __UCLIBC_MJN3_ONLY__
1390+#warning optimize this for uclibc
1391+#warning tailor for stub locale support
1392+#endif
1393+
1394+#ifndef __UCLIBC_HAS_XLOCALE__
1395+#define __nl_langinfo_l(N, L) nl_langinfo((N))
1396+#endif
1397+
1398+namespace std
1399+{
1400+ // Construct and return valid pattern consisting of some combination of:
1401+ // space none symbol sign value
1402+ money_base::pattern
1403+ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
1404+ {
1405+ pattern __ret;
1406+
1407+ // This insanely complicated routine attempts to construct a valid
1408+ // pattern for use with monyepunct. A couple of invariants:
1409+
1410+ // if (__precedes) symbol -> value
1411+ // else value -> symbol
1412+
1413+ // if (__space) space
1414+ // else none
1415+
1416+ // none == never first
1417+ // space never first or last
1418+
1419+ // Any elegant implementations of this are welcome.
1420+ switch (__posn)
1421+ {
1422+ case 0:
1423+ case 1:
1424+ // 1 The sign precedes the value and symbol.
1425+ __ret.field[0] = sign;
1426+ if (__space)
1427+ {
1428+ // Pattern starts with sign.
1429+ if (__precedes)
1430+ {
1431+ __ret.field[1] = symbol;
1432+ __ret.field[3] = value;
1433+ }
1434+ else
1435+ {
1436+ __ret.field[1] = value;
1437+ __ret.field[3] = symbol;
1438+ }
1439+ __ret.field[2] = space;
1440+ }
1441+ else
1442+ {
1443+ // Pattern starts with sign and ends with none.
1444+ if (__precedes)
1445+ {
1446+ __ret.field[1] = symbol;
1447+ __ret.field[2] = value;
1448+ }
1449+ else
1450+ {
1451+ __ret.field[1] = value;
1452+ __ret.field[2] = symbol;
1453+ }
1454+ __ret.field[3] = none;
1455+ }
1456+ break;
1457+ case 2:
1458+ // 2 The sign follows the value and symbol.
1459+ if (__space)
1460+ {
1461+ // Pattern either ends with sign.
1462+ if (__precedes)
1463+ {
1464+ __ret.field[0] = symbol;
1465+ __ret.field[2] = value;
1466+ }
1467+ else
1468+ {
1469+ __ret.field[0] = value;
1470+ __ret.field[2] = symbol;
1471+ }
1472+ __ret.field[1] = space;
1473+ __ret.field[3] = sign;
1474+ }
1475+ else
1476+ {
1477+ // Pattern ends with sign then none.
1478+ if (__precedes)
1479+ {
1480+ __ret.field[0] = symbol;
1481+ __ret.field[1] = value;
1482+ }
1483+ else
1484+ {
1485+ __ret.field[0] = value;
1486+ __ret.field[1] = symbol;
1487+ }
1488+ __ret.field[2] = sign;
1489+ __ret.field[3] = none;
1490+ }
1491+ break;
1492+ case 3:
1493+ // 3 The sign immediately precedes the symbol.
1494+ if (__precedes)
1495+ {
1496+ __ret.field[0] = sign;
1497+ __ret.field[1] = symbol;
1498+ if (__space)
1499+ {
1500+ __ret.field[2] = space;
1501+ __ret.field[3] = value;
1502+ }
1503+ else
1504+ {
1505+ __ret.field[2] = value;
1506+ __ret.field[3] = none;
1507+ }
1508+ }
1509+ else
1510+ {
1511+ __ret.field[0] = value;
1512+ if (__space)
1513+ {
1514+ __ret.field[1] = space;
1515+ __ret.field[2] = sign;
1516+ __ret.field[3] = symbol;
1517+ }
1518+ else
1519+ {
1520+ __ret.field[1] = sign;
1521+ __ret.field[2] = symbol;
1522+ __ret.field[3] = none;
1523+ }
1524+ }
1525+ break;
1526+ case 4:
1527+ // 4 The sign immediately follows the symbol.
1528+ if (__precedes)
1529+ {
1530+ __ret.field[0] = symbol;
1531+ __ret.field[1] = sign;
1532+ if (__space)
1533+ {
1534+ __ret.field[2] = space;
1535+ __ret.field[3] = value;
1536+ }
1537+ else
1538+ {
1539+ __ret.field[2] = value;
1540+ __ret.field[3] = none;
1541+ }
1542+ }
1543+ else
1544+ {
1545+ __ret.field[0] = value;
1546+ if (__space)
1547+ {
1548+ __ret.field[1] = space;
1549+ __ret.field[2] = symbol;
1550+ __ret.field[3] = sign;
1551+ }
1552+ else
1553+ {
1554+ __ret.field[1] = symbol;
1555+ __ret.field[2] = sign;
1556+ __ret.field[3] = none;
1557+ }
1558+ }
1559+ break;
1560+ default:
1561+ ;
1562+ }
1563+ return __ret;
1564+ }
1565+
1566+ template<>
1567+ void
1568+ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
1569+ const char*)
1570+ {
1571+ if (!_M_data)
1572+ _M_data = new __moneypunct_cache<char, true>;
1573+
1574+ if (!__cloc)
1575+ {
1576+ // "C" locale
1577+ _M_data->_M_decimal_point = '.';
1578+ _M_data->_M_thousands_sep = ',';
1579+ _M_data->_M_grouping = "";
1580+ _M_data->_M_grouping_size = 0;
1581+ _M_data->_M_curr_symbol = "";
1582+ _M_data->_M_curr_symbol_size = 0;
1583+ _M_data->_M_positive_sign = "";
1584+ _M_data->_M_positive_sign_size = 0;
1585+ _M_data->_M_negative_sign = "";
1586+ _M_data->_M_negative_sign_size = 0;
1587+ _M_data->_M_frac_digits = 0;
1588+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1589+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1590+
1591+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1592+ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
1593+ }
1594+ else
1595+ {
1596+ // Named locale.
1597+ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
1598+ __cloc));
1599+ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
1600+ __cloc));
1601+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1602+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1603+ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1604+ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
1605+
1606+ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
1607+ if (!__nposn)
1608+ _M_data->_M_negative_sign = "()";
1609+ else
1610+ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
1611+ __cloc);
1612+ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
1613+
1614+ // _Intl == true
1615+ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
1616+ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
1617+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
1618+ __cloc));
1619+ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
1620+ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
1621+ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
1622+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1623+ __pposn);
1624+ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
1625+ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
1626+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
1627+ __nposn);
1628+ }
1629+ }
1630+
1631+ template<>
1632+ void
1633+ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
1634+ const char*)
1635+ {
1636+ if (!_M_data)
1637+ _M_data = new __moneypunct_cache<char, false>;
1638+
1639+ if (!__cloc)
1640+ {
1641+ // "C" locale
1642+ _M_data->_M_decimal_point = '.';
1643+ _M_data->_M_thousands_sep = ',';
1644+ _M_data->_M_grouping = "";
1645+ _M_data->_M_grouping_size = 0;
1646+ _M_data->_M_curr_symbol = "";
1647+ _M_data->_M_curr_symbol_size = 0;
1648+ _M_data->_M_positive_sign = "";
1649+ _M_data->_M_positive_sign_size = 0;
1650+ _M_data->_M_negative_sign = "";
1651+ _M_data->_M_negative_sign_size = 0;
1652+ _M_data->_M_frac_digits = 0;
1653+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1654+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1655+
1656+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1657+ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
1658+ }
1659+ else
1660+ {
1661+ // Named locale.
1662+ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
1663+ __cloc));
1664+ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
1665+ __cloc));
1666+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1667+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1668+ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1669+ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
1670+
1671+ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
1672+ if (!__nposn)
1673+ _M_data->_M_negative_sign = "()";
1674+ else
1675+ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
1676+ __cloc);
1677+ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
1678+
1679+ // _Intl == false
1680+ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
1681+ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
1682+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
1683+ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
1684+ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
1685+ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
1686+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1687+ __pposn);
1688+ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
1689+ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
1690+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
1691+ __nposn);
1692+ }
1693+ }
1694+
1695+ template<>
1696+ moneypunct<char, true>::~moneypunct()
1697+ { delete _M_data; }
1698+
1699+ template<>
1700+ moneypunct<char, false>::~moneypunct()
1701+ { delete _M_data; }
1702+
1703+#ifdef _GLIBCXX_USE_WCHAR_T
1704+ template<>
1705+ void
1706+ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
1707+#ifdef __UCLIBC_HAS_XLOCALE__
1708+ const char*)
1709+#else
1710+ const char* __name)
1711+#endif
1712+ {
1713+ if (!_M_data)
1714+ _M_data = new __moneypunct_cache<wchar_t, true>;
1715+
1716+ if (!__cloc)
1717+ {
1718+ // "C" locale
1719+ _M_data->_M_decimal_point = L'.';
1720+ _M_data->_M_thousands_sep = L',';
1721+ _M_data->_M_grouping = "";
1722+ _M_data->_M_grouping_size = 0;
1723+ _M_data->_M_curr_symbol = L"";
1724+ _M_data->_M_curr_symbol_size = 0;
1725+ _M_data->_M_positive_sign = L"";
1726+ _M_data->_M_positive_sign_size = 0;
1727+ _M_data->_M_negative_sign = L"";
1728+ _M_data->_M_negative_sign_size = 0;
1729+ _M_data->_M_frac_digits = 0;
1730+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1731+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1732+
1733+ // Use ctype::widen code without the facet...
1734+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1735+ _M_data->_M_atoms[__i] =
1736+ static_cast<wchar_t>(money_base::_S_atoms[__i]);
1737+ }
1738+ else
1739+ {
1740+ // Named locale.
1741+#ifdef __UCLIBC_HAS_XLOCALE__
1742+ __c_locale __old = __uselocale(__cloc);
1743+#else
1744+ // Switch to named locale so that mbsrtowcs will work.
1745+ char* __old = strdup(setlocale(LC_ALL, NULL));
1746+ setlocale(LC_ALL, __name);
1747+#endif
1748+
1749+#ifdef __UCLIBC_MJN3_ONLY__
1750+#warning fix this... should be monetary
1751+#endif
1752+#ifdef __UCLIBC__
1753+# ifdef __UCLIBC_HAS_XLOCALE__
1754+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
1755+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
1756+# else
1757+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
1758+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
1759+# endif
1760+#else
1761+ union { char *__s; wchar_t __w; } __u;
1762+ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
1763+ _M_data->_M_decimal_point = __u.__w;
1764+
1765+ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
1766+ _M_data->_M_thousands_sep = __u.__w;
1767+#endif
1768+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1769+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1770+
1771+ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1772+ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
1773+ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
1774+
1775+ wchar_t* __wcs_ps = 0;
1776+ wchar_t* __wcs_ns = 0;
1777+ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
1778+ try
1779+ {
1780+ mbstate_t __state;
1781+ size_t __len = strlen(__cpossign);
1782+ if (__len)
1783+ {
1784+ ++__len;
1785+ memset(&__state, 0, sizeof(mbstate_t));
1786+ __wcs_ps = new wchar_t[__len];
1787+ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
1788+ _M_data->_M_positive_sign = __wcs_ps;
1789+ }
1790+ else
1791+ _M_data->_M_positive_sign = L"";
1792+ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
1793+
1794+ __len = strlen(__cnegsign);
1795+ if (!__nposn)
1796+ _M_data->_M_negative_sign = L"()";
1797+ else if (__len)
1798+ {
1799+ ++__len;
1800+ memset(&__state, 0, sizeof(mbstate_t));
1801+ __wcs_ns = new wchar_t[__len];
1802+ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
1803+ _M_data->_M_negative_sign = __wcs_ns;
1804+ }
1805+ else
1806+ _M_data->_M_negative_sign = L"";
1807+ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
1808+
1809+ // _Intl == true.
1810+ __len = strlen(__ccurr);
1811+ if (__len)
1812+ {
1813+ ++__len;
1814+ memset(&__state, 0, sizeof(mbstate_t));
1815+ wchar_t* __wcs = new wchar_t[__len];
1816+ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
1817+ _M_data->_M_curr_symbol = __wcs;
1818+ }
1819+ else
1820+ _M_data->_M_curr_symbol = L"";
1821+ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
1822+ }
1823+ catch (...)
1824+ {
1825+ delete _M_data;
1826+ _M_data = 0;
1827+ delete __wcs_ps;
1828+ delete __wcs_ns;
1829+#ifdef __UCLIBC_HAS_XLOCALE__
1830+ __uselocale(__old);
1831+#else
1832+ setlocale(LC_ALL, __old);
1833+ free(__old);
1834+#endif
1835+ __throw_exception_again;
1836+ }
1837+
1838+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
1839+ __cloc));
1840+ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
1841+ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
1842+ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
1843+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1844+ __pposn);
1845+ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
1846+ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
1847+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
1848+ __nposn);
1849+
1850+#ifdef __UCLIBC_HAS_XLOCALE__
1851+ __uselocale(__old);
1852+#else
1853+ setlocale(LC_ALL, __old);
1854+ free(__old);
1855+#endif
1856+ }
1857+ }
1858+
1859+ template<>
1860+ void
1861+ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
1862+#ifdef __UCLIBC_HAS_XLOCALE__
1863+ const char*)
1864+#else
1865+ const char* __name)
1866+#endif
1867+ {
1868+ if (!_M_data)
1869+ _M_data = new __moneypunct_cache<wchar_t, false>;
1870+
1871+ if (!__cloc)
1872+ {
1873+ // "C" locale
1874+ _M_data->_M_decimal_point = L'.';
1875+ _M_data->_M_thousands_sep = L',';
1876+ _M_data->_M_grouping = "";
1877+ _M_data->_M_grouping_size = 0;
1878+ _M_data->_M_curr_symbol = L"";
1879+ _M_data->_M_curr_symbol_size = 0;
1880+ _M_data->_M_positive_sign = L"";
1881+ _M_data->_M_positive_sign_size = 0;
1882+ _M_data->_M_negative_sign = L"";
1883+ _M_data->_M_negative_sign_size = 0;
1884+ _M_data->_M_frac_digits = 0;
1885+ _M_data->_M_pos_format = money_base::_S_default_pattern;
1886+ _M_data->_M_neg_format = money_base::_S_default_pattern;
1887+
1888+ // Use ctype::widen code without the facet...
1889+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
1890+ _M_data->_M_atoms[__i] =
1891+ static_cast<wchar_t>(money_base::_S_atoms[__i]);
1892+ }
1893+ else
1894+ {
1895+ // Named locale.
1896+#ifdef __UCLIBC_HAS_XLOCALE__
1897+ __c_locale __old = __uselocale(__cloc);
1898+#else
1899+ // Switch to named locale so that mbsrtowcs will work.
1900+ char* __old = strdup(setlocale(LC_ALL, NULL));
1901+ setlocale(LC_ALL, __name);
1902+#endif
1903+
1904+#ifdef __UCLIBC_MJN3_ONLY__
1905+#warning fix this... should be monetary
1906+#endif
1907+#ifdef __UCLIBC__
1908+# ifdef __UCLIBC_HAS_XLOCALE__
1909+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
1910+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
1911+# else
1912+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
1913+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
1914+# endif
1915+#else
1916+ union { char *__s; wchar_t __w; } __u;
1917+ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
1918+ _M_data->_M_decimal_point = __u.__w;
1919+
1920+ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
1921+ _M_data->_M_thousands_sep = __u.__w;
1922+#endif
1923+ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
1924+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
1925+
1926+ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
1927+ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
1928+ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
1929+
1930+ wchar_t* __wcs_ps = 0;
1931+ wchar_t* __wcs_ns = 0;
1932+ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
1933+ try
1934+ {
1935+ mbstate_t __state;
1936+ size_t __len;
1937+ __len = strlen(__cpossign);
1938+ if (__len)
1939+ {
1940+ ++__len;
1941+ memset(&__state, 0, sizeof(mbstate_t));
1942+ __wcs_ps = new wchar_t[__len];
1943+ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
1944+ _M_data->_M_positive_sign = __wcs_ps;
1945+ }
1946+ else
1947+ _M_data->_M_positive_sign = L"";
1948+ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
1949+
1950+ __len = strlen(__cnegsign);
1951+ if (!__nposn)
1952+ _M_data->_M_negative_sign = L"()";
1953+ else if (__len)
1954+ {
1955+ ++__len;
1956+ memset(&__state, 0, sizeof(mbstate_t));
1957+ __wcs_ns = new wchar_t[__len];
1958+ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
1959+ _M_data->_M_negative_sign = __wcs_ns;
1960+ }
1961+ else
1962+ _M_data->_M_negative_sign = L"";
1963+ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
1964+
1965+ // _Intl == true.
1966+ __len = strlen(__ccurr);
1967+ if (__len)
1968+ {
1969+ ++__len;
1970+ memset(&__state, 0, sizeof(mbstate_t));
1971+ wchar_t* __wcs = new wchar_t[__len];
1972+ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
1973+ _M_data->_M_curr_symbol = __wcs;
1974+ }
1975+ else
1976+ _M_data->_M_curr_symbol = L"";
1977+ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
1978+ }
1979+ catch (...)
1980+ {
1981+ delete _M_data;
1982+ _M_data = 0;
1983+ delete __wcs_ps;
1984+ delete __wcs_ns;
1985+#ifdef __UCLIBC_HAS_XLOCALE__
1986+ __uselocale(__old);
1987+#else
1988+ setlocale(LC_ALL, __old);
1989+ free(__old);
1990+#endif
1991+ __throw_exception_again;
1992+ }
1993+
1994+ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
1995+ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
1996+ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
1997+ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
1998+ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
1999+ __pposn);
2000+ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
2001+ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
2002+ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
2003+ __nposn);
2004+
2005+#ifdef __UCLIBC_HAS_XLOCALE__
2006+ __uselocale(__old);
2007+#else
2008+ setlocale(LC_ALL, __old);
2009+ free(__old);
2010+#endif
2011+ }
2012+ }
2013+
2014+ template<>
2015+ moneypunct<wchar_t, true>::~moneypunct()
2016+ {
2017+ if (_M_data->_M_positive_sign_size)
2018+ delete [] _M_data->_M_positive_sign;
2019+ if (_M_data->_M_negative_sign_size
2020+ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
2021+ delete [] _M_data->_M_negative_sign;
2022+ if (_M_data->_M_curr_symbol_size)
2023+ delete [] _M_data->_M_curr_symbol;
2024+ delete _M_data;
2025+ }
2026+
2027+ template<>
2028+ moneypunct<wchar_t, false>::~moneypunct()
2029+ {
2030+ if (_M_data->_M_positive_sign_size)
2031+ delete [] _M_data->_M_positive_sign;
2032+ if (_M_data->_M_negative_sign_size
2033+ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
2034+ delete [] _M_data->_M_negative_sign;
2035+ if (_M_data->_M_curr_symbol_size)
2036+ delete [] _M_data->_M_curr_symbol;
2037+ delete _M_data;
2038+ }
2039+#endif
2040+}
2041Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/numeric_members.cc
2042===================================================================
2043--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2044+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2012-04-10 10:30:37.331368420 -0700
2045@@ -0,0 +1,160 @@
2046+// std::numpunct implementation details, GNU version -*- C++ -*-
2047+
2048+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2049+//
2050+// This file is part of the GNU ISO C++ Library. This library is free
2051+// software; you can redistribute it and/or modify it under the
2052+// terms of the GNU General Public License as published by the
2053+// Free Software Foundation; either version 2, or (at your option)
2054+// any later version.
2055+
2056+// This library is distributed in the hope that it will be useful,
2057+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2058+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2059+// GNU General Public License for more details.
2060+
2061+// You should have received a copy of the GNU General Public License along
2062+// with this library; see the file COPYING. If not, write to the Free
2063+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2064+// USA.
2065+
2066+// As a special exception, you may use this file as part of a free software
2067+// library without restriction. Specifically, if other files instantiate
2068+// templates or use macros or inline functions from this file, or you compile
2069+// this file and link it with other files to produce an executable, this
2070+// file does not by itself cause the resulting executable to be covered by
2071+// the GNU General Public License. This exception does not however
2072+// invalidate any other reasons why the executable file might be covered by
2073+// the GNU General Public License.
2074+
2075+//
2076+// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
2077+//
2078+
2079+// Written by Benjamin Kosnik <bkoz@redhat.com>
2080+
2081+#define _LIBC
2082+#include <locale>
2083+#undef _LIBC
2084+#include <bits/c++locale_internal.h>
2085+
2086+#ifdef __UCLIBC_MJN3_ONLY__
2087+#warning tailor for stub locale support
2088+#endif
2089+#ifndef __UCLIBC_HAS_XLOCALE__
2090+#define __nl_langinfo_l(N, L) nl_langinfo((N))
2091+#endif
2092+
2093+namespace std
2094+{
2095+ template<>
2096+ void
2097+ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
2098+ {
2099+ if (!_M_data)
2100+ _M_data = new __numpunct_cache<char>;
2101+
2102+ if (!__cloc)
2103+ {
2104+ // "C" locale
2105+ _M_data->_M_grouping = "";
2106+ _M_data->_M_grouping_size = 0;
2107+ _M_data->_M_use_grouping = false;
2108+
2109+ _M_data->_M_decimal_point = '.';
2110+ _M_data->_M_thousands_sep = ',';
2111+
2112+ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
2113+ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
2114+
2115+ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
2116+ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
2117+ }
2118+ else
2119+ {
2120+ // Named locale.
2121+ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
2122+ __cloc));
2123+ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
2124+ __cloc));
2125+
2126+ // Check for NULL, which implies no grouping.
2127+ if (_M_data->_M_thousands_sep == '\0')
2128+ _M_data->_M_grouping = "";
2129+ else
2130+ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
2131+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
2132+ }
2133+
2134+ // NB: There is no way to extact this info from posix locales.
2135+ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
2136+ _M_data->_M_truename = "true";
2137+ _M_data->_M_truename_size = 4;
2138+ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
2139+ _M_data->_M_falsename = "false";
2140+ _M_data->_M_falsename_size = 5;
2141+ }
2142+
2143+ template<>
2144+ numpunct<char>::~numpunct()
2145+ { delete _M_data; }
2146+
2147+#ifdef _GLIBCXX_USE_WCHAR_T
2148+ template<>
2149+ void
2150+ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
2151+ {
2152+ if (!_M_data)
2153+ _M_data = new __numpunct_cache<wchar_t>;
2154+
2155+ if (!__cloc)
2156+ {
2157+ // "C" locale
2158+ _M_data->_M_grouping = "";
2159+ _M_data->_M_grouping_size = 0;
2160+ _M_data->_M_use_grouping = false;
2161+
2162+ _M_data->_M_decimal_point = L'.';
2163+ _M_data->_M_thousands_sep = L',';
2164+
2165+ // Use ctype::widen code without the facet...
2166+ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
2167+ _M_data->_M_atoms_out[__i] =
2168+ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
2169+
2170+ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
2171+ _M_data->_M_atoms_in[__j] =
2172+ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
2173+ }
2174+ else
2175+ {
2176+ // Named locale.
2177+ // NB: In the GNU model wchar_t is always 32 bit wide.
2178+ union { char *__s; wchar_t __w; } __u;
2179+ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
2180+ _M_data->_M_decimal_point = __u.__w;
2181+
2182+ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
2183+ _M_data->_M_thousands_sep = __u.__w;
2184+
2185+ if (_M_data->_M_thousands_sep == L'\0')
2186+ _M_data->_M_grouping = "";
2187+ else
2188+ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
2189+ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
2190+ }
2191+
2192+ // NB: There is no way to extact this info from posix locales.
2193+ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
2194+ _M_data->_M_truename = L"true";
2195+ _M_data->_M_truename_size = 4;
2196+ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
2197+ _M_data->_M_falsename = L"false";
2198+ _M_data->_M_falsename_size = 5;
2199+ }
2200+
2201+ template<>
2202+ numpunct<wchar_t>::~numpunct()
2203+ { delete _M_data; }
2204+ #endif
2205+}
2206Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.cc
2207===================================================================
2208--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2209+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.cc 2012-04-10 10:30:37.331368420 -0700
2210@@ -0,0 +1,406 @@
2211+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
2212+
2213+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2214+//
2215+// This file is part of the GNU ISO C++ Library. This library is free
2216+// software; you can redistribute it and/or modify it under the
2217+// terms of the GNU General Public License as published by the
2218+// Free Software Foundation; either version 2, or (at your option)
2219+// any later version.
2220+
2221+// This library is distributed in the hope that it will be useful,
2222+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2223+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2224+// GNU General Public License for more details.
2225+
2226+// You should have received a copy of the GNU General Public License along
2227+// with this library; see the file COPYING. If not, write to the Free
2228+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2229+// USA.
2230+
2231+// As a special exception, you may use this file as part of a free software
2232+// library without restriction. Specifically, if other files instantiate
2233+// templates or use macros or inline functions from this file, or you compile
2234+// this file and link it with other files to produce an executable, this
2235+// file does not by itself cause the resulting executable to be covered by
2236+// the GNU General Public License. This exception does not however
2237+// invalidate any other reasons why the executable file might be covered by
2238+// the GNU General Public License.
2239+
2240+//
2241+// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
2242+// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
2243+//
2244+
2245+// Written by Benjamin Kosnik <bkoz@redhat.com>
2246+
2247+#include <locale>
2248+#include <bits/c++locale_internal.h>
2249+
2250+#ifdef __UCLIBC_MJN3_ONLY__
2251+#warning tailor for stub locale support
2252+#endif
2253+#ifndef __UCLIBC_HAS_XLOCALE__
2254+#define __nl_langinfo_l(N, L) nl_langinfo((N))
2255+#endif
2256+
2257+namespace std
2258+{
2259+ template<>
2260+ void
2261+ __timepunct<char>::
2262+ _M_put(char* __s, size_t __maxlen, const char* __format,
2263+ const tm* __tm) const
2264+ {
2265+#ifdef __UCLIBC_HAS_XLOCALE__
2266+ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
2267+ _M_c_locale_timepunct);
2268+#else
2269+ char* __old = strdup(setlocale(LC_ALL, NULL));
2270+ setlocale(LC_ALL, _M_name_timepunct);
2271+ const size_t __len = strftime(__s, __maxlen, __format, __tm);
2272+ setlocale(LC_ALL, __old);
2273+ free(__old);
2274+#endif
2275+ // Make sure __s is null terminated.
2276+ if (__len == 0)
2277+ __s[0] = '\0';
2278+ }
2279+
2280+ template<>
2281+ void
2282+ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
2283+ {
2284+ if (!_M_data)
2285+ _M_data = new __timepunct_cache<char>;
2286+
2287+ if (!__cloc)
2288+ {
2289+ // "C" locale
2290+ _M_c_locale_timepunct = _S_get_c_locale();
2291+
2292+ _M_data->_M_date_format = "%m/%d/%y";
2293+ _M_data->_M_date_era_format = "%m/%d/%y";
2294+ _M_data->_M_time_format = "%H:%M:%S";
2295+ _M_data->_M_time_era_format = "%H:%M:%S";
2296+ _M_data->_M_date_time_format = "";
2297+ _M_data->_M_date_time_era_format = "";
2298+ _M_data->_M_am = "AM";
2299+ _M_data->_M_pm = "PM";
2300+ _M_data->_M_am_pm_format = "";
2301+
2302+ // Day names, starting with "C"'s Sunday.
2303+ _M_data->_M_day1 = "Sunday";
2304+ _M_data->_M_day2 = "Monday";
2305+ _M_data->_M_day3 = "Tuesday";
2306+ _M_data->_M_day4 = "Wednesday";
2307+ _M_data->_M_day5 = "Thursday";
2308+ _M_data->_M_day6 = "Friday";
2309+ _M_data->_M_day7 = "Saturday";
2310+
2311+ // Abbreviated day names, starting with "C"'s Sun.
2312+ _M_data->_M_aday1 = "Sun";
2313+ _M_data->_M_aday2 = "Mon";
2314+ _M_data->_M_aday3 = "Tue";
2315+ _M_data->_M_aday4 = "Wed";
2316+ _M_data->_M_aday5 = "Thu";
2317+ _M_data->_M_aday6 = "Fri";
2318+ _M_data->_M_aday7 = "Sat";
2319+
2320+ // Month names, starting with "C"'s January.
2321+ _M_data->_M_month01 = "January";
2322+ _M_data->_M_month02 = "February";
2323+ _M_data->_M_month03 = "March";
2324+ _M_data->_M_month04 = "April";
2325+ _M_data->_M_month05 = "May";
2326+ _M_data->_M_month06 = "June";
2327+ _M_data->_M_month07 = "July";
2328+ _M_data->_M_month08 = "August";
2329+ _M_data->_M_month09 = "September";
2330+ _M_data->_M_month10 = "October";
2331+ _M_data->_M_month11 = "November";
2332+ _M_data->_M_month12 = "December";
2333+
2334+ // Abbreviated month names, starting with "C"'s Jan.
2335+ _M_data->_M_amonth01 = "Jan";
2336+ _M_data->_M_amonth02 = "Feb";
2337+ _M_data->_M_amonth03 = "Mar";
2338+ _M_data->_M_amonth04 = "Apr";
2339+ _M_data->_M_amonth05 = "May";
2340+ _M_data->_M_amonth06 = "Jun";
2341+ _M_data->_M_amonth07 = "Jul";
2342+ _M_data->_M_amonth08 = "Aug";
2343+ _M_data->_M_amonth09 = "Sep";
2344+ _M_data->_M_amonth10 = "Oct";
2345+ _M_data->_M_amonth11 = "Nov";
2346+ _M_data->_M_amonth12 = "Dec";
2347+ }
2348+ else
2349+ {
2350+ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
2351+
2352+ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
2353+ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
2354+ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
2355+ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
2356+ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
2357+ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
2358+ __cloc);
2359+ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
2360+ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
2361+ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
2362+
2363+ // Day names, starting with "C"'s Sunday.
2364+ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
2365+ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
2366+ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
2367+ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
2368+ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
2369+ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
2370+ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
2371+
2372+ // Abbreviated day names, starting with "C"'s Sun.
2373+ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
2374+ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
2375+ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
2376+ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
2377+ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
2378+ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
2379+ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
2380+
2381+ // Month names, starting with "C"'s January.
2382+ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
2383+ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
2384+ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
2385+ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
2386+ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
2387+ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
2388+ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
2389+ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
2390+ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
2391+ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
2392+ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
2393+ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
2394+
2395+ // Abbreviated month names, starting with "C"'s Jan.
2396+ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
2397+ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
2398+ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
2399+ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
2400+ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
2401+ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
2402+ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
2403+ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
2404+ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
2405+ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
2406+ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
2407+ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
2408+ }
2409+ }
2410+
2411+#ifdef _GLIBCXX_USE_WCHAR_T
2412+ template<>
2413+ void
2414+ __timepunct<wchar_t>::
2415+ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
2416+ const tm* __tm) const
2417+ {
2418+#ifdef __UCLIBC_HAS_XLOCALE__
2419+ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
2420+ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
2421+ _M_c_locale_timepunct);
2422+#else
2423+ char* __old = strdup(setlocale(LC_ALL, NULL));
2424+ setlocale(LC_ALL, _M_name_timepunct);
2425+ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
2426+ setlocale(LC_ALL, __old);
2427+ free(__old);
2428+#endif
2429+ // Make sure __s is null terminated.
2430+ if (__len == 0)
2431+ __s[0] = L'\0';
2432+ }
2433+
2434+ template<>
2435+ void
2436+ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
2437+ {
2438+ if (!_M_data)
2439+ _M_data = new __timepunct_cache<wchar_t>;
2440+
2441+#warning wide time stuff
2442+// if (!__cloc)
2443+ {
2444+ // "C" locale
2445+ _M_c_locale_timepunct = _S_get_c_locale();
2446+
2447+ _M_data->_M_date_format = L"%m/%d/%y";
2448+ _M_data->_M_date_era_format = L"%m/%d/%y";
2449+ _M_data->_M_time_format = L"%H:%M:%S";
2450+ _M_data->_M_time_era_format = L"%H:%M:%S";
2451+ _M_data->_M_date_time_format = L"";
2452+ _M_data->_M_date_time_era_format = L"";
2453+ _M_data->_M_am = L"AM";
2454+ _M_data->_M_pm = L"PM";
2455+ _M_data->_M_am_pm_format = L"";
2456+
2457+ // Day names, starting with "C"'s Sunday.
2458+ _M_data->_M_day1 = L"Sunday";
2459+ _M_data->_M_day2 = L"Monday";
2460+ _M_data->_M_day3 = L"Tuesday";
2461+ _M_data->_M_day4 = L"Wednesday";
2462+ _M_data->_M_day5 = L"Thursday";
2463+ _M_data->_M_day6 = L"Friday";
2464+ _M_data->_M_day7 = L"Saturday";
2465+
2466+ // Abbreviated day names, starting with "C"'s Sun.
2467+ _M_data->_M_aday1 = L"Sun";
2468+ _M_data->_M_aday2 = L"Mon";
2469+ _M_data->_M_aday3 = L"Tue";
2470+ _M_data->_M_aday4 = L"Wed";
2471+ _M_data->_M_aday5 = L"Thu";
2472+ _M_data->_M_aday6 = L"Fri";
2473+ _M_data->_M_aday7 = L"Sat";
2474+
2475+ // Month names, starting with "C"'s January.
2476+ _M_data->_M_month01 = L"January";
2477+ _M_data->_M_month02 = L"February";
2478+ _M_data->_M_month03 = L"March";
2479+ _M_data->_M_month04 = L"April";
2480+ _M_data->_M_month05 = L"May";
2481+ _M_data->_M_month06 = L"June";
2482+ _M_data->_M_month07 = L"July";
2483+ _M_data->_M_month08 = L"August";
2484+ _M_data->_M_month09 = L"September";
2485+ _M_data->_M_month10 = L"October";
2486+ _M_data->_M_month11 = L"November";
2487+ _M_data->_M_month12 = L"December";
2488+
2489+ // Abbreviated month names, starting with "C"'s Jan.
2490+ _M_data->_M_amonth01 = L"Jan";
2491+ _M_data->_M_amonth02 = L"Feb";
2492+ _M_data->_M_amonth03 = L"Mar";
2493+ _M_data->_M_amonth04 = L"Apr";
2494+ _M_data->_M_amonth05 = L"May";
2495+ _M_data->_M_amonth06 = L"Jun";
2496+ _M_data->_M_amonth07 = L"Jul";
2497+ _M_data->_M_amonth08 = L"Aug";
2498+ _M_data->_M_amonth09 = L"Sep";
2499+ _M_data->_M_amonth10 = L"Oct";
2500+ _M_data->_M_amonth11 = L"Nov";
2501+ _M_data->_M_amonth12 = L"Dec";
2502+ }
2503+#if 0
2504+ else
2505+ {
2506+ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
2507+
2508+ union { char *__s; wchar_t *__w; } __u;
2509+
2510+ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
2511+ _M_data->_M_date_format = __u.__w;
2512+ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
2513+ _M_data->_M_date_era_format = __u.__w;
2514+ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
2515+ _M_data->_M_time_format = __u.__w;
2516+ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
2517+ _M_data->_M_time_era_format = __u.__w;
2518+ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
2519+ _M_data->_M_date_time_format = __u.__w;
2520+ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
2521+ _M_data->_M_date_time_era_format = __u.__w;
2522+ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
2523+ _M_data->_M_am = __u.__w;
2524+ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
2525+ _M_data->_M_pm = __u.__w;
2526+ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
2527+ _M_data->_M_am_pm_format = __u.__w;
2528+
2529+ // Day names, starting with "C"'s Sunday.
2530+ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
2531+ _M_data->_M_day1 = __u.__w;
2532+ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
2533+ _M_data->_M_day2 = __u.__w;
2534+ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
2535+ _M_data->_M_day3 = __u.__w;
2536+ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
2537+ _M_data->_M_day4 = __u.__w;
2538+ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
2539+ _M_data->_M_day5 = __u.__w;
2540+ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
2541+ _M_data->_M_day6 = __u.__w;
2542+ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
2543+ _M_data->_M_day7 = __u.__w;
2544+
2545+ // Abbreviated day names, starting with "C"'s Sun.
2546+ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
2547+ _M_data->_M_aday1 = __u.__w;
2548+ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
2549+ _M_data->_M_aday2 = __u.__w;
2550+ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
2551+ _M_data->_M_aday3 = __u.__w;
2552+ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
2553+ _M_data->_M_aday4 = __u.__w;
2554+ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
2555+ _M_data->_M_aday5 = __u.__w;
2556+ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
2557+ _M_data->_M_aday6 = __u.__w;
2558+ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
2559+ _M_data->_M_aday7 = __u.__w;
2560+
2561+ // Month names, starting with "C"'s January.
2562+ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
2563+ _M_data->_M_month01 = __u.__w;
2564+ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
2565+ _M_data->_M_month02 = __u.__w;
2566+ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
2567+ _M_data->_M_month03 = __u.__w;
2568+ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
2569+ _M_data->_M_month04 = __u.__w;
2570+ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
2571+ _M_data->_M_month05 = __u.__w;
2572+ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
2573+ _M_data->_M_month06 = __u.__w;
2574+ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
2575+ _M_data->_M_month07 = __u.__w;
2576+ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
2577+ _M_data->_M_month08 = __u.__w;
2578+ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
2579+ _M_data->_M_month09 = __u.__w;
2580+ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
2581+ _M_data->_M_month10 = __u.__w;
2582+ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
2583+ _M_data->_M_month11 = __u.__w;
2584+ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
2585+ _M_data->_M_month12 = __u.__w;
2586+
2587+ // Abbreviated month names, starting with "C"'s Jan.
2588+ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
2589+ _M_data->_M_amonth01 = __u.__w;
2590+ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
2591+ _M_data->_M_amonth02 = __u.__w;
2592+ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
2593+ _M_data->_M_amonth03 = __u.__w;
2594+ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
2595+ _M_data->_M_amonth04 = __u.__w;
2596+ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
2597+ _M_data->_M_amonth05 = __u.__w;
2598+ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
2599+ _M_data->_M_amonth06 = __u.__w;
2600+ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
2601+ _M_data->_M_amonth07 = __u.__w;
2602+ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
2603+ _M_data->_M_amonth08 = __u.__w;
2604+ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
2605+ _M_data->_M_amonth09 = __u.__w;
2606+ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
2607+ _M_data->_M_amonth10 = __u.__w;
2608+ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
2609+ _M_data->_M_amonth11 = __u.__w;
2610+ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
2611+ _M_data->_M_amonth12 = __u.__w;
2612+ }
2613+#endif // 0
2614+ }
2615+#endif
2616+}
2617Index: gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.h
2618===================================================================
2619--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2620+++ gcc-4_7-branch/libstdc++-v3/config/locale/uclibc/time_members.h 2012-04-10 10:30:37.331368420 -0700
2621@@ -0,0 +1,68 @@
2622+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
2623+
2624+// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
2625+//
2626+// This file is part of the GNU ISO C++ Library. This library is free
2627+// software; you can redistribute it and/or modify it under the
2628+// terms of the GNU General Public License as published by the
2629+// Free Software Foundation; either version 2, or (at your option)
2630+// any later version.
2631+
2632+// This library is distributed in the hope that it will be useful,
2633+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2634+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2635+// GNU General Public License for more details.
2636+
2637+// You should have received a copy of the GNU General Public License along
2638+// with this library; see the file COPYING. If not, write to the Free
2639+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
2640+// USA.
2641+
2642+// As a special exception, you may use this file as part of a free software
2643+// library without restriction. Specifically, if other files instantiate
2644+// templates or use macros or inline functions from this file, or you compile
2645+// this file and link it with other files to produce an executable, this
2646+// file does not by itself cause the resulting executable to be covered by
2647+// the GNU General Public License. This exception does not however
2648+// invalidate any other reasons why the executable file might be covered by
2649+// the GNU General Public License.
2650+
2651+//
2652+// ISO C++ 14882: 22.2.5.1.2 - time_get functions
2653+// ISO C++ 14882: 22.2.5.3.2 - time_put functions
2654+//
2655+
2656+// Written by Benjamin Kosnik <bkoz@redhat.com>
2657+
2658+ template<typename _CharT>
2659+ __timepunct<_CharT>::__timepunct(size_t __refs)
2660+ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
2661+ _M_name_timepunct(_S_get_c_name())
2662+ { _M_initialize_timepunct(); }
2663+
2664+ template<typename _CharT>
2665+ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
2666+ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
2667+ _M_name_timepunct(_S_get_c_name())
2668+ { _M_initialize_timepunct(); }
2669+
2670+ template<typename _CharT>
2671+ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
2672+ size_t __refs)
2673+ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
2674+ _M_name_timepunct(__s)
2675+ {
2676+ char* __tmp = new char[std::strlen(__s) + 1];
2677+ std::strcpy(__tmp, __s);
2678+ _M_name_timepunct = __tmp;
2679+ _M_initialize_timepunct(__cloc);
2680+ }
2681+
2682+ template<typename _CharT>
2683+ __timepunct<_CharT>::~__timepunct()
2684+ {
2685+ if (_M_name_timepunct != _S_get_c_name())
2686+ delete [] _M_name_timepunct;
2687+ delete _M_data;
2688+ _S_destroy_c_locale(_M_c_locale_timepunct);
2689+ }
2690Index: gcc-4_7-branch/libstdc++-v3/configure
2691===================================================================
2692--- gcc-4_7-branch.orig/libstdc++-v3/configure 2012-04-10 10:19:50.383337127 -0700
2693+++ gcc-4_7-branch/libstdc++-v3/configure 2012-04-10 10:30:37.347368481 -0700
2694@@ -15736,6 +15736,9 @@
2695 # Default to "generic".
2696 if test $enable_clocale_flag = auto; then
2697 case ${target_os} in
2698+ *-uclibc*)
2699+ enable_clocale_flag=uclibc
2700+ ;;
2701 linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2702 enable_clocale_flag=gnu
2703 ;;
2704@@ -15990,6 +15993,78 @@
2705 CTIME_CC=config/locale/generic/time_members.cc
2706 CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2707 ;;
2708+ uclibc)
2709+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: uclibc" >&5
2710+$as_echo "uclibc" >&6; }
2711+
2712+ # Declare intention to use gettext, and add support for specific
2713+ # languages.
2714+ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
2715+ ALL_LINGUAS="de fr"
2716+
2717+ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
2718+ # Extract the first word of "msgfmt", so it can be a program name with args.
2719+set dummy msgfmt; ac_word=$2
2720+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2721+$as_echo_n "checking for $ac_word... " >&6; }
2722+if test "${ac_cv_prog_check_msgfmt+set}" = set; then :
2723+ $as_echo_n "(cached) " >&6
2724+else
2725+ if test -n "$check_msgfmt"; then
2726+ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
2727+else
2728+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2729+for as_dir in $PATH
2730+do
2731+ IFS=$as_save_IFS
2732+ test -z "$as_dir" && as_dir=.
2733+ for ac_exec_ext in '' $ac_executable_extensions; do
2734+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
2735+ ac_cv_prog_check_msgfmt="yes"
2736+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2737+ break 2
2738+ fi
2739+done
2740+ done
2741+IFS=$as_save_IFS
2742+
2743+ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
2744+fi
2745+fi
2746+check_msgfmt=$ac_cv_prog_check_msgfmt
2747+if test -n "$check_msgfmt"; then
2748+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $check_msgfmt" >&5
2749+$as_echo "$check_msgfmt" >&6; }
2750+else
2751+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2752+$as_echo "no" >&6; }
2753+fi
2754+
2755+
2756+ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
2757+ USE_NLS=yes
2758+ fi
2759+ # Export the build objects.
2760+ for ling in $ALL_LINGUAS; do \
2761+ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
2762+ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
2763+ done
2764+
2765+
2766+
2767+ CLOCALE_H=config/locale/uclibc/c_locale.h
2768+ CLOCALE_CC=config/locale/uclibc/c_locale.cc
2769+ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
2770+ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
2771+ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
2772+ CMESSAGES_H=config/locale/uclibc/messages_members.h
2773+ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
2774+ CMONEY_CC=config/locale/uclibc/monetary_members.cc
2775+ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
2776+ CTIME_H=config/locale/uclibc/time_members.h
2777+ CTIME_CC=config/locale/uclibc/time_members.cc
2778+ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
2779+ ;;
2780 esac
2781
2782 # This is where the testsuite looks for locale catalogs, using the
2783Index: gcc-4_7-branch/libstdc++-v3/include/c_compatibility/wchar.h
2784===================================================================
2785--- gcc-4_7-branch.orig/libstdc++-v3/include/c_compatibility/wchar.h 2012-04-10 10:19:50.303337124 -0700
2786+++ gcc-4_7-branch/libstdc++-v3/include/c_compatibility/wchar.h 2012-04-10 10:30:37.347368481 -0700
2787@@ -101,7 +101,9 @@
2788 using std::wmemcpy;
2789 using std::wmemmove;
2790 using std::wmemset;
2791+#if _GLIBCXX_HAVE_WCSFTIME
2792 using std::wcsftime;
2793+#endif
2794
2795 #if _GLIBCXX_USE_C99
2796 using std::wcstold;
2797Index: gcc-4_7-branch/libstdc++-v3/include/c_std/cwchar
2798===================================================================
2799--- gcc-4_7-branch.orig/libstdc++-v3/include/c_std/cwchar 2012-04-10 10:19:50.295337124 -0700
2800+++ gcc-4_7-branch/libstdc++-v3/include/c_std/cwchar 2012-04-10 10:30:37.347368481 -0700
2801@@ -177,7 +177,9 @@
2802 using ::wcscoll;
2803 using ::wcscpy;
2804 using ::wcscspn;
2805+#if _GLIBCXX_HAVE_WCSFTIME
2806 using ::wcsftime;
2807+#endif
2808 using ::wcslen;
2809 using ::wcsncat;
2810 using ::wcsncmp;