From: Benjamin Kosnik Date: Sat, 9 Mar 2002 02:16:36 +0000 (+0000) Subject: c_locale_generic.cc: Move to... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1fa4bed7b59f2e3bd3168791f6a2d69639fce91e;p=gcc.git c_locale_generic.cc: Move to... 2002-03-08 Benjamin Kosnik * c_locale_generic.cc: Move to... * generic/c_locale.cc * c_locale_generic.h: Move to... * generic/c_locale.h * codecvt_specializations_generic.h: Move to... * generic/codecvt_specializations.h * collate_members_generic.cc: Move to... * generic/collate_members.cc * ctype_members_generic.cc: Move to... * generic/ctype_members.cc * messages_members_generic.cc: Move to... * generic/messages_members.cc * messages_members_generic.h: Move to... * generic/messages_members.h * moneypunct_members_generic.cc: Move to... * generic/monetary_members.cc * numpunct_members_generic.cc: Move to... * generic/numeric_members.cc * time_members_generic.cc: Move to... * generic/time_members.cc * c_locale_gnu.cc: Move to... * gnu/c_locale.cc * c_locale_gnu.h: Move to... * gnu/c_locale.h * collate_members_gnu.cc: Move to... * gnu/collate_members.cc * ctype_members_gnu.cc: Move to... * gnu/ctype_members.cc * messages_members_gnu.cc: Move to... * gnu/messages_members.cc * messages_members_gnu.h: Move to... * gnu/messages_members.h * moneypunct_members_gnu.cc: Move to... * gnu/monetary_members.cc * numpunct_members_gnu.cc: Move to... * gnu/numeric_members.cc * time_members_gnu.cc: Move to... * gnu/time_members.cc * c_locale_ieee_1003.1-200x.cc: Move to... * ieee_1003.1-2001/c_locale.cc * c_locale_ieee_1003.1-200x.h: Move to... * ieee_1003.1-2001/c_locale.h * codecvt_specializations_ieee_1003.1-200x.h: Move to... * ieee_1003.1-2001/codecvt_specializations.h * messages_members_ieee_1003.1-200x.cc: Move to... * ieee_1003.1-2001/messages_members.cc * messages_members_ieee_1003.1-200x.h: Move to... * ieee_1003.1-2001/messages_members.h * acinclude.m4 (GLIBCPP_ENABLE_CLOCALE): Make consistent. * aclocal.m4: Regenerate. * configure: Regenerate. * src/Makefile.am (sources): Change to monetary and numeric. * src/Makefile.in: Regenerate. * docs/html/configopts.html: Update to ieee_1003.1-2001. From-SVN: r50472 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1ba73fd4763..7da26326f17 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,61 @@ +2002-03-08 Benjamin Kosnik + + * c_locale_generic.cc: Move to... + * generic/c_locale.cc + * c_locale_generic.h: Move to... + * generic/c_locale.h + * codecvt_specializations_generic.h: Move to... + * generic/codecvt_specializations.h + * collate_members_generic.cc: Move to... + * generic/collate_members.cc + * ctype_members_generic.cc: Move to... + * generic/ctype_members.cc + * messages_members_generic.cc: Move to... + * generic/messages_members.cc + * messages_members_generic.h: Move to... + * generic/messages_members.h + * moneypunct_members_generic.cc: Move to... + * generic/monetary_members.cc + * numpunct_members_generic.cc: Move to... + * generic/numeric_members.cc + * time_members_generic.cc: Move to... + * generic/time_members.cc + * c_locale_gnu.cc: Move to... + * gnu/c_locale.cc + * c_locale_gnu.h: Move to... + * gnu/c_locale.h + * collate_members_gnu.cc: Move to... + * gnu/collate_members.cc + * ctype_members_gnu.cc: Move to... + * gnu/ctype_members.cc + * messages_members_gnu.cc: Move to... + * gnu/messages_members.cc + * messages_members_gnu.h: Move to... + * gnu/messages_members.h + * moneypunct_members_gnu.cc: Move to... + * gnu/monetary_members.cc + * numpunct_members_gnu.cc: Move to... + * gnu/numeric_members.cc + * time_members_gnu.cc: Move to... + * gnu/time_members.cc + * c_locale_ieee_1003.1-200x.cc: Move to... + * ieee_1003.1-2001/c_locale.cc + * c_locale_ieee_1003.1-200x.h: Move to... + * ieee_1003.1-2001/c_locale.h + * codecvt_specializations_ieee_1003.1-200x.h: Move to... + * ieee_1003.1-2001/codecvt_specializations.h + * messages_members_ieee_1003.1-200x.cc: Move to... + * ieee_1003.1-2001/messages_members.cc + * messages_members_ieee_1003.1-200x.h: Move to... + * ieee_1003.1-2001/messages_members.h + + * acinclude.m4 (GLIBCPP_ENABLE_CLOCALE): Make consistent. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * src/Makefile.am (sources): Change to monetary and numeric. + * src/Makefile.in: Regenerate. + * docs/html/configopts.html: Update to ieee_1003.1-2001. + 2002-03-08 scott snyder libstdc++/5875 diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index c78001148d1..94ef3bcccb6 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -1127,16 +1127,16 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ # Don't use gettext. USE_NLS=no - CLOCALE_H=config/locale/c_locale_generic.h - CLOCALE_CC=config/locale/c_locale_generic.cc - CCODECVT_H=config/locale/codecvt_specializations_generic.h - CCOLLATE_CC=config/locale/collate_members_generic.cc - CCTYPE_CC=config/locale/ctype_members_generic.cc - CMESSAGES_H=config/locale/messages_members_generic.h - CMESSAGES_CC=config/locale/messages_members_generic.cc - CMONEY_CC=config/locale/moneypunct_members_generic.cc - CNUMERIC_CC=config/locale/numpunct_members_generic.cc - CTIME_CC=config/locale/time_members_generic.cc + CLOCALE_H=config/locale/generic/c_locale.h + CLOCALE_CC=config/locale/generic/c_locale.cc + CCODECVT_H=config/locale/generic/codecvt_specializations.h + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/generic/ctype_members.cc + CMESSAGES_H=config/locale/generic/messages_members.h + CMESSAGES_CC=config/locale/generic/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_CC=config/locale/generic/time_members.cc ;; xgnu) AC_MSG_RESULT(gnu) @@ -1157,33 +1157,33 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ AC_SUBST(glibcpp_MOFILES) AC_SUBST(glibcpp_POFILES) - CLOCALE_H=config/locale/c_locale_gnu.h - CLOCALE_CC=config/locale/c_locale_gnu.cc - CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h - CCOLLATE_CC=config/locale/collate_members_gnu.cc - CCTYPE_CC=config/locale/ctype_members_gnu.cc - CMESSAGES_H=config/locale/messages_members_gnu.h - CMESSAGES_CC=config/locale/messages_members_gnu.cc - CMONEY_CC=config/locale/moneypunct_members_gnu.cc - CNUMERIC_CC=config/locale/numpunct_members_gnu.cc - CTIME_CC=config/locale/time_members_gnu.cc + CLOCALE_H=config/locale/gnu/c_locale.h + CLOCALE_CC=config/locale/gnu/c_locale.cc + CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h + CCOLLATE_CC=config/locale/gnu/collate_members.cc + CCTYPE_CC=config/locale/gnu/ctype_members.cc + CMESSAGES_H=config/locale/gnu/messages_members.h + CMESSAGES_CC=config/locale/gnu/messages_members.cc + CMONEY_CC=config/locale/gnu/monetary_members.cc + CNUMERIC_CC=config/locale/gnu/numeric_members.cc + CTIME_CC=config/locale/gnu/time_members.cc ;; - xieee_1003.1) + xieee_1003.1-2001) AC_MSG_RESULT(generic) # Don't use gettext. USE_NLS=no - CLOCALE_H=config/locale/c_locale_ieee_1003.1-200x.h - CLOCALE_CC=config/locale/c_locale_ieee_1003.1-200x.cc - CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h - CCOLLATE_CC=config/locale/collate_members_generic.cc - CCTYPE_CC=config/locale/ctype_members_generic.cc - CMESSAGES_H=config/locale/messages_members_ieee_1003.1-200x.h - CMESSAGES_CC=config/locale/messages_members_ieee_1003.1-200x.cc - CMONEY_CC=config/locale/moneypunct_members_generic.cc - CNUMERIC_CC=config/locale/numpunct_members_generic.cc - CTIME_CC=config/locale/time_members_generic.cc + CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h + CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc + CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/generic/ctype_members.cc + CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h + CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_CC=config/locale/generic/time_members.cc ;; *) echo "$enable_clocale is an unknown locale package" 1>&2 @@ -1204,8 +1204,8 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ AC_LINK_FILES($CCOLLATE_CC, src/collate.cc) AC_LINK_FILES($CCTYPE_CC, src/ctype.cc) AC_LINK_FILES($CMESSAGES_CC, src/messages.cc) - AC_LINK_FILES($CMONEY_CC, src/moneypunct.cc) - AC_LINK_FILES($CNUMERIC_CC, src/numpunct.cc) + AC_LINK_FILES($CMONEY_CC, src/monetary.cc) + AC_LINK_FILES($CNUMERIC_CC, src/numeric.cc) AC_LINK_FILES($CTIME_CC, src/time.cc) ]) diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4 index bd5689e8037..ab9dc3c8e1d 100644 --- a/libstdc++-v3/aclocal.m4 +++ b/libstdc++-v3/aclocal.m4 @@ -1,6 +1,6 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 +dnl aclocal.m4 generated automatically by aclocal 1.4-p5 -dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -1139,16 +1139,16 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ # Don't use gettext. USE_NLS=no - CLOCALE_H=config/locale/c_locale_generic.h - CLOCALE_CC=config/locale/c_locale_generic.cc - CCODECVT_H=config/locale/codecvt_specializations_generic.h - CCOLLATE_CC=config/locale/collate_members_generic.cc - CCTYPE_CC=config/locale/ctype_members_generic.cc - CMESSAGES_H=config/locale/messages_members_generic.h - CMESSAGES_CC=config/locale/messages_members_generic.cc - CMONEY_CC=config/locale/moneypunct_members_generic.cc - CNUMERIC_CC=config/locale/numpunct_members_generic.cc - CTIME_CC=config/locale/time_members_generic.cc + CLOCALE_H=config/locale/generic/c_locale.h + CLOCALE_CC=config/locale/generic/c_locale.cc + CCODECVT_H=config/locale/generic/codecvt_specializations.h + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/generic/ctype_members.cc + CMESSAGES_H=config/locale/generic/messages_members.h + CMESSAGES_CC=config/locale/generic/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_CC=config/locale/generic/time_members.cc ;; xgnu) AC_MSG_RESULT(gnu) @@ -1169,16 +1169,16 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ AC_SUBST(glibcpp_MOFILES) AC_SUBST(glibcpp_POFILES) - CLOCALE_H=config/locale/c_locale_gnu.h - CLOCALE_CC=config/locale/c_locale_gnu.cc - CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h - CCOLLATE_CC=config/locale/collate_members_gnu.cc - CCTYPE_CC=config/locale/ctype_members_gnu.cc - CMESSAGES_H=config/locale/messages_members_gnu.h - CMESSAGES_CC=config/locale/messages_members_gnu.cc - CMONEY_CC=config/locale/moneypunct_members_gnu.cc - CNUMERIC_CC=config/locale/numpunct_members_gnu.cc - CTIME_CC=config/locale/time_members_gnu.cc + CLOCALE_H=config/locale/gnu/c_locale.h + CLOCALE_CC=config/locale/gnu/c_locale.cc + CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h + CCOLLATE_CC=config/locale/gnu/collate_members.cc + CCTYPE_CC=config/locale/gnu/ctype_members.cc + CMESSAGES_H=config/locale/gnu/messages_members.h + CMESSAGES_CC=config/locale/gnu/messages_members.cc + CMONEY_CC=config/locale/gnu/monetary_members.cc + CNUMERIC_CC=config/locale/gnu/numeric_members.cc + CTIME_CC=config/locale/gnu/time_members.cc ;; xieee_1003.1) AC_MSG_RESULT(generic) @@ -1186,16 +1186,16 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ # Don't use gettext. USE_NLS=no - CLOCALE_H=config/locale/c_locale_ieee_1003.1-200x.h - CLOCALE_CC=config/locale/c_locale_ieee_1003.1-200x.cc - CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h - CCOLLATE_CC=config/locale/collate_members_generic.cc - CCTYPE_CC=config/locale/ctype_members_generic.cc - CMESSAGES_H=config/locale/messages_members_ieee_1003.1-200x.h - CMESSAGES_CC=config/locale/messages_members_ieee_1003.1-200x.cc - CMONEY_CC=config/locale/moneypunct_members_generic.cc - CNUMERIC_CC=config/locale/numpunct_members_generic.cc - CTIME_CC=config/locale/time_members_generic.cc + CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h + CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc + CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/generic/ctype_members.cc + CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h + CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_CC=config/locale/generic/time_members.cc ;; *) echo "$enable_clocale is an unknown locale package" 1>&2 @@ -1216,8 +1216,8 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [ AC_LINK_FILES($CCOLLATE_CC, src/collate.cc) AC_LINK_FILES($CCTYPE_CC, src/ctype.cc) AC_LINK_FILES($CMESSAGES_CC, src/messages.cc) - AC_LINK_FILES($CMONEY_CC, src/moneypunct.cc) - AC_LINK_FILES($CNUMERIC_CC, src/numpunct.cc) + AC_LINK_FILES($CMONEY_CC, src/monetary.cc) + AC_LINK_FILES($CNUMERIC_CC, src/numeric.cc) AC_LINK_FILES($CTIME_CC, src/time.cc) ]) @@ -2139,12 +2139,30 @@ AC_MSG_RESULT($enable_symvers) +#serial 1 +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) + # Add --enable-maintainer-mode option to configure. # From Jim Meyering # serial 1 -AC_DEFUN(AM_MAINTAINER_MODE, +AC_DEFUN([AM_MAINTAINER_MODE], [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, @@ -2161,7 +2179,7 @@ AC_DEFUN(AM_MAINTAINER_MODE, # Define a conditional. -AC_DEFUN(AM_CONDITIONAL, +AC_DEFUN([AM_CONDITIONAL], [AC_SUBST($1_TRUE) AC_SUBST($1_FALSE) if $2; then @@ -2175,14 +2193,42 @@ fi]) # Macro to add for using GNU gettext. # Ulrich Drepper , 1995. # -# This file file be copied and used freely without restrictions. It can +# This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. -# serial 3 - -AC_DEFUN(AM_WITH_NLS, +# serial 9 + +dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]). +dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). Otherwise, a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. +dnl LIBDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_WITH_NLS], [AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, @@ -2191,11 +2237,15 @@ AC_DEFUN(AM_WITH_NLS, AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) + BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no + INTLLIBS= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then - AC_DEFINE(ENABLE_NLS) + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], @@ -2206,85 +2256,74 @@ AC_DEFUN(AM_WITH_NLS, nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then dnl User does not insist on using GNU NLS library. Figure out what - dnl to use. If gettext or catgets are available (in this order) we - dnl use this. Else we have to fall back to GNU NLS library. - dnl catgets is only used if permitted by option --with-catgets. - nls_cv_header_intl= - nls_cv_header_libgt= + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. CATOBJEXT=NONE + dnl Add a version number to the cache macros. + define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc]) + define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl]) + AC_CHECK_HEADER(libintl.h, - [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, - [AC_TRY_LINK([#include ], [return (int) gettext ("")], - gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) - - if test "$gt_cv_func_gettext_libc" != "yes"; then - AC_CHECK_LIB(intl, bindtextdomain, - [AC_CACHE_CHECK([for gettext in libintl], - gt_cv_func_gettext_libintl, - [AC_TRY_LINK([], [return (int) gettext ("")], - gt_cv_func_gettext_libintl=yes, - gt_cv_func_gettext_libintl=no)])]) + [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include +extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $LIBICONV" + AC_TRY_LINK([#include +extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + LIBS="$gt_save_LIBS"]) fi - if test "$gt_cv_func_gettext_libc" = "yes" \ - || test "$gt_cv_func_gettext_libintl" = "yes"; then - AC_DEFINE(HAVE_GETTEXT) - AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl - if test "$MSGFMT" != "no"; then - AC_CHECK_FUNCS(dcgettext) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) - AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; - return _nl_msg_cat_cntr], - [CATOBJEXT=.gmo - DATADIRNAME=share], - [CATOBJEXT=.mo - DATADIRNAME=lib]) - INSTOBJEXT=.mo - fi - fi + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + dnl If iconv() is in a separate libiconv library, then anyone + dnl linking with libintl{.a,.so} also needs to link with + dnl libiconv. + INTLLIBS="-lintl $LIBICONV" + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + LIBS="$gt_save_LIBS" + + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + fi + + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + + CATOBJEXT=.gmo + fi ]) if test "$CATOBJEXT" = "NONE"; then - AC_MSG_CHECKING([whether catgets can be used]) - AC_ARG_WITH(catgets, - [ --with-catgets use catgets functions if available], - nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) - AC_MSG_RESULT($nls_cv_use_catgets) - - if test "$nls_cv_use_catgets" = "yes"; then - dnl No gettext in C library. Try catgets next. - AC_CHECK_LIB(i, main) - AC_CHECK_FUNC(catgets, - [AC_DEFINE(HAVE_CATGETS) - INTLOBJS="\$(CATOBJS)" - AC_PATH_PROG(GENCAT, gencat, no)dnl - if test "$GENCAT" != "no"; then - AC_PATH_PROG(GMSGFMT, gmsgfmt, no) - if test "$GMSGFMT" = "no"; then - AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no) - fi - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) - USE_INCLUDED_LIBINTL=yes - CATOBJEXT=.cat - INSTOBJEXT=.cat - DATADIRNAME=lib - INTLDEPS='$(top_builddir)/intl/libintl.a' - INTLLIBS=$INTLDEPS - LIBS=`echo $LIBS | sed -e 's/-lintl//'` - nls_cv_header_intl=intl/libintl.h - nls_cv_header_libgt=intl/libgettext.h - fi]) - fi - fi - - if test "$CATOBJEXT" = "NONE"; then - dnl Neither gettext nor catgets in included in the C library. + dnl GNU gettext is not found in the C library. dnl Fall back on GNU gettext library. nls_cv_use_gnu_gettext=yes fi @@ -2299,15 +2338,11 @@ AC_DEFUN(AM_WITH_NLS, AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_SUBST(MSGFMT) + BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes CATOBJEXT=.gmo - INSTOBJEXT=.mo - DATADIRNAME=share - INTLDEPS='$(top_builddir)/intl/libintl.a' - INTLLIBS=$INTLDEPS - LIBS=`echo $LIBS | sed -e 's/-lintl//'` - nls_cv_header_intl=intl/libintl.h - nls_cv_header_libgt=intl/libgettext.h + INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi dnl Test whether we really found GNU xgettext. @@ -2318,24 +2353,78 @@ AC_DEFUN(AM_WITH_NLS, : ; else AC_MSG_RESULT( - [found xgettext programs is not GNU xgettext; ignore it]) + [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi - # We need to process the po/ directory. + dnl We need to process the po/ directory. POSUB=po - else - DATADIRNAME=share - nls_cv_header_intl=intl/libintl.h - nls_cv_header_libgt=intl/libgettext.h fi + AC_OUTPUT_COMMANDS( + [for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + echo creating "$ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + echo creating "$ac_dir/Makefile" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + fi + ;; + esac + done]) - # If this is used in GNU gettext we have to set USE_NLS to `yes' - # because some of the sources are only built for this goal. + + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext; then - USE_NLS=yes - USE_INCLUDED_LIBINTL=yes + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: fi dnl These rules are solely for the distribution goal. While doing this @@ -2347,22 +2436,38 @@ AC_DEFUN(AM_WITH_NLS, done dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) - AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) - AC_SUBST(INSTOBJEXT) - AC_SUBST(INTLDEPS) AC_SUBST(INTLLIBS) AC_SUBST(INTLOBJS) AC_SUBST(POFILES) AC_SUBST(POSUB) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) ]) -AC_DEFUN(AM_GNU_GETTEXT, +dnl Usage: Just like AM_WITH_NLS, which see. +AC_DEFUN([AM_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl @@ -2372,21 +2477,18 @@ AC_DEFUN(AM_GNU_GETTEXT, AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([jm_GLIBC21])dnl - AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ -unistd.h values.h sys/param.h]) - AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ -__argz_count __argz_stringify __argz_next]) - - if test "${ac_cv_func_stpcpy+set}" != "set"; then - AC_CHECK_FUNCS(stpcpy) - fi - if test "${ac_cv_func_stpcpy}" = "yes"; then - AC_DEFINE(HAVE_STPCPY) - fi + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + AM_ICONV + AM_LANGINFO_CODESET AM_LC_MESSAGES - AM_WITH_NLS + AM_WITH_NLS([$1],[$2],[$3]) if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then @@ -2394,10 +2496,21 @@ __argz_count __argz_stringify __argz_next]) else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= - for lang in ${LINGUAS=$ALL_LINGUAS}; do - case "$ALL_LINGUAS" in - *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; - esac + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) @@ -2409,47 +2522,8 @@ __argz_count __argz_stringify __argz_next]) fi fi - dnl The reference to in the installed file - dnl must be resolved because we cannot expect the users of this - dnl to define HAVE_LOCALE_H. - if test $ac_cv_header_locale_h = yes; then - INCLUDE_LOCALE_H="#include " - else - INCLUDE_LOCALE_H="\ -/* The system does not provide the header . Take care yourself. */" - fi - AC_SUBST(INCLUDE_LOCALE_H) - - dnl Determine which catalog format we have (if any is needed) - dnl For now we know about two different formats: - dnl Linux libc-5 and the normal X/Open format - test -d intl || mkdir intl - if test "$CATOBJEXT" = ".cat"; then - AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) - - dnl Transform the SED scripts while copying because some dumb SEDs - dnl cannot handle comments. - sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed - fi - dnl po2tbl.sed is always needed. - sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ - $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed - - dnl In the intl/Makefile.in we have a special dependency which makes - dnl only sense for gettext. We comment this out for non-gettext - dnl packages. - if test "$PACKAGE" = "gettext"; then - GT_NO="#NO#" - GT_YES= - else - GT_NO= - GT_YES="#YES#" - fi - AC_SUBST(GT_NO) - AC_SUBST(GT_YES) - dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly - dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then @@ -2460,31 +2534,15 @@ __argz_count __argz_stringify __argz_next]) fi AC_SUBST(MKINSTALLDIRS) - dnl *** For now the libtool support in intl/Makefile is not for real. - l= - AC_SUBST(l) - - dnl Generate list of files to be processed by xgettext which will - dnl be included in po/Makefile. - test -d po || mkdir po - if test "x$srcdir" != "x."; then - if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then - posrcprefix="$srcdir/" - else - posrcprefix="../$srcdir/" - fi - else - posrcprefix="../" - fi - rm -f po/POTFILES - sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ - < $srcdir/po/POTFILES.in > po/POTFILES + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) # Search path for a program which passes the given test. # Ulrich Drepper , 1996. # -# This file file be copied and used freely without restrictions. It can +# This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. @@ -2493,7 +2551,7 @@ __argz_count __argz_stringify __argz_next]) dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN(AM_PATH_PROG_WITH_TEST, +AC_DEFUN([AM_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) @@ -2529,24 +2587,139 @@ fi AC_SUBST($1)dnl ]) +#serial 2 + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) + +#serial AM2 + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + AC_ARG_WITH([libiconv-prefix], +[ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [ + for dir in `echo "$withval" | tr : ' '`; do + if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi + if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi + done + ]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS -liconv" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi + LIBICONV= + if test "$am_cv_lib_iconv" = yes; then + LIBICONV="-liconv" + fi + AC_SUBST(LIBICONV) +]) + +#serial AM1 + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) + # Check whether LC_MESSAGES is available in . # Ulrich Drepper , 1995. # -# This file file be copied and used freely without restrictions. It can +# This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. -# serial 1 +# serial 2 -AC_DEFUN(AM_LC_MESSAGES, +AC_DEFUN([AM_LC_MESSAGES], [if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, - [Define if your locale.h file contains LC_MESSAGES.]) + [Define if your file defines LC_MESSAGES.]) fi fi]) @@ -2559,7 +2732,7 @@ AC_DEFUN(AM_LC_MESSAGES, dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) -AC_DEFUN(AM_INIT_AUTOMAKE, +AC_DEFUN([AM_INIT_AUTOMAKE], [AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) @@ -2587,7 +2760,7 @@ AC_REQUIRE([AC_PROG_MAKE_SET])]) # Check to make sure that the build environment is sane. # -AC_DEFUN(AM_SANITY_CHECK, +AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 @@ -2628,7 +2801,7 @@ AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. -AC_DEFUN(AM_MISSING_PROG, +AC_DEFUN([AM_MISSING_PROG], [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. @@ -2644,7 +2817,7 @@ AC_SUBST($1)]) # Like AC_CONFIG_HEADER, but automatically create stamp file. -AC_DEFUN(AM_CONFIG_HEADER, +AC_DEFUN([AM_CONFIG_HEADER], [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. diff --git a/libstdc++-v3/config/locale/c_locale_generic.cc b/libstdc++-v3/config/locale/c_locale_generic.cc deleted file mode 100644 index 245b5b23f80..00000000000 --- a/libstdc++-v3/config/locale/c_locale_generic.cc +++ /dev/null @@ -1,219 +0,0 @@ -// Wrapper for underlying C-language localization -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.8 Standard locale categories. -// - -// Written by Benjamin Kosnik - -#include - -#ifdef _GLIBCPP_HAVE_IEEEFP_H -#include -#endif - -namespace std -{ - // Specializations for all types used in num_get. - template<> - void - __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, - const __c_locale&, int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - long __l = strtol(__s, &__sanity, __base); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __l; - else - __err |= ios_base::failbit; - } - } - - template<> - void - __convert_to_v(const char* __s, unsigned long& __v, - ios_base::iostate& __err, const __c_locale&, int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - unsigned long __ul = strtoul(__s, &__sanity, __base); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ul; - else - __err |= ios_base::failbit; - } - } - -#ifdef _GLIBCPP_USE_LONG_LONG - template<> - void - __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, - const __c_locale&, int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - long long __ll = strtoll(__s, &__sanity, __base); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ll; - else - __err |= ios_base::failbit; - } - } - - template<> - void - __convert_to_v(const char* __s, unsigned long long& __v, - ios_base::iostate& __err, const __c_locale&, int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - unsigned long long __ull = strtoull(__s, &__sanity, __base); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ull; - else - __err |= ios_base::failbit; - } - } -#endif - - template<> - void - __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, - const __c_locale&, int) - { - if (!(__err & ios_base::failbit)) - { - // Assumes __s formatted for "C" locale. - const char* __old = setlocale(LC_ALL, "C"); - char* __sanity; - errno = 0; -#if defined(_GLIBCPP_USE_C99) - float __f = strtof(__s, &__sanity); -#else - double __d = strtod(__s, &__sanity); - float __f = static_cast(__d); -#ifdef _GLIBCPP_HAVE_FINITEF - if (!finitef (__f)) - errno = ERANGE; -#elif defined (_GLIBCPP_HAVE_FINITE) - if (!finite (static_cast (__f))) - errno = ERANGE; -#elif defined (_GLIBCPP_HAVE_ISINF) - if (isinf (static_cast (__f))) - errno = ERANGE; -#else - if (fabs(__d) > numeric_limits::max()) - errno = ERANGE; -#endif -#endif - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __f; - else - __err |= ios_base::failbit; - setlocale(LC_ALL, __old); - } - } - - template<> - void - __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, - const __c_locale&, int) - { - if (!(__err & ios_base::failbit)) - { - // Assumes __s formatted for "C" locale. - const char* __old = setlocale(LC_ALL, "C"); - char* __sanity; - errno = 0; - double __d = strtod(__s, &__sanity); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __d; - else - __err |= ios_base::failbit; - setlocale(LC_ALL, __old); - } - } - - template<> - void - __convert_to_v(const char* __s, long double& __v, - ios_base::iostate& __err, const __c_locale&, int) - { - if (!(__err & ios_base::failbit)) - { - // Assumes __s formatted for "C" locale. - const char* __old = setlocale(LC_ALL, "C"); -#if defined(_GLIBCPP_USE_C99) - char* __sanity; - errno = 0; - long double __ld = strtold(__s, &__sanity); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ld; -#else - typedef char_traits::int_type int_type; - long double __ld; - errno = 0; - int __p = sscanf(__s, "%Lf", &__ld); - if (errno == ERANGE) - __p = 0; -#ifdef _GLIBCPP_HAVE_FINITEL - if ((__p == 1) && !finitel (__ld)) - __p = 0; -#endif - if (__p && static_cast(__p) != char_traits::eof()) - __v = __ld; -#endif - else - __err |= ios_base::failbit; - setlocale(LC_ALL, __old); - } - } - - void - locale::facet::_S_create_c_locale(__c_locale& __cloc, const char*) - { __cloc = NULL; } - - void - locale::facet::_S_destroy_c_locale(__c_locale&) - { } - - __c_locale - locale::facet::_S_clone_c_locale(__c_locale&) - { return __c_locale(); } -} // namespace std diff --git a/libstdc++-v3/config/locale/c_locale_generic.h b/libstdc++-v3/config/locale/c_locale_generic.h deleted file mode 100644 index 0fc9a250c02..00000000000 --- a/libstdc++-v3/config/locale/c_locale_generic.h +++ /dev/null @@ -1,41 +0,0 @@ -// Wrapper for underlying C-language localization -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.8 Standard locale categories. -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - typedef int* __c_locale; -} diff --git a/libstdc++-v3/config/locale/c_locale_gnu.cc b/libstdc++-v3/config/locale/c_locale_gnu.cc deleted file mode 100644 index 62290901141..00000000000 --- a/libstdc++-v3/config/locale/c_locale_gnu.cc +++ /dev/null @@ -1,188 +0,0 @@ -// Wrapper for underlying C-language localization -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.8 Standard locale categories. -// - -// Written by Benjamin Kosnik - -#include -#include -#include - -namespace std -{ - template<> - void - __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, - const __c_locale& __cloc, int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - long __l = __strtol_l(__s, &__sanity, __base, __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __l; - else - __err |= ios_base::failbit; - } - } - - template<> - void - __convert_to_v(const char* __s, unsigned long& __v, - ios_base::iostate& __err, const __c_locale& __cloc, - int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ul; - else - __err |= ios_base::failbit; - } - } - -#ifdef _GLIBCPP_USE_LONG_LONG - template<> - void - __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, - const __c_locale& __cloc, int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ll; - else - __err |= ios_base::failbit; - } - } - - template<> - void - __convert_to_v(const char* __s, unsigned long long& __v, - ios_base::iostate& __err, const __c_locale& __cloc, - int __base) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - unsigned long long __ull = __strtoull_l(__s, &__sanity, __base, - __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ull; - else - __err |= ios_base::failbit; - } - } -#endif - - template<> - void - __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, - const __c_locale& __cloc, int) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - float __f = __strtof_l(__s, &__sanity, __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __f; - else - __err |= ios_base::failbit; - } - } - - template<> - void - __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, - const __c_locale& __cloc, int) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - double __d = __strtod_l(__s, &__sanity, __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __d; - else - __err |= ios_base::failbit; - } - } - - template<> - void - __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err, - const __c_locale& __cloc, int) - { - if (!(__err & ios_base::failbit)) - { - char* __sanity; - errno = 0; - long double __ld = __strtold_l(__s, &__sanity, __cloc); - if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) - __v = __ld; - else - __err |= ios_base::failbit; - } - } - - void - locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s) - { - // XXX - // Perhaps locale::categories could be made equivalent to LC_*_MASK ? - // _M_c_locale = __newlocale(1 << LC_ALL, __s, 0); - // _M_c_locale = __newlocale(locale::all, __s, 0); - __cloc = __newlocale(1 << LC_ALL, __s, 0); - if (!__cloc) - { - // This named locale is not supported by the underlying OS. - __throw_runtime_error("attempt to create locale from unknown name"); - } - } - - void - locale::facet::_S_destroy_c_locale(__c_locale& __cloc) - { __freelocale(__cloc); } - - __c_locale - locale::facet::_S_clone_c_locale(__c_locale& __cloc) - { return __duplocale(__cloc); } -} // namespace std diff --git a/libstdc++-v3/config/locale/c_locale_gnu.h b/libstdc++-v3/config/locale/c_locale_gnu.h deleted file mode 100644 index 3ce1781e23b..00000000000 --- a/libstdc++-v3/config/locale/c_locale_gnu.h +++ /dev/null @@ -1,46 +0,0 @@ -// Wrapper for underlying C-language localization -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.8 Standard locale categories. -// - -// Written by Benjamin Kosnik - -#include -#include // For codecvt -#include // For codecvt using iconv, iconv_t -#include // For messages - -#define _GLIBCPP_C_LOCALE_GNU 1 - -namespace std -{ - typedef __locale_t __c_locale; -} diff --git a/libstdc++-v3/config/locale/c_locale_ieee_1003.1-200x.cc b/libstdc++-v3/config/locale/c_locale_ieee_1003.1-200x.cc deleted file mode 100644 index 493ac014208..00000000000 --- a/libstdc++-v3/config/locale/c_locale_ieee_1003.1-200x.cc +++ /dev/null @@ -1,112 +0,0 @@ -// Wrapper for underlying C-language localization -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.8 Standard locale categories. -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - void - locale::facet::_S_create_c_locale(__c_locale&, const char*) - { } - - void - locale::facet::_S_destroy_c_locale(__c_locale&) - { } - - __c_locale - locale::facet::_S_clone_c_locale(__c_locale&) - { return __c_locale(); } - - template<> - void - numpunct::_M_initialize_numpunct(__c_locale) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_truename = "true"; - _M_falsename = "false"; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - numpunct::_M_initialize_numpunct(__c_locale) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_truename = L"true"; - _M_falsename = L"false"; - } -#endif - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } -#endif -} // namespace std - diff --git a/libstdc++-v3/config/locale/c_locale_ieee_1003.1-200x.h b/libstdc++-v3/config/locale/c_locale_ieee_1003.1-200x.h deleted file mode 100644 index bbfb85eb9e6..00000000000 --- a/libstdc++-v3/config/locale/c_locale_ieee_1003.1-200x.h +++ /dev/null @@ -1,49 +0,0 @@ -// Wrapper for underlying C-language localization -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.8 Standard locale categories. -// - -// Written by Benjamin Kosnik - -#include -#include // For codecvt -#include // For codecvt using iconv, iconv_t -#include // For messages - -namespace std -{ - typedef __locale_t __c_locale; -} - - - - - diff --git a/libstdc++-v3/config/locale/codecvt_specializations_generic.h b/libstdc++-v3/config/locale/codecvt_specializations_generic.h deleted file mode 100644 index 24db4c84dc2..00000000000 --- a/libstdc++-v3/config/locale/codecvt_specializations_generic.h +++ /dev/null @@ -1,38 +0,0 @@ -// Locale support (codecvt) -*- C++ -*- - -// Copyright (C) 2000, 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.1.5 Template class codecvt -// - -// Warning: this file is not meant for user inclusion. Use . - -// Written by Benjamin Kosnik - -// XXX dummy file diff --git a/libstdc++-v3/config/locale/codecvt_specializations_ieee_1003.1-200x.h b/libstdc++-v3/config/locale/codecvt_specializations_ieee_1003.1-200x.h deleted file mode 100644 index 8cac2995d48..00000000000 --- a/libstdc++-v3/config/locale/codecvt_specializations_ieee_1003.1-200x.h +++ /dev/null @@ -1,481 +0,0 @@ -// Locale support (codecvt) -*- C++ -*- - -// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.1.5 Template class codecvt -// - -// Warning: this file is not meant for user inclusion. Use . - -// Written by Benjamin Kosnik - - // XXX - // Define this here to codecvt.cc can have _S_max_size definition. -#define _GLIBCPP_USE___ENC_TRAITS 1 - -#if _GLIBCPP_USE_SHADOW_HEADERS - using _C_legacy::CODESET; -#endif - - // Extension to use icov for dealing with character encodings, - // including conversions and comparisons between various character - // sets. This object encapsulates data that may need to be shared between - // char_traits, codecvt and ctype. - class __enc_traits - { - public: - // Types: - // NB: A conversion descriptor subsumes and enhances the - // functionality of a simple state type such as mbstate_t. - typedef iconv_t __desc_type; - - protected: - // Data Members: - // Max size of charset encoding name - static const int _S_max_size = 32; - // Name of internal character set encoding. - char _M_int_enc[_S_max_size]; - // Name of external character set encoding. - char _M_ext_enc[_S_max_size]; - - // Conversion descriptor between external encoding to internal encoding. - __desc_type _M_in_desc; - // Conversion descriptor between internal encoding to external encoding. - __desc_type _M_out_desc; - - // Details the byte-order marker for the external encoding, if necessary. - int _M_ext_bom; - - // Details the byte-order marker for the internal encoding, if necessary. - int _M_int_bom; - - public: - explicit __enc_traits() - : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) - { - memset(_M_int_enc, 0, _S_max_size); - memset(_M_ext_enc, 0, _S_max_size); - } - - explicit __enc_traits(const locale& __loc) - : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) - { - // __intc_end = whatever we are using internally, which is - // UCS4 (linux, solaris) - // UCS2 == UNICODE (microsoft, java, aix, whatever...) - // XXX Currently don't know how to get this data from target system... - strcpy(_M_int_enc, "UCS4"); - - // __extc_end = external codeset in current locale - // XXX There has got to be a better way to do this. - __c_locale __cloc; - locale::facet::_S_create_c_locale(__cloc, __loc.name().c_str()); - strcpy(_M_ext_enc, __nl_langinfo_l(CODESET, __cloc)); - locale::facet::_S_destroy_c_locale(__cloc); - } - - explicit __enc_traits(const char* __int, const char* __ext, - int __ibom = 0, int __ebom = 0) - : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) - { - strncpy(_M_int_enc, __int, _S_max_size); - strncpy(_M_ext_enc, __ext, _S_max_size); - } - - // 21.1.2 traits typedefs - // p4 - // typedef STATE_T state_type - // requires: state_type shall meet the requirements of - // CopyConstructible types (20.1.3) - __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0) - { - strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size); - strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size); - _M_ext_bom = __obj._M_ext_bom; - _M_int_bom = __obj._M_int_bom; - } - - // Need assignment operator as well. - __enc_traits& - operator=(const __enc_traits& __obj) - { - strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size); - strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size); - _M_in_desc = 0; - _M_out_desc = 0; - _M_ext_bom = __obj._M_ext_bom; - _M_int_bom = __obj._M_int_bom; - } - - ~__enc_traits() - { - __desc_type __err = reinterpret_cast(-1); - if (_M_in_desc && _M_in_desc != __err) - iconv_close(_M_in_desc); - if (_M_out_desc && _M_out_desc != __err) - iconv_close(_M_out_desc); - } - - void - _M_init() - { - const __desc_type __err = reinterpret_cast(-1); - if (!_M_in_desc) - { - _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc); - if (_M_in_desc == __err) - __throw_runtime_error("creating iconv input descriptor failed."); - } - if (!_M_out_desc) - { - _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc); - if (_M_out_desc == __err) - __throw_runtime_error("creating iconv output descriptor failed."); - } - } - - bool - _M_good() - { - const __desc_type __err = reinterpret_cast(-1); - bool __test = _M_in_desc && _M_in_desc != __err; - __test &= _M_out_desc && _M_out_desc != __err; - return __test; - } - - const __desc_type* - _M_get_in_descriptor() - { return &_M_in_desc; } - - const __desc_type* - _M_get_out_descriptor() - { return &_M_out_desc; } - - int - _M_get_external_bom() - { return _M_ext_bom; } - - int - _M_get_internal_bom() - { return _M_int_bom; } - - const char* - _M_get_internal_enc() - { return _M_int_enc; } - - const char* - _M_get_external_enc() - { return _M_ext_enc; } - }; - - // Partial specialization - // This specialization takes advantage of iconv to provide code - // conversions between a large number of character encodings. - template - class codecvt<_InternT, _ExternT, __enc_traits> - : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits> - { - public: - // Types: - typedef codecvt_base::result result; - typedef _InternT intern_type; - typedef _ExternT extern_type; - typedef __enc_traits state_type; - typedef __enc_traits::__desc_type __desc_type; - typedef __enc_traits __enc_type; - - // Data Members: - static locale::id id; - - explicit - codecvt(size_t __refs = 0) - : __codecvt_abstract_base(__refs) - { } - - explicit - codecvt(__enc_type* __enc, size_t __refs = 0) - : __codecvt_abstract_base(__refs) - { } - - protected: - virtual - ~codecvt() { } - - virtual result - do_out(state_type& __state, const intern_type* __from, - const intern_type* __from_end, const intern_type*& __from_next, - extern_type* __to, extern_type* __to_end, - extern_type*& __to_next) const; - - virtual result - do_unshift(state_type& __state, extern_type* __to, - extern_type* __to_end, extern_type*& __to_next) const; - - virtual result - do_in(state_type& __state, const extern_type* __from, - const extern_type* __from_end, const extern_type*& __from_next, - intern_type* __to, intern_type* __to_end, - intern_type*& __to_next) const; - - virtual int - do_encoding() const throw(); - - virtual bool - do_always_noconv() const throw(); - - virtual int - do_length(const state_type&, const extern_type* __from, - const extern_type* __end, size_t __max) const; - - virtual int - do_max_length() const throw(); - }; - - template - locale::id - codecvt<_InternT, _ExternT, __enc_traits>::id; - - // This adaptor works around the signature problems of the second - // argument to iconv(): SUSv2 and others use 'const char**', but glibc 2.2 - // uses 'char**', which matches the POSIX 1003.1-2001 standard. - // Using this adaptor, g++ will do the work for us. - template - inline size_t - __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*), - iconv_t __cd, char** __inbuf, size_t* __inbytes, - char** __outbuf, size_t* __outbytes) - { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); } - - template - codecvt_base::result - codecvt<_InternT, _ExternT, __enc_traits>:: - do_out(state_type& __state, const intern_type* __from, - const intern_type* __from_end, const intern_type*& __from_next, - extern_type* __to, extern_type* __to_end, - extern_type*& __to_next) const - { - result __ret = error; - if (__state._M_good()) - { - typedef state_type::__desc_type __desc_type; - const __desc_type* __desc = __state._M_get_out_descriptor(); - const size_t __fmultiple = sizeof(intern_type) / sizeof(char); - size_t __fbytes = __fmultiple * (__from_end - __from); - const size_t __tmultiple = sizeof(extern_type) / sizeof(char); - size_t __tbytes = __tmultiple * (__to_end - __to); - - // Argument list for iconv specifies a byte sequence. Thus, - // all to/from arrays must be brutally casted to char*. - char* __cto = reinterpret_cast(__to); - char* __cfrom; - size_t __conv; - - // Some encodings need a byte order marker as the first item - // in the byte stream, to designate endian-ness. The default - // value for the byte order marker is NULL, so if this is - // the case, it's not necessary and we can just go on our - // merry way. - int __int_bom = __state._M_get_internal_bom(); - if (__int_bom) - { - size_t __size = __from_end - __from; - intern_type* __cfixed = static_cast(__builtin_alloca(sizeof(intern_type) * (__size + 1))); - __cfixed[0] = static_cast(__int_bom); - char_traits::copy(__cfixed + 1, __from, __size); - __cfrom = reinterpret_cast(__cfixed); - __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, - &__fbytes, &__cto, &__tbytes); - } - else - { - intern_type* __cfixed = const_cast(__from); - __cfrom = reinterpret_cast(__cfixed); - __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes, - &__cto, &__tbytes); - } - - if (__conv != size_t(-1)) - { - __from_next = reinterpret_cast(__cfrom); - __to_next = reinterpret_cast(__cto); - __ret = ok; - } - else - { - if (__fbytes < __fmultiple * (__from_end - __from)) - { - __from_next = reinterpret_cast(__cfrom); - __to_next = reinterpret_cast(__cto); - __ret = partial; - } - else - __ret = error; - } - } - return __ret; - } - - template - codecvt_base::result - codecvt<_InternT, _ExternT, __enc_traits>:: - do_unshift(state_type& __state, extern_type* __to, - extern_type* __to_end, extern_type*& __to_next) const - { - result __ret = error; - if (__state._M_good()) - { - typedef state_type::__desc_type __desc_type; - const __desc_type* __desc = __state._M_get_in_descriptor(); - const size_t __tmultiple = sizeof(intern_type) / sizeof(char); - size_t __tlen = __tmultiple * (__to_end - __to); - - // Argument list for iconv specifies a byte sequence. Thus, - // all to/from arrays must be brutally casted to char*. - char* __cto = reinterpret_cast(__to); - size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL, - &__cto, &__tlen); - - if (__conv != size_t(-1)) - { - __to_next = reinterpret_cast(__cto); - if (__tlen == __tmultiple * (__to_end - __to)) - __ret = noconv; - else if (__tlen == 0) - __ret = ok; - else - __ret = partial; - } - else - __ret = error; - } - return __ret; - } - - template - codecvt_base::result - codecvt<_InternT, _ExternT, __enc_traits>:: - do_in(state_type& __state, const extern_type* __from, - const extern_type* __from_end, const extern_type*& __from_next, - intern_type* __to, intern_type* __to_end, - intern_type*& __to_next) const - { - result __ret = error; - if (__state._M_good()) - { - typedef state_type::__desc_type __desc_type; - const __desc_type* __desc = __state._M_get_in_descriptor(); - const size_t __fmultiple = sizeof(extern_type) / sizeof(char); - size_t __flen = __fmultiple * (__from_end - __from); - const size_t __tmultiple = sizeof(intern_type) / sizeof(char); - size_t __tlen = __tmultiple * (__to_end - __to); - - // Argument list for iconv specifies a byte sequence. Thus, - // all to/from arrays must be brutally casted to char*. - char* __cto = reinterpret_cast(__to); - char* __cfrom; - size_t __conv; - - // Some encodings need a byte order marker as the first item - // in the byte stream, to designate endian-ness. The default - // value for the byte order marker is NULL, so if this is - // the case, it's not necessary and we can just go on our - // merry way. - int __ext_bom = __state._M_get_external_bom(); - if (__ext_bom) - { - size_t __size = __from_end - __from; - extern_type* __cfixed = static_cast(__builtin_alloca(sizeof(extern_type) * (__size + 1))); - __cfixed[0] = static_cast(__ext_bom); - char_traits::copy(__cfixed + 1, __from, __size); - __cfrom = reinterpret_cast(__cfixed); - __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, - &__flen, &__cto, &__tlen); - } - else - { - extern_type* __cfixed = const_cast(__from); - __cfrom = reinterpret_cast(__cfixed); - __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, - &__flen, &__cto, &__tlen); - } - - - if (__conv != size_t(-1)) - { - __from_next = reinterpret_cast(__cfrom); - __to_next = reinterpret_cast(__cto); - __ret = ok; - } - else - { - if (__flen < static_cast(__from_end - __from)) - { - __from_next = reinterpret_cast(__cfrom); - __to_next = reinterpret_cast(__cto); - __ret = partial; - } - else - __ret = error; - } - } - return __ret; - } - - template - int - codecvt<_InternT, _ExternT, __enc_traits>:: - do_encoding() const throw() - { - int __ret = 0; - if (sizeof(_ExternT) <= sizeof(_InternT)) - __ret = sizeof(_InternT)/sizeof(_ExternT); - return __ret; - } - - template - bool - codecvt<_InternT, _ExternT, __enc_traits>:: - do_always_noconv() const throw() - { return false; } - - template - int - codecvt<_InternT, _ExternT, __enc_traits>:: - do_length(const state_type&, const extern_type* __from, - const extern_type* __end, size_t __max) const - { return min(__max, static_cast(__end - __from)); } - -#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS -// 74. Garbled text for codecvt::do_max_length - template - int - codecvt<_InternT, _ExternT, __enc_traits>:: - do_max_length() const throw() - { return 1; } -#endif diff --git a/libstdc++-v3/config/locale/collate_members_generic.cc b/libstdc++-v3/config/locale/collate_members_generic.cc deleted file mode 100644 index 0abd784378a..00000000000 --- a/libstdc++-v3/config/locale/collate_members_generic.cc +++ /dev/null @@ -1,67 +0,0 @@ -// std::collate implementation details, generic version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.4.1.2 collate virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // These are basically extensions to char_traits, and perhaps should - // be put there instead of here. - template<> - int - collate::_M_compare_helper(const char* __one, - const char* __two) const - { return strcoll(__one, __two); } - - template<> - size_t - collate::_M_transform_helper(char* __to, const char* __from, - size_t __n) const - { return strxfrm(__to, __from, __n); } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - int - collate::_M_compare_helper(const wchar_t* __one, - const wchar_t* __two) const - { return wcscoll(__one, __two); } - - template<> - size_t - collate::_M_transform_helper(wchar_t* __to, const wchar_t* __from, - size_t __n) const - { return wcsxfrm(__to, __from, __n); } -#endif -} diff --git a/libstdc++-v3/config/locale/collate_members_gnu.cc b/libstdc++-v3/config/locale/collate_members_gnu.cc deleted file mode 100644 index 8e3952e5837..00000000000 --- a/libstdc++-v3/config/locale/collate_members_gnu.cc +++ /dev/null @@ -1,67 +0,0 @@ -// std::collate implementation details, GNU version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.4.1.2 collate virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // These are basically extensions to char_traits, and perhaps should - // be put there instead of here. - template<> - int - collate::_M_compare_helper(const char* __one, - const char* __two) const - { return __strcoll_l(__one, __two, _M_c_locale_collate); } - - template<> - size_t - collate::_M_transform_helper(char* __to, const char* __from, - size_t __n) const - { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - int - collate::_M_compare_helper(const wchar_t* __one, - const wchar_t* __two) const - { return __wcscoll_l(__one, __two, _M_c_locale_collate); } - - template<> - size_t - collate::_M_transform_helper(wchar_t* __to, const wchar_t* __from, - size_t __n) const - { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); } -#endif -} diff --git a/libstdc++-v3/config/locale/ctype_members_generic.cc b/libstdc++-v3/config/locale/ctype_members_generic.cc deleted file mode 100644 index 5a66484f199..00000000000 --- a/libstdc++-v3/config/locale/ctype_members_generic.cc +++ /dev/null @@ -1,195 +0,0 @@ -// std::ctype implementation details, generic version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // NB: The other ctype specializations are in src/locale.cc and - // various /config/os/* files. - template<> - ctype_byname::ctype_byname(const char* __s, size_t __refs) - : ctype(0, false, __refs) - { - _S_destroy_c_locale(_M_c_locale_ctype); - _S_create_c_locale(_M_c_locale_ctype, __s); - } - -#ifdef _GLIBCPP_USE_WCHAR_T - ctype::__wmask_type - ctype::_M_convert_to_wmask(const mask __m) const - { - __wmask_type __ret; - switch (__m) - { - case space: - __ret = wctype("space"); - break; - case print: - __ret = wctype("print"); - break; - case cntrl: - __ret = wctype("cntrl"); - break; - case upper: - __ret = wctype("upper"); - break; - case lower: - __ret = wctype("lower"); - break; - case alpha: - __ret = wctype("alpha"); - break; - case digit: - __ret = wctype("digit"); - break; - case punct: - __ret = wctype("punct"); - break; - case xdigit: - __ret = wctype("xdigit"); - break; - case alnum: - __ret = wctype("alnum"); - break; - case graph: - __ret = wctype("graph"); - break; - default: - __ret = 0; - } - return __ret; - }; - - wchar_t - ctype::do_toupper(wchar_t __c) const - { return towupper(__c); } - - const wchar_t* - ctype::do_toupper(wchar_t* __lo, const wchar_t* __hi) const - { - while (__lo < __hi) - { - *__lo = towupper(*__lo); - ++__lo; - } - return __hi; - } - - wchar_t - ctype::do_tolower(wchar_t __c) const - { return towlower(__c); } - - const wchar_t* - ctype::do_tolower(wchar_t* __lo, const wchar_t* __hi) const - { - while (__lo < __hi) - { - *__lo = towlower(*__lo); - ++__lo; - } - return __hi; - } - - bool - ctype:: - do_is(mask __m, char_type __c) const - { return static_cast(iswctype(__c, _M_convert_to_wmask(__m))); } - - const wchar_t* - ctype:: - do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const - { - while (__lo < __hi && !this->do_is(*__m, *__lo)) - ++__lo; - return __lo; - } - - const wchar_t* - ctype:: - do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const - { - while (__lo < __hi && !this->do_is(__m, *__lo)) - ++__lo; - return __lo; - } - - const wchar_t* - ctype:: - do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const - { - while (__lo < __hi && this->do_is(__m, *__lo) != 0) - ++__lo; - return __lo; - } - - wchar_t - ctype:: - do_widen(char __c) const - { return btowc(__c); } - - const char* - ctype:: - do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const - { - mbstate_t __state; - memset(static_cast(&__state), 0, sizeof(mbstate_t)); - mbsrtowcs(__dest, &__lo, __hi - __lo, &__state); - return __hi; - } - - char - ctype:: - do_narrow(wchar_t __wc, char __dfault) const - { - int __c = wctob(__wc); - return (__c == EOF ? __dfault : static_cast(__c)); - } - - const wchar_t* - ctype:: - do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, - char* __dest) const - { - mbstate_t __state; - memset(static_cast(&__state), 0, sizeof(mbstate_t)); - size_t __len = __hi - __lo; - size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state); - if (__conv == __len) - *__dest = __dfault; - return __hi; - } -#endif // _GLIBCPP_USE_WCHAR_T -} diff --git a/libstdc++-v3/config/locale/ctype_members_gnu.cc b/libstdc++-v3/config/locale/ctype_members_gnu.cc deleted file mode 100644 index 33540c948f2..00000000000 --- a/libstdc++-v3/config/locale/ctype_members_gnu.cc +++ /dev/null @@ -1,200 +0,0 @@ -// std::ctype implementation details, GNU version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // NB: The other ctype specializations are in src/locale.cc and - // various /config/os/* files. - template<> - ctype_byname::ctype_byname(const char* __s, size_t __refs) - : ctype(0, false, __refs) - { - if (_M_c_locale_ctype) - _S_destroy_c_locale(_M_c_locale_ctype); - _S_create_c_locale(_M_c_locale_ctype, __s); - _M_toupper = _M_c_locale_ctype->__ctype_toupper; - _M_tolower = _M_c_locale_ctype->__ctype_tolower; - _M_table = _M_c_locale_ctype->__ctype_b; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - ctype::__wmask_type - ctype::_M_convert_to_wmask(const mask __m) const - { - __wmask_type __ret; - switch (__m) - { - case space: - __ret = __wctype_l("space", _M_c_locale_ctype); - break; - case print: - __ret = __wctype_l("print", _M_c_locale_ctype); - break; - case cntrl: - __ret = __wctype_l("cntrl", _M_c_locale_ctype); - break; - case upper: - __ret = __wctype_l("upper", _M_c_locale_ctype); - break; - case lower: - __ret = __wctype_l("lower", _M_c_locale_ctype); - break; - case alpha: - __ret = __wctype_l("alpha", _M_c_locale_ctype); - break; - case digit: - __ret = __wctype_l("digit", _M_c_locale_ctype); - break; - case punct: - __ret = __wctype_l("punct", _M_c_locale_ctype); - break; - case xdigit: - __ret = __wctype_l("xdigit", _M_c_locale_ctype); - break; - case alnum: - __ret = __wctype_l("alnum", _M_c_locale_ctype); - break; - case graph: - __ret = __wctype_l("graph", _M_c_locale_ctype); - break; - default: - __ret = 0; - } - return __ret; - }; - - wchar_t - ctype::do_toupper(wchar_t __c) const - { return __towupper_l(__c, _M_c_locale_ctype); } - - const wchar_t* - ctype::do_toupper(wchar_t* __lo, const wchar_t* __hi) const - { - while (__lo < __hi) - { - *__lo = __towupper_l(*__lo, _M_c_locale_ctype); - ++__lo; - } - return __hi; - } - - wchar_t - ctype::do_tolower(wchar_t __c) const - { return __towlower_l(__c, _M_c_locale_ctype); } - - const wchar_t* - ctype::do_tolower(wchar_t* __lo, const wchar_t* __hi) const - { - while (__lo < __hi) - { - *__lo = __towlower_l(*__lo, _M_c_locale_ctype); - ++__lo; - } - return __hi; - } - - bool - ctype:: - do_is(mask __m, char_type __c) const - { return static_cast(__iswctype_l(__c, _M_convert_to_wmask(__m), - _M_c_locale_ctype)); } - - const wchar_t* - ctype:: - do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const - { - while (__lo < __hi && !this->do_is(*__m, *__lo)) - ++__lo; - return __lo; - } - - const wchar_t* - ctype:: - do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const - { - while (__lo < __hi && !this->do_is(__m, *__lo)) - ++__lo; - return __lo; - } - - const wchar_t* - ctype:: - do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const - { - while (__lo < __hi && this->do_is(__m, *__lo) != 0) - ++__lo; - return __lo; - } - - wchar_t - ctype:: - do_widen(char __c) const - { return btowc(__c); } - - const char* - ctype:: - do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const - { - mbstate_t __state; - memset(static_cast(&__state), 0, sizeof(mbstate_t)); - mbsrtowcs(__dest, &__lo, __hi - __lo, &__state); - return __hi; - } - - char - ctype:: - do_narrow(wchar_t __wc, char __dfault) const - { - int __c = wctob(__wc); - return (__c == EOF ? __dfault : static_cast(__c)); - } - - const wchar_t* - ctype:: - do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, - char* __dest) const - { - mbstate_t __state; - memset(static_cast(&__state), 0, sizeof(mbstate_t)); - size_t __len = __hi - __lo; - size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state); - if (__conv == __len) - *__dest = __dfault; - return __hi; - } -#endif // _GLIBCPP_USE_WCHAR_T -} diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc new file mode 100644 index 00000000000..245b5b23f80 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/c_locale.cc @@ -0,0 +1,219 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include + +#ifdef _GLIBCPP_HAVE_IEEEFP_H +#include +#endif + +namespace std +{ + // Specializations for all types used in num_get. + template<> + void + __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, + const __c_locale&, int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + long __l = strtol(__s, &__sanity, __base); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __l; + else + __err |= ios_base::failbit; + } + } + + template<> + void + __convert_to_v(const char* __s, unsigned long& __v, + ios_base::iostate& __err, const __c_locale&, int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + unsigned long __ul = strtoul(__s, &__sanity, __base); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ul; + else + __err |= ios_base::failbit; + } + } + +#ifdef _GLIBCPP_USE_LONG_LONG + template<> + void + __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, + const __c_locale&, int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + long long __ll = strtoll(__s, &__sanity, __base); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ll; + else + __err |= ios_base::failbit; + } + } + + template<> + void + __convert_to_v(const char* __s, unsigned long long& __v, + ios_base::iostate& __err, const __c_locale&, int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + unsigned long long __ull = strtoull(__s, &__sanity, __base); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ull; + else + __err |= ios_base::failbit; + } + } +#endif + + template<> + void + __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, + const __c_locale&, int) + { + if (!(__err & ios_base::failbit)) + { + // Assumes __s formatted for "C" locale. + const char* __old = setlocale(LC_ALL, "C"); + char* __sanity; + errno = 0; +#if defined(_GLIBCPP_USE_C99) + float __f = strtof(__s, &__sanity); +#else + double __d = strtod(__s, &__sanity); + float __f = static_cast(__d); +#ifdef _GLIBCPP_HAVE_FINITEF + if (!finitef (__f)) + errno = ERANGE; +#elif defined (_GLIBCPP_HAVE_FINITE) + if (!finite (static_cast (__f))) + errno = ERANGE; +#elif defined (_GLIBCPP_HAVE_ISINF) + if (isinf (static_cast (__f))) + errno = ERANGE; +#else + if (fabs(__d) > numeric_limits::max()) + errno = ERANGE; +#endif +#endif + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __f; + else + __err |= ios_base::failbit; + setlocale(LC_ALL, __old); + } + } + + template<> + void + __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, + const __c_locale&, int) + { + if (!(__err & ios_base::failbit)) + { + // Assumes __s formatted for "C" locale. + const char* __old = setlocale(LC_ALL, "C"); + char* __sanity; + errno = 0; + double __d = strtod(__s, &__sanity); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __d; + else + __err |= ios_base::failbit; + setlocale(LC_ALL, __old); + } + } + + template<> + void + __convert_to_v(const char* __s, long double& __v, + ios_base::iostate& __err, const __c_locale&, int) + { + if (!(__err & ios_base::failbit)) + { + // Assumes __s formatted for "C" locale. + const char* __old = setlocale(LC_ALL, "C"); +#if defined(_GLIBCPP_USE_C99) + char* __sanity; + errno = 0; + long double __ld = strtold(__s, &__sanity); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ld; +#else + typedef char_traits::int_type int_type; + long double __ld; + errno = 0; + int __p = sscanf(__s, "%Lf", &__ld); + if (errno == ERANGE) + __p = 0; +#ifdef _GLIBCPP_HAVE_FINITEL + if ((__p == 1) && !finitel (__ld)) + __p = 0; +#endif + if (__p && static_cast(__p) != char_traits::eof()) + __v = __ld; +#endif + else + __err |= ios_base::failbit; + setlocale(LC_ALL, __old); + } + } + + void + locale::facet::_S_create_c_locale(__c_locale& __cloc, const char*) + { __cloc = NULL; } + + void + locale::facet::_S_destroy_c_locale(__c_locale&) + { } + + __c_locale + locale::facet::_S_clone_c_locale(__c_locale&) + { return __c_locale(); } +} // namespace std diff --git a/libstdc++-v3/config/locale/generic/c_locale.h b/libstdc++-v3/config/locale/generic/c_locale.h new file mode 100644 index 00000000000..0fc9a250c02 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/c_locale.h @@ -0,0 +1,41 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + typedef int* __c_locale; +} diff --git a/libstdc++-v3/config/locale/generic/codecvt_specializations.h b/libstdc++-v3/config/locale/generic/codecvt_specializations.h new file mode 100644 index 00000000000..24db4c84dc2 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/codecvt_specializations.h @@ -0,0 +1,38 @@ +// Locale support (codecvt) -*- C++ -*- + +// Copyright (C) 2000, 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.1.5 Template class codecvt +// + +// Warning: this file is not meant for user inclusion. Use . + +// Written by Benjamin Kosnik + +// XXX dummy file diff --git a/libstdc++-v3/config/locale/generic/collate_members.cc b/libstdc++-v3/config/locale/generic/collate_members.cc new file mode 100644 index 00000000000..0abd784378a --- /dev/null +++ b/libstdc++-v3/config/locale/generic/collate_members.cc @@ -0,0 +1,67 @@ +// std::collate implementation details, generic version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.4.1.2 collate virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // These are basically extensions to char_traits, and perhaps should + // be put there instead of here. + template<> + int + collate::_M_compare_helper(const char* __one, + const char* __two) const + { return strcoll(__one, __two); } + + template<> + size_t + collate::_M_transform_helper(char* __to, const char* __from, + size_t __n) const + { return strxfrm(__to, __from, __n); } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + int + collate::_M_compare_helper(const wchar_t* __one, + const wchar_t* __two) const + { return wcscoll(__one, __two); } + + template<> + size_t + collate::_M_transform_helper(wchar_t* __to, const wchar_t* __from, + size_t __n) const + { return wcsxfrm(__to, __from, __n); } +#endif +} diff --git a/libstdc++-v3/config/locale/generic/ctype_members.cc b/libstdc++-v3/config/locale/generic/ctype_members.cc new file mode 100644 index 00000000000..5a66484f199 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/ctype_members.cc @@ -0,0 +1,195 @@ +// std::ctype implementation details, generic version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // NB: The other ctype specializations are in src/locale.cc and + // various /config/os/* files. + template<> + ctype_byname::ctype_byname(const char* __s, size_t __refs) + : ctype(0, false, __refs) + { + _S_destroy_c_locale(_M_c_locale_ctype); + _S_create_c_locale(_M_c_locale_ctype, __s); + } + +#ifdef _GLIBCPP_USE_WCHAR_T + ctype::__wmask_type + ctype::_M_convert_to_wmask(const mask __m) const + { + __wmask_type __ret; + switch (__m) + { + case space: + __ret = wctype("space"); + break; + case print: + __ret = wctype("print"); + break; + case cntrl: + __ret = wctype("cntrl"); + break; + case upper: + __ret = wctype("upper"); + break; + case lower: + __ret = wctype("lower"); + break; + case alpha: + __ret = wctype("alpha"); + break; + case digit: + __ret = wctype("digit"); + break; + case punct: + __ret = wctype("punct"); + break; + case xdigit: + __ret = wctype("xdigit"); + break; + case alnum: + __ret = wctype("alnum"); + break; + case graph: + __ret = wctype("graph"); + break; + default: + __ret = 0; + } + return __ret; + }; + + wchar_t + ctype::do_toupper(wchar_t __c) const + { return towupper(__c); } + + const wchar_t* + ctype::do_toupper(wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi) + { + *__lo = towupper(*__lo); + ++__lo; + } + return __hi; + } + + wchar_t + ctype::do_tolower(wchar_t __c) const + { return towlower(__c); } + + const wchar_t* + ctype::do_tolower(wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi) + { + *__lo = towlower(*__lo); + ++__lo; + } + return __hi; + } + + bool + ctype:: + do_is(mask __m, char_type __c) const + { return static_cast(iswctype(__c, _M_convert_to_wmask(__m))); } + + const wchar_t* + ctype:: + do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const + { + while (__lo < __hi && !this->do_is(*__m, *__lo)) + ++__lo; + return __lo; + } + + const wchar_t* + ctype:: + do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi && !this->do_is(__m, *__lo)) + ++__lo; + return __lo; + } + + const wchar_t* + ctype:: + do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const + { + while (__lo < __hi && this->do_is(__m, *__lo) != 0) + ++__lo; + return __lo; + } + + wchar_t + ctype:: + do_widen(char __c) const + { return btowc(__c); } + + const char* + ctype:: + do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const + { + mbstate_t __state; + memset(static_cast(&__state), 0, sizeof(mbstate_t)); + mbsrtowcs(__dest, &__lo, __hi - __lo, &__state); + return __hi; + } + + char + ctype:: + do_narrow(wchar_t __wc, char __dfault) const + { + int __c = wctob(__wc); + return (__c == EOF ? __dfault : static_cast(__c)); + } + + const wchar_t* + ctype:: + do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, + char* __dest) const + { + mbstate_t __state; + memset(static_cast(&__state), 0, sizeof(mbstate_t)); + size_t __len = __hi - __lo; + size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state); + if (__conv == __len) + *__dest = __dfault; + return __hi; + } +#endif // _GLIBCPP_USE_WCHAR_T +} diff --git a/libstdc++-v3/config/locale/generic/messages_members.cc b/libstdc++-v3/config/locale/generic/messages_members.cc new file mode 100644 index 00000000000..480ab88d824 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/messages_members.cc @@ -0,0 +1,45 @@ +// std::messages implementation details, generic version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // Specializations + template<> + string + messages::do_get(catalog, int, int, const string& __dfault) const + { return __dfault; } +} diff --git a/libstdc++-v3/config/locale/generic/messages_members.h b/libstdc++-v3/config/locale/generic/messages_members.h new file mode 100644 index 00000000000..62dd24d6838 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/messages_members.h @@ -0,0 +1,58 @@ +// std::messages implementation details, generic version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// + +// Written by Benjamin Kosnik + + // Non-virtual member functions. + template + typename messages<_CharT>::catalog + messages<_CharT>::open(const basic_string& __s, const locale& __loc, + const char*) const + { return this->do_open(__s, __loc); } + + // Virtual member functions. + template + typename messages<_CharT>::catalog + messages<_CharT>::do_open(const basic_string&, const locale&) const + { return 0; } + + template + typename messages<_CharT>::string_type + messages<_CharT>::do_get(catalog, int, int, + const string_type& __dfault) const + { return __dfault; } + + template + void + messages<_CharT>::do_close(catalog) const + { } diff --git a/libstdc++-v3/config/locale/generic/monetary_members.cc b/libstdc++-v3/config/locale/generic/monetary_members.cc new file mode 100644 index 00000000000..7a31900a8e6 --- /dev/null +++ b/libstdc++-v3/config/locale/generic/monetary_members.cc @@ -0,0 +1,111 @@ +// std::moneypunct implementation details, generic version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // Construct and return valid pattern consisting of some combination of: + // space none symbol sign value + money_base::pattern + money_base::_S_construct_pattern(char, char, char) + { return _S_default_pattern; } + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } +#endif +} diff --git a/libstdc++-v3/config/locale/generic/numeric_members.cc b/libstdc++-v3/config/locale/generic/numeric_members.cc new file mode 100644 index 00000000000..7a511e3a36a --- /dev/null +++ b/libstdc++-v3/config/locale/generic/numeric_members.cc @@ -0,0 +1,65 @@ +// std::numpunct implementation details, generic version -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + template<> + void + numpunct::_M_initialize_numpunct(__c_locale) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_truename = "true"; + _M_falsename = "false"; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + numpunct::_M_initialize_numpunct(__c_locale) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_truename = L"true"; + _M_falsename = L"false"; + } +#endif +} diff --git a/libstdc++-v3/config/locale/generic/time_members.cc b/libstdc++-v3/config/locale/generic/time_members.cc new file mode 100644 index 00000000000..e546f30a0db --- /dev/null +++ b/libstdc++-v3/config/locale/generic/time_members.cc @@ -0,0 +1,188 @@ +// std::time_get, std::time_put implementation, GNU version -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions +// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + template<> + void + __timepunct:: + _M_put_helper(char* __s, size_t __maxlen, const char* __format, + const tm* __tm) const + { + const char* __old = setlocale(LC_ALL, _M_name_timepunct); + strftime(__s, __maxlen, __format, __tm); + setlocale(LC_ALL, __old); + } + + template<> + void + __timepunct::_M_initialize_timepunct(__c_locale) + { + // "C" locale + _M_date_format = "%m/%d/%Y"; + _M_date_era_format = "%m/%d/%Y"; + _M_time_format = "%H:%M:%S"; + _M_time_era_format = "%H:%M:%S"; + _M_date_time_format = ""; + _M_date_time_era_format = ""; + _M_am = "AM"; + _M_pm = "PM"; + _M_am_pm_format = ""; + + // Day names, starting with "C"'s Sunday. + _M_day1 = "Sunday"; + _M_day2 = "Monday"; + _M_day3 = "Tuesday"; + _M_day4 = "Wednesday"; + _M_day5 = "Thursday"; + _M_day6 = "Friday"; + _M_day7 = "Saturday"; + + // Abbreviated day names, starting with "C"'s Sun. + _M_day_a1 = "Sun"; + _M_day_a2 = "Mon"; + _M_day_a3 = "Tue"; + _M_day_a4 = "Wed"; + _M_day_a5 = "Thu"; + _M_day_a6 = "Fri"; + _M_day_a7 = "Sat"; + + // Month names, starting with "C"'s January. + _M_month01 = "January"; + _M_month02 = "February"; + _M_month03 = "March"; + _M_month04 = "April"; + _M_month05 = "May"; + _M_month06 = "June"; + _M_month07 = "July"; + _M_month08 = "August"; + _M_month09 = "September"; + _M_month10 = "October"; + _M_month11 = "November"; + _M_month12 = "December"; + + // Abbreviated month names, starting with "C"'s Jan. + _M_month_a01 = "Jan"; + _M_month_a02 = "Feb"; + _M_month_a03 = "Mar"; + _M_month_a04 = "Apr"; + _M_month_a05 = "May"; + _M_month_a06 = "Jun"; + _M_month_a07 = "July"; + _M_month_a08 = "Aug"; + _M_month_a09 = "Sep"; + _M_month_a10 = "Oct"; + _M_month_a11 = "Nov"; + _M_month_a12 = "Dec"; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + __timepunct:: + _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format, + const tm* __tm) const + { + const char* __old = setlocale(LC_ALL, _M_name_timepunct); + wcsftime(__s, __maxlen, __format, __tm); + setlocale(LC_ALL, __old); + } + + template<> + void + __timepunct::_M_initialize_timepunct(__c_locale) + { + // "C" locale + _M_date_format = L"%m/%d/%y"; + _M_date_era_format = L"%m/%d/%y"; + _M_time_format = L"%H:%M:%S"; + _M_time_era_format = L"%H:%M:%S"; + _M_date_time_format = L""; + _M_date_time_era_format = L""; + _M_am = L"AM"; + _M_pm = L"PM"; + _M_am_pm_format = L""; + + // Day names, starting with "C"'s Sunday. + _M_day1 = L"Sunday"; + _M_day2 = L"Monday"; + _M_day3 = L"Tuesday"; + _M_day4 = L"Wednesday"; + _M_day5 = L"Thursday"; + _M_day6 = L"Friday"; + _M_day7 = L"Saturday"; + + // Abbreviated day names, starting with "C"'s Sun. + _M_day_a1 = L"Sun"; + _M_day_a2 = L"Mon"; + _M_day_a3 = L"Tue"; + _M_day_a4 = L"Wed"; + _M_day_a5 = L"Thu"; + _M_day_a6 = L"Fri"; + _M_day_a7 = L"Sat"; + + // Month names, starting with "C"'s January. + _M_month01 = L"January"; + _M_month02 = L"February"; + _M_month03 = L"March"; + _M_month04 = L"April"; + _M_month05 = L"May"; + _M_month06 = L"June"; + _M_month07 = L"July"; + _M_month08 = L"August"; + _M_month09 = L"September"; + _M_month10 = L"October"; + _M_month11 = L"November"; + _M_month12 = L"December"; + + // Abbreviated month names, starting with "C"'s Jan. + _M_month_a01 = L"Jan"; + _M_month_a02 = L"Feb"; + _M_month_a03 = L"Mar"; + _M_month_a04 = L"Apr"; + _M_month_a05 = L"May"; + _M_month_a06 = L"Jun"; + _M_month_a07 = L"July"; + _M_month_a08 = L"Aug"; + _M_month_a09 = L"Sep"; + _M_month_a10 = L"Oct"; + _M_month_a11 = L"Nov"; + _M_month_a12 = L"Dec"; + } +#endif +} diff --git a/libstdc++-v3/config/locale/gnu/c_locale.cc b/libstdc++-v3/config/locale/gnu/c_locale.cc new file mode 100644 index 00000000000..62290901141 --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/c_locale.cc @@ -0,0 +1,188 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include +#include +#include + +namespace std +{ + template<> + void + __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, + const __c_locale& __cloc, int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + long __l = __strtol_l(__s, &__sanity, __base, __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __l; + else + __err |= ios_base::failbit; + } + } + + template<> + void + __convert_to_v(const char* __s, unsigned long& __v, + ios_base::iostate& __err, const __c_locale& __cloc, + int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ul; + else + __err |= ios_base::failbit; + } + } + +#ifdef _GLIBCPP_USE_LONG_LONG + template<> + void + __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, + const __c_locale& __cloc, int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ll; + else + __err |= ios_base::failbit; + } + } + + template<> + void + __convert_to_v(const char* __s, unsigned long long& __v, + ios_base::iostate& __err, const __c_locale& __cloc, + int __base) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + unsigned long long __ull = __strtoull_l(__s, &__sanity, __base, + __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ull; + else + __err |= ios_base::failbit; + } + } +#endif + + template<> + void + __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, + const __c_locale& __cloc, int) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + float __f = __strtof_l(__s, &__sanity, __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __f; + else + __err |= ios_base::failbit; + } + } + + template<> + void + __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, + const __c_locale& __cloc, int) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + double __d = __strtod_l(__s, &__sanity, __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __d; + else + __err |= ios_base::failbit; + } + } + + template<> + void + __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err, + const __c_locale& __cloc, int) + { + if (!(__err & ios_base::failbit)) + { + char* __sanity; + errno = 0; + long double __ld = __strtold_l(__s, &__sanity, __cloc); + if (__sanity != __s && *__sanity == '\0' && errno != ERANGE) + __v = __ld; + else + __err |= ios_base::failbit; + } + } + + void + locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s) + { + // XXX + // Perhaps locale::categories could be made equivalent to LC_*_MASK ? + // _M_c_locale = __newlocale(1 << LC_ALL, __s, 0); + // _M_c_locale = __newlocale(locale::all, __s, 0); + __cloc = __newlocale(1 << LC_ALL, __s, 0); + if (!__cloc) + { + // This named locale is not supported by the underlying OS. + __throw_runtime_error("attempt to create locale from unknown name"); + } + } + + void + locale::facet::_S_destroy_c_locale(__c_locale& __cloc) + { __freelocale(__cloc); } + + __c_locale + locale::facet::_S_clone_c_locale(__c_locale& __cloc) + { return __duplocale(__cloc); } +} // namespace std diff --git a/libstdc++-v3/config/locale/gnu/c_locale.h b/libstdc++-v3/config/locale/gnu/c_locale.h new file mode 100644 index 00000000000..3ce1781e23b --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/c_locale.h @@ -0,0 +1,46 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include +#include // For codecvt +#include // For codecvt using iconv, iconv_t +#include // For messages + +#define _GLIBCPP_C_LOCALE_GNU 1 + +namespace std +{ + typedef __locale_t __c_locale; +} diff --git a/libstdc++-v3/config/locale/gnu/collate_members.cc b/libstdc++-v3/config/locale/gnu/collate_members.cc new file mode 100644 index 00000000000..8e3952e5837 --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/collate_members.cc @@ -0,0 +1,67 @@ +// std::collate implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.4.1.2 collate virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // These are basically extensions to char_traits, and perhaps should + // be put there instead of here. + template<> + int + collate::_M_compare_helper(const char* __one, + const char* __two) const + { return __strcoll_l(__one, __two, _M_c_locale_collate); } + + template<> + size_t + collate::_M_transform_helper(char* __to, const char* __from, + size_t __n) const + { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + int + collate::_M_compare_helper(const wchar_t* __one, + const wchar_t* __two) const + { return __wcscoll_l(__one, __two, _M_c_locale_collate); } + + template<> + size_t + collate::_M_transform_helper(wchar_t* __to, const wchar_t* __from, + size_t __n) const + { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); } +#endif +} diff --git a/libstdc++-v3/config/locale/gnu/ctype_members.cc b/libstdc++-v3/config/locale/gnu/ctype_members.cc new file mode 100644 index 00000000000..33540c948f2 --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/ctype_members.cc @@ -0,0 +1,200 @@ +// std::ctype implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // NB: The other ctype specializations are in src/locale.cc and + // various /config/os/* files. + template<> + ctype_byname::ctype_byname(const char* __s, size_t __refs) + : ctype(0, false, __refs) + { + if (_M_c_locale_ctype) + _S_destroy_c_locale(_M_c_locale_ctype); + _S_create_c_locale(_M_c_locale_ctype, __s); + _M_toupper = _M_c_locale_ctype->__ctype_toupper; + _M_tolower = _M_c_locale_ctype->__ctype_tolower; + _M_table = _M_c_locale_ctype->__ctype_b; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + ctype::__wmask_type + ctype::_M_convert_to_wmask(const mask __m) const + { + __wmask_type __ret; + switch (__m) + { + case space: + __ret = __wctype_l("space", _M_c_locale_ctype); + break; + case print: + __ret = __wctype_l("print", _M_c_locale_ctype); + break; + case cntrl: + __ret = __wctype_l("cntrl", _M_c_locale_ctype); + break; + case upper: + __ret = __wctype_l("upper", _M_c_locale_ctype); + break; + case lower: + __ret = __wctype_l("lower", _M_c_locale_ctype); + break; + case alpha: + __ret = __wctype_l("alpha", _M_c_locale_ctype); + break; + case digit: + __ret = __wctype_l("digit", _M_c_locale_ctype); + break; + case punct: + __ret = __wctype_l("punct", _M_c_locale_ctype); + break; + case xdigit: + __ret = __wctype_l("xdigit", _M_c_locale_ctype); + break; + case alnum: + __ret = __wctype_l("alnum", _M_c_locale_ctype); + break; + case graph: + __ret = __wctype_l("graph", _M_c_locale_ctype); + break; + default: + __ret = 0; + } + return __ret; + }; + + wchar_t + ctype::do_toupper(wchar_t __c) const + { return __towupper_l(__c, _M_c_locale_ctype); } + + const wchar_t* + ctype::do_toupper(wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi) + { + *__lo = __towupper_l(*__lo, _M_c_locale_ctype); + ++__lo; + } + return __hi; + } + + wchar_t + ctype::do_tolower(wchar_t __c) const + { return __towlower_l(__c, _M_c_locale_ctype); } + + const wchar_t* + ctype::do_tolower(wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi) + { + *__lo = __towlower_l(*__lo, _M_c_locale_ctype); + ++__lo; + } + return __hi; + } + + bool + ctype:: + do_is(mask __m, char_type __c) const + { return static_cast(__iswctype_l(__c, _M_convert_to_wmask(__m), + _M_c_locale_ctype)); } + + const wchar_t* + ctype:: + do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const + { + while (__lo < __hi && !this->do_is(*__m, *__lo)) + ++__lo; + return __lo; + } + + const wchar_t* + ctype:: + do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi && !this->do_is(__m, *__lo)) + ++__lo; + return __lo; + } + + const wchar_t* + ctype:: + do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const + { + while (__lo < __hi && this->do_is(__m, *__lo) != 0) + ++__lo; + return __lo; + } + + wchar_t + ctype:: + do_widen(char __c) const + { return btowc(__c); } + + const char* + ctype:: + do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const + { + mbstate_t __state; + memset(static_cast(&__state), 0, sizeof(mbstate_t)); + mbsrtowcs(__dest, &__lo, __hi - __lo, &__state); + return __hi; + } + + char + ctype:: + do_narrow(wchar_t __wc, char __dfault) const + { + int __c = wctob(__wc); + return (__c == EOF ? __dfault : static_cast(__c)); + } + + const wchar_t* + ctype:: + do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, + char* __dest) const + { + mbstate_t __state; + memset(static_cast(&__state), 0, sizeof(mbstate_t)); + size_t __len = __hi - __lo; + size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state); + if (__conv == __len) + *__dest = __dfault; + return __hi; + } +#endif // _GLIBCPP_USE_WCHAR_T +} diff --git a/libstdc++-v3/config/locale/gnu/messages_members.cc b/libstdc++-v3/config/locale/gnu/messages_members.cc new file mode 100644 index 00000000000..bd2252d0537 --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/messages_members.cc @@ -0,0 +1,58 @@ +// std::messages implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // Specializations + template<> + string + messages::do_get(catalog, int, int, const string& __dfault) const + { +#if 0 + // Requires glibc 2.3 + __c_locale __old = uselocale(_M_c_locale_messages); + const char* __msg = const_cast(gettext(__dfault.c_str())); + uselocale(__old); + return string(__msg); +#else + const char* __old = setlocale(LC_ALL, _M_name_messages); + const char* __msg = gettext(__dfault.c_str()); + setlocale(LC_ALL, __old); + return string(__msg); +#endif + } +} diff --git a/libstdc++-v3/config/locale/gnu/messages_members.h b/libstdc++-v3/config/locale/gnu/messages_members.h new file mode 100644 index 00000000000..2dbc6eb4c5a --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/messages_members.h @@ -0,0 +1,79 @@ +// std::messages implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// + +// Written by Benjamin Kosnik + + // Non-virtual member functions. + template + typename messages<_CharT>::catalog + messages<_CharT>::open(const basic_string& __s, const locale& __loc, + const char* __dir) const + { + bindtextdomain(__s.c_str(), __dir); + return this->do_open(__s, __loc); + } + + template + typename messages<_CharT>::catalog + messages<_CharT>::do_open(const basic_string& __s, + const locale&) const + { + // No error checking is done, assume the catalog exists and can + // be used. + textdomain(__s.c_str()); + return 0; + } + + template + typename messages<_CharT>::string_type + messages<_CharT>::do_get(catalog, int, int, + const string_type& __dfault) const + { +#if 0 + // Requires glibc 2.3 + __c_locale __old = uselocale(_M_c_locale_messages); + char* __msg = gettext(_M_convert_to_char(__dfault)); + uselocale(__old); + return _M_convert_from_char(__msg); +#else + const char* __old = setlocale(LC_ALL, _M_name_messages); + char* __msg = gettext(_M_convert_to_char(__dfault)); + setlocale(LC_ALL, __old); + return _M_convert_from_char(__msg); +#endif + } + + template + void + messages<_CharT>::do_close(catalog) const + { } diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc new file mode 100644 index 00000000000..88a4f95a24a --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc @@ -0,0 +1,461 @@ +// std::moneypunct implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // Construct and return valid pattern consisting of some combination of: + // space none symbol sign value + money_base::pattern + money_base::_S_construct_pattern(char __precedes, char __space, char __posn) + { + pattern __ret; + + // This insanely complicated routine attempts to construct a valid + // pattern for use with monyepunct. A couple of invariants: + + // if (__precedes) symbol -> value + // else value -> symbol + + // if (__space) space + // else none + + // none == never first + // space never first or last + + // Any elegant implementations of this are welcome. + switch (__posn) + { + case 0: + case 1: + // 1 The sign precedes the value and symbol. + if (__space) + { + // Pattern starts with sign. + if (__precedes) + { + __ret.field[1] = symbol; + __ret.field[2] = space; + __ret.field[3] = value; + } + else + { + __ret.field[1] = value; + __ret.field[2] = space; + __ret.field[3] = symbol; + } + __ret.field[0] = sign; + } + else + { + // Pattern starts with sign and ends with none. + if (__precedes) + { + __ret.field[1] = symbol; + __ret.field[2] = value; + } + else + { + __ret.field[1] = value; + __ret.field[2] = symbol; + } + __ret.field[0] = sign; + __ret.field[3] = none; + } + break; + case 2: + // 2 The sign follows the value and symbol. + if (__space) + { + // Pattern either ends with sign. + if (__precedes) + { + __ret.field[0] = symbol; + __ret.field[1] = space; + __ret.field[2] = value; + } + else + { + __ret.field[0] = value; + __ret.field[1] = space; + __ret.field[2] = symbol; + } + __ret.field[3] = sign; + } + else + { + // Pattern ends with sign then none. + if (__precedes) + { + __ret.field[0] = symbol; + __ret.field[1] = value; + } + else + { + __ret.field[0] = value; + __ret.field[1] = symbol; + } + __ret.field[2] = sign; + __ret.field[3] = none; + } + break; + case 3: + // 3 The sign immediately precedes the symbol. + if (__space) + { + // Have space. + if (__precedes) + { + __ret.field[0] = sign; + __ret.field[1] = symbol; + __ret.field[2] = space; + __ret.field[3] = value; + } + else + { + __ret.field[0] = value; + __ret.field[1] = space; + __ret.field[2] = sign; + __ret.field[3] = symbol; + } + } + else + { + // Have none. + if (__precedes) + { + __ret.field[0] = sign; + __ret.field[1] = symbol; + __ret.field[2] = value; + } + else + { + __ret.field[0] = value; + __ret.field[1] = sign; + __ret.field[2] = symbol; + } + __ret.field[3] = none; + } + break; + case 4: + // 4 The sign immediately follows the symbol. + if (__space) + { + // Have space. + if (__precedes) + { + __ret.field[0] = symbol; + __ret.field[1] = sign; + __ret.field[2] = space; + __ret.field[3] = value; + } + else + { + __ret.field[0] = value; + __ret.field[1] = space; + __ret.field[2] = symbol; + __ret.field[3] = sign; + } + } + else + { + // Have none. + if (__precedes) + { + __ret.field[0] = symbol; + __ret.field[1] = sign; + __ret.field[2] = value; + } + else + { + __ret.field[0] = value; + __ret.field[1] = symbol; + __ret.field[2] = sign; + } + __ret.field[3] = none; + } + break; + default: + ; + } + return __ret; + } + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + else + { + // Named locale. + _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc)); + _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc)); + _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); + _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); + _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); + + // _Intl == true + _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); + _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc)); + char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); + char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); + char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); + char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); + char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); + char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); + if (!__nposn) + _M_negative_sign = "()"; + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); + } + } + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + else + { + // Named locale. + _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc)); + _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc)); + _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); + _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); + _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); + + // _Intl == false + _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); + _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); + char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); + char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); + char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); + char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); + char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); + char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); + if (!__nposn) + _M_negative_sign = "()"; + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); + } + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + else + { + // Named locale. + _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); + + _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); + _M_grouping = __nl_langinfo_l(GROUPING, __cloc); + + mbstate_t __state; + const char* __cs; + string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); + string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); + string __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); + string::size_type __len = max(__cpossign.size(), __cnegsign.size()); + __len = max(__len, __ccurr.size()) + 1; + wchar_t* __ws = static_cast(__builtin_alloca(sizeof(wchar_t) * __len)); + + // NB: Should swich to __cloc's ctype info first. + if (__cpossign.size()) + { + memset(&__state, 0, sizeof(mbstate_t)); + __cs = __cpossign.c_str(); + mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state); + _M_positive_sign = string_type(__ws); + } + else + _M_positive_sign = string_type(); + + if (__cnegsign.size()) + { + memset(&__state, 0, sizeof(mbstate_t)); + __cs = __cnegsign.c_str(); + mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state); + _M_negative_sign = string_type(__ws); + } + else + _M_negative_sign = string_type(); + + // _Intl == true. + if (__ccurr.size()) + { + memset(&__state, 0, sizeof(mbstate_t)); + __cs = __ccurr.c_str(); + mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state); + _M_curr_symbol = string_type(__ws); + } + else + _M_curr_symbol = string_type(); + + _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc)); + char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); + char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); + char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); + char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); + char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); + char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); + if (!__nposn) + _M_negative_sign = L"()"; + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); + } + } + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + else + { + // Named locale. + _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); + _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); + _M_grouping = __nl_langinfo_l(GROUPING, __cloc); + + mbstate_t __state; + const char* __cs; + string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); + string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); + string __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); + string::size_type __len = max(__cpossign.size(), __cnegsign.size()); + __len = max(__len, __ccurr.size()) + 1; + wchar_t* __ws = static_cast(__builtin_alloca(sizeof(wchar_t) * __len)); + + // NB: Should swich to __cloc's ctype info first. + if (__cpossign.size()) + { + memset(&__state, 0, sizeof(mbstate_t)); + __cs = __cpossign.c_str(); + mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state); + _M_positive_sign = string_type(__ws); + } + else + _M_positive_sign = string_type(); + + if (__cnegsign.size()) + { + memset(&__state, 0, sizeof(mbstate_t)); + __cs = __cnegsign.c_str(); + mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state); + _M_negative_sign = string_type(__ws); + } + else + _M_negative_sign = string_type(); + + // _Intl == false. + if (__ccurr.size()) + { + memset(&__state, 0, sizeof(mbstate_t)); + __cs = __ccurr.c_str(); + mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state); + _M_curr_symbol = string_type(__ws); + } + else + _M_curr_symbol = string_type(); + + _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); + char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); + char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); + char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); + _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); + char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); + char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); + char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); + if (!__nposn) + _M_negative_sign = L"()"; + _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); + } + } +#endif +} diff --git a/libstdc++-v3/config/locale/gnu/numeric_members.cc b/libstdc++-v3/config/locale/gnu/numeric_members.cc new file mode 100644 index 00000000000..4284c7c07b3 --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/numeric_members.cc @@ -0,0 +1,98 @@ +// std::numpunct implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + template<> + void + numpunct::_M_initialize_numpunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + } + else + { + // Named locale. + _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc)); + _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc)); + // Check for NUL, which implies no grouping. + if (_M_thousands_sep == '\0') + _M_grouping = ""; + else + _M_grouping = __nl_langinfo_l(GROUPING, __cloc); + } + // NB: There is no way to extact this info from posix locales. + // _M_truename = __nl_langinfo_l(YESSTR, __cloc); + _M_truename = "true"; + // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); + _M_falsename = "false"; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + numpunct::_M_initialize_numpunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + } + else + { + // Named locale. + _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); + _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); + if (_M_thousands_sep == L'\0') + _M_grouping = ""; + else + _M_grouping = __nl_langinfo_l(GROUPING, __cloc); + } + // NB: There is no way to extact this info from posix locales. + // _M_truename = __nl_langinfo_l(YESSTR, __cloc); + _M_truename = L"true"; + // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); + _M_falsename = L"false"; + } +#endif +} diff --git a/libstdc++-v3/config/locale/gnu/time_members.cc b/libstdc++-v3/config/locale/gnu/time_members.cc new file mode 100644 index 00000000000..f00ec4a89c8 --- /dev/null +++ b/libstdc++-v3/config/locale/gnu/time_members.cc @@ -0,0 +1,330 @@ +// std::time_get, std::time_put implementation, GNU version -*- C++ -*- + +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions +// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + template<> + void + __timepunct:: + _M_put_helper(char* __s, size_t __maxlen, const char* __format, + const tm* __tm) const + { +#if 0 + // Requires glibc 2.3 + if (_M_c_locale_timepunct) + __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm); + else + strftime(__s, __maxlen, __format, __tm); +#else + const char* __old = setlocale(LC_ALL, _M_name_timepunct); + strftime(__s, __maxlen, __format, __tm); + setlocale(LC_ALL, __old); +#endif + } + + template<> + void + __timepunct::_M_initialize_timepunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_date_format = "%m/%d/%y"; + _M_date_era_format = "%m/%d/%y"; + _M_time_format = "%H:%M:%S"; + _M_time_era_format = "%H:%M:%S"; + _M_date_time_format = ""; + _M_date_time_era_format = ""; + _M_am = "AM"; + _M_pm = "PM"; + _M_am_pm_format = ""; + + // Day names, starting with "C"'s Sunday. + _M_day1 = "Sunday"; + _M_day2 = "Monday"; + _M_day3 = "Tuesday"; + _M_day4 = "Wednesday"; + _M_day5 = "Thursday"; + _M_day6 = "Friday"; + _M_day7 = "Saturday"; + + // Abbreviated day names, starting with "C"'s Sun. + _M_day_a1 = "Sun"; + _M_day_a2 = "Mon"; + _M_day_a3 = "Tue"; + _M_day_a4 = "Wed"; + _M_day_a5 = "Thu"; + _M_day_a6 = "Fri"; + _M_day_a7 = "Sat"; + + // Month names, starting with "C"'s January. + _M_month01 = "January"; + _M_month02 = "February"; + _M_month03 = "March"; + _M_month04 = "April"; + _M_month05 = "May"; + _M_month06 = "June"; + _M_month07 = "July"; + _M_month08 = "August"; + _M_month09 = "September"; + _M_month10 = "October"; + _M_month11 = "November"; + _M_month12 = "December"; + + // Abbreviated month names, starting with "C"'s Jan. + _M_month_a01 = "Jan"; + _M_month_a02 = "Feb"; + _M_month_a03 = "Mar"; + _M_month_a04 = "Apr"; + _M_month_a05 = "May"; + _M_month_a06 = "Jun"; + _M_month_a07 = "July"; + _M_month_a08 = "Aug"; + _M_month_a09 = "Sep"; + _M_month_a10 = "Oct"; + _M_month_a11 = "Nov"; + _M_month_a12 = "Dec"; + } + else + { + _M_c_locale_timepunct = _S_clone_c_locale(__cloc); + + _M_date_format = __nl_langinfo_l(D_FMT, __cloc); + _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc); + _M_time_format = __nl_langinfo_l(T_FMT, __cloc); + _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc); + _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc); + _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc); + _M_am = __nl_langinfo_l(AM_STR, __cloc); + _M_pm = __nl_langinfo_l(PM_STR, __cloc); + _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc); + + // Day names, starting with "C"'s Sunday. + _M_day1 = __nl_langinfo_l(DAY_1, __cloc); + _M_day2 = __nl_langinfo_l(DAY_2, __cloc); + _M_day3 = __nl_langinfo_l(DAY_3, __cloc); + _M_day4 = __nl_langinfo_l(DAY_4, __cloc); + _M_day5 = __nl_langinfo_l(DAY_5, __cloc); + _M_day6 = __nl_langinfo_l(DAY_6, __cloc); + _M_day7 = __nl_langinfo_l(DAY_7, __cloc); + + // Abbreviated day names, starting with "C"'s Sun. + _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc); + _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc); + _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc); + _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc); + _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc); + _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc); + _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc); + + // Month names, starting with "C"'s January. + _M_month01 = __nl_langinfo_l(MON_1, __cloc); + _M_month02 = __nl_langinfo_l(MON_2, __cloc); + _M_month03 = __nl_langinfo_l(MON_3, __cloc); + _M_month04 = __nl_langinfo_l(MON_4, __cloc); + _M_month05 = __nl_langinfo_l(MON_5, __cloc); + _M_month06 = __nl_langinfo_l(MON_6, __cloc); + _M_month07 = __nl_langinfo_l(MON_7, __cloc); + _M_month08 = __nl_langinfo_l(MON_8, __cloc); + _M_month09 = __nl_langinfo_l(MON_9, __cloc); + _M_month10 = __nl_langinfo_l(MON_10, __cloc); + _M_month11 = __nl_langinfo_l(MON_11, __cloc); + _M_month12 = __nl_langinfo_l(MON_12, __cloc); + + // Abbreviated month names, starting with "C"'s Jan. + _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc); + _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc); + _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc); + _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc); + _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc); + _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc); + _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc); + _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc); + _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc); + _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc); + _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc); + _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc); + } + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + __timepunct:: + _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format, + const tm* __tm) const + { +#if 0 + // Requires glibc 2.3 + if (_M_c_locale_timepunct) + __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm); + else + wcsftime(__s, __maxlen, __format, __tm); +#else + const char* __old = setlocale(LC_ALL, _M_name_timepunct); + wcsftime(__s, __maxlen, __format, __tm); + setlocale(LC_ALL, __old); +#endif + } + + template<> + void + __timepunct::_M_initialize_timepunct(__c_locale __cloc) + { + if (!__cloc) + { + // "C" locale + _M_date_format = L"%m/%d/%y"; + _M_date_era_format = L"%m/%d/%y"; + _M_time_format = L"%H:%M:%S"; + _M_time_era_format = L"%H:%M:%S"; + _M_date_time_format = L""; + _M_date_time_era_format = L""; + _M_am = L"AM"; + _M_pm = L"PM"; + _M_am_pm_format = L""; + + // Day names, starting with "C"'s Sunday. + _M_day1 = L"Sunday"; + _M_day2 = L"Monday"; + _M_day3 = L"Tuesday"; + _M_day4 = L"Wednesday"; + _M_day5 = L"Thursday"; + _M_day6 = L"Friday"; + _M_day7 = L"Saturday"; + + // Abbreviated day names, starting with "C"'s Sun. + _M_day_a1 = L"Sun"; + _M_day_a2 = L"Mon"; + _M_day_a3 = L"Tue"; + _M_day_a4 = L"Wed"; + _M_day_a5 = L"Thu"; + _M_day_a6 = L"Fri"; + _M_day_a7 = L"Sat"; + + // Month names, starting with "C"'s January. + _M_month01 = L"January"; + _M_month02 = L"February"; + _M_month03 = L"March"; + _M_month04 = L"April"; + _M_month05 = L"May"; + _M_month06 = L"June"; + _M_month07 = L"July"; + _M_month08 = L"August"; + _M_month09 = L"September"; + _M_month10 = L"October"; + _M_month11 = L"November"; + _M_month12 = L"December"; + + // Abbreviated month names, starting with "C"'s Jan. + _M_month_a01 = L"Jan"; + _M_month_a02 = L"Feb"; + _M_month_a03 = L"Mar"; + _M_month_a04 = L"Apr"; + _M_month_a05 = L"May"; + _M_month_a06 = L"Jun"; + _M_month_a07 = L"July"; + _M_month_a08 = L"Aug"; + _M_month_a09 = L"Sep"; + _M_month_a10 = L"Oct"; + _M_month_a11 = L"Nov"; + _M_month_a12 = L"Dec"; + } + else + { + _M_c_locale_timepunct = _S_clone_c_locale(__cloc); + + _M_date_format = reinterpret_cast(__nl_langinfo_l(_NL_WD_FMT, __cloc)); + _M_date_era_format = reinterpret_cast(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc)); + _M_time_format = reinterpret_cast(__nl_langinfo_l(_NL_WT_FMT, __cloc)); + _M_time_era_format = reinterpret_cast(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc)); + _M_date_time_format = reinterpret_cast(__nl_langinfo_l(_NL_WD_T_FMT, __cloc)); + _M_date_time_era_format = reinterpret_cast(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc)); + _M_am = reinterpret_cast(__nl_langinfo_l(_NL_WAM_STR, __cloc)); + _M_pm = reinterpret_cast(__nl_langinfo_l(_NL_WPM_STR, __cloc)); + _M_am_pm_format = reinterpret_cast(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc)); + + // Day names, starting with "C"'s Sunday. + _M_day1 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_1, __cloc)); + _M_day2 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_2, __cloc)); + _M_day3 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_3, __cloc)); + _M_day4 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_4, __cloc)); + _M_day5 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_5, __cloc)); + _M_day6 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_6, __cloc)); + _M_day7 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_7, __cloc)); + + // Abbreviated day names, starting with "C"'s Sun. + _M_day_a1 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_1, __cloc)); + _M_day_a2 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_2, __cloc)); + _M_day_a3 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_3, __cloc)); + _M_day_a4 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_4, __cloc)); + _M_day_a5 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_5, __cloc)); + _M_day_a6 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_6, __cloc)); + _M_day_a7 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_7, __cloc)); + + // Month names, starting with "C"'s January. + _M_month01 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_1, __cloc)); + _M_month02 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_2, __cloc)); + _M_month03 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_3, __cloc)); + _M_month04 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_4, __cloc)); + _M_month05 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_5, __cloc)); + _M_month06 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_6, __cloc)); + _M_month07 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_7, __cloc)); + _M_month08 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_8, __cloc)); + _M_month09 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_9, __cloc)); + _M_month10 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_10, __cloc)); + _M_month11 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_11, __cloc)); + _M_month12 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_12, __cloc)); + + // Abbreviated month names, starting with "C"'s Jan. + _M_month_a01 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_1, __cloc)); + _M_month_a02 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_2, __cloc)); + _M_month_a03 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_3, __cloc)); + _M_month_a04 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_4, __cloc)); + _M_month_a05 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_5, __cloc)); + _M_month_a06 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_6, __cloc)); + _M_month_a07 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_7, __cloc)); + _M_month_a08 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_8, __cloc)); + _M_month_a09 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_9, __cloc)); + _M_month_a10 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_10, __cloc)); + _M_month_a11 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_11, __cloc)); + _M_month_a12 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_12, __cloc)); + } + } +#endif +} diff --git a/libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc b/libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc new file mode 100644 index 00000000000..493ac014208 --- /dev/null +++ b/libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc @@ -0,0 +1,112 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + void + locale::facet::_S_create_c_locale(__c_locale&, const char*) + { } + + void + locale::facet::_S_destroy_c_locale(__c_locale&) + { } + + __c_locale + locale::facet::_S_clone_c_locale(__c_locale&) + { return __c_locale(); } + + template<> + void + numpunct::_M_initialize_numpunct(__c_locale) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_truename = "true"; + _M_falsename = "false"; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + numpunct::_M_initialize_numpunct(__c_locale) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_truename = L"true"; + _M_falsename = L"false"; + } +#endif + + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale) + { + // "C" locale + _M_decimal_point = '.'; + _M_thousands_sep = ','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } + +#ifdef _GLIBCPP_USE_WCHAR_T + template<> + void + moneypunct::_M_initialize_moneypunct(__c_locale) + { + // "C" locale + _M_decimal_point = L'.'; + _M_thousands_sep = L','; + _M_grouping = ""; + _M_curr_symbol = string_type(); + _M_positive_sign = string_type(); + _M_negative_sign = string_type(); + _M_frac_digits = 0; + _M_pos_format = money_base::_S_default_pattern; + _M_neg_format = money_base::_S_default_pattern; + } +#endif +} // namespace std + diff --git a/libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h b/libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h new file mode 100644 index 00000000000..bbfb85eb9e6 --- /dev/null +++ b/libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h @@ -0,0 +1,49 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include +#include // For codecvt +#include // For codecvt using iconv, iconv_t +#include // For messages + +namespace std +{ + typedef __locale_t __c_locale; +} + + + + + diff --git a/libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h b/libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h new file mode 100644 index 00000000000..8cac2995d48 --- /dev/null +++ b/libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h @@ -0,0 +1,481 @@ +// Locale support (codecvt) -*- C++ -*- + +// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.1.5 Template class codecvt +// + +// Warning: this file is not meant for user inclusion. Use . + +// Written by Benjamin Kosnik + + // XXX + // Define this here to codecvt.cc can have _S_max_size definition. +#define _GLIBCPP_USE___ENC_TRAITS 1 + +#if _GLIBCPP_USE_SHADOW_HEADERS + using _C_legacy::CODESET; +#endif + + // Extension to use icov for dealing with character encodings, + // including conversions and comparisons between various character + // sets. This object encapsulates data that may need to be shared between + // char_traits, codecvt and ctype. + class __enc_traits + { + public: + // Types: + // NB: A conversion descriptor subsumes and enhances the + // functionality of a simple state type such as mbstate_t. + typedef iconv_t __desc_type; + + protected: + // Data Members: + // Max size of charset encoding name + static const int _S_max_size = 32; + // Name of internal character set encoding. + char _M_int_enc[_S_max_size]; + // Name of external character set encoding. + char _M_ext_enc[_S_max_size]; + + // Conversion descriptor between external encoding to internal encoding. + __desc_type _M_in_desc; + // Conversion descriptor between internal encoding to external encoding. + __desc_type _M_out_desc; + + // Details the byte-order marker for the external encoding, if necessary. + int _M_ext_bom; + + // Details the byte-order marker for the internal encoding, if necessary. + int _M_int_bom; + + public: + explicit __enc_traits() + : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) + { + memset(_M_int_enc, 0, _S_max_size); + memset(_M_ext_enc, 0, _S_max_size); + } + + explicit __enc_traits(const locale& __loc) + : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) + { + // __intc_end = whatever we are using internally, which is + // UCS4 (linux, solaris) + // UCS2 == UNICODE (microsoft, java, aix, whatever...) + // XXX Currently don't know how to get this data from target system... + strcpy(_M_int_enc, "UCS4"); + + // __extc_end = external codeset in current locale + // XXX There has got to be a better way to do this. + __c_locale __cloc; + locale::facet::_S_create_c_locale(__cloc, __loc.name().c_str()); + strcpy(_M_ext_enc, __nl_langinfo_l(CODESET, __cloc)); + locale::facet::_S_destroy_c_locale(__cloc); + } + + explicit __enc_traits(const char* __int, const char* __ext, + int __ibom = 0, int __ebom = 0) + : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) + { + strncpy(_M_int_enc, __int, _S_max_size); + strncpy(_M_ext_enc, __ext, _S_max_size); + } + + // 21.1.2 traits typedefs + // p4 + // typedef STATE_T state_type + // requires: state_type shall meet the requirements of + // CopyConstructible types (20.1.3) + __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0) + { + strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size); + strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size); + _M_ext_bom = __obj._M_ext_bom; + _M_int_bom = __obj._M_int_bom; + } + + // Need assignment operator as well. + __enc_traits& + operator=(const __enc_traits& __obj) + { + strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size); + strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size); + _M_in_desc = 0; + _M_out_desc = 0; + _M_ext_bom = __obj._M_ext_bom; + _M_int_bom = __obj._M_int_bom; + } + + ~__enc_traits() + { + __desc_type __err = reinterpret_cast(-1); + if (_M_in_desc && _M_in_desc != __err) + iconv_close(_M_in_desc); + if (_M_out_desc && _M_out_desc != __err) + iconv_close(_M_out_desc); + } + + void + _M_init() + { + const __desc_type __err = reinterpret_cast(-1); + if (!_M_in_desc) + { + _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc); + if (_M_in_desc == __err) + __throw_runtime_error("creating iconv input descriptor failed."); + } + if (!_M_out_desc) + { + _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc); + if (_M_out_desc == __err) + __throw_runtime_error("creating iconv output descriptor failed."); + } + } + + bool + _M_good() + { + const __desc_type __err = reinterpret_cast(-1); + bool __test = _M_in_desc && _M_in_desc != __err; + __test &= _M_out_desc && _M_out_desc != __err; + return __test; + } + + const __desc_type* + _M_get_in_descriptor() + { return &_M_in_desc; } + + const __desc_type* + _M_get_out_descriptor() + { return &_M_out_desc; } + + int + _M_get_external_bom() + { return _M_ext_bom; } + + int + _M_get_internal_bom() + { return _M_int_bom; } + + const char* + _M_get_internal_enc() + { return _M_int_enc; } + + const char* + _M_get_external_enc() + { return _M_ext_enc; } + }; + + // Partial specialization + // This specialization takes advantage of iconv to provide code + // conversions between a large number of character encodings. + template + class codecvt<_InternT, _ExternT, __enc_traits> + : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits> + { + public: + // Types: + typedef codecvt_base::result result; + typedef _InternT intern_type; + typedef _ExternT extern_type; + typedef __enc_traits state_type; + typedef __enc_traits::__desc_type __desc_type; + typedef __enc_traits __enc_type; + + // Data Members: + static locale::id id; + + explicit + codecvt(size_t __refs = 0) + : __codecvt_abstract_base(__refs) + { } + + explicit + codecvt(__enc_type* __enc, size_t __refs = 0) + : __codecvt_abstract_base(__refs) + { } + + protected: + virtual + ~codecvt() { } + + virtual result + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const; + + virtual result + do_unshift(state_type& __state, extern_type* __to, + extern_type* __to_end, extern_type*& __to_next) const; + + virtual result + do_in(state_type& __state, const extern_type* __from, + const extern_type* __from_end, const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const; + + virtual int + do_encoding() const throw(); + + virtual bool + do_always_noconv() const throw(); + + virtual int + do_length(const state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const; + + virtual int + do_max_length() const throw(); + }; + + template + locale::id + codecvt<_InternT, _ExternT, __enc_traits>::id; + + // This adaptor works around the signature problems of the second + // argument to iconv(): SUSv2 and others use 'const char**', but glibc 2.2 + // uses 'char**', which matches the POSIX 1003.1-2001 standard. + // Using this adaptor, g++ will do the work for us. + template + inline size_t + __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*), + iconv_t __cd, char** __inbuf, size_t* __inbytes, + char** __outbuf, size_t* __outbytes) + { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); } + + template + codecvt_base::result + codecvt<_InternT, _ExternT, __enc_traits>:: + do_out(state_type& __state, const intern_type* __from, + const intern_type* __from_end, const intern_type*& __from_next, + extern_type* __to, extern_type* __to_end, + extern_type*& __to_next) const + { + result __ret = error; + if (__state._M_good()) + { + typedef state_type::__desc_type __desc_type; + const __desc_type* __desc = __state._M_get_out_descriptor(); + const size_t __fmultiple = sizeof(intern_type) / sizeof(char); + size_t __fbytes = __fmultiple * (__from_end - __from); + const size_t __tmultiple = sizeof(extern_type) / sizeof(char); + size_t __tbytes = __tmultiple * (__to_end - __to); + + // Argument list for iconv specifies a byte sequence. Thus, + // all to/from arrays must be brutally casted to char*. + char* __cto = reinterpret_cast(__to); + char* __cfrom; + size_t __conv; + + // Some encodings need a byte order marker as the first item + // in the byte stream, to designate endian-ness. The default + // value for the byte order marker is NULL, so if this is + // the case, it's not necessary and we can just go on our + // merry way. + int __int_bom = __state._M_get_internal_bom(); + if (__int_bom) + { + size_t __size = __from_end - __from; + intern_type* __cfixed = static_cast(__builtin_alloca(sizeof(intern_type) * (__size + 1))); + __cfixed[0] = static_cast(__int_bom); + char_traits::copy(__cfixed + 1, __from, __size); + __cfrom = reinterpret_cast(__cfixed); + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, + &__fbytes, &__cto, &__tbytes); + } + else + { + intern_type* __cfixed = const_cast(__from); + __cfrom = reinterpret_cast(__cfixed); + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes, + &__cto, &__tbytes); + } + + if (__conv != size_t(-1)) + { + __from_next = reinterpret_cast(__cfrom); + __to_next = reinterpret_cast(__cto); + __ret = ok; + } + else + { + if (__fbytes < __fmultiple * (__from_end - __from)) + { + __from_next = reinterpret_cast(__cfrom); + __to_next = reinterpret_cast(__cto); + __ret = partial; + } + else + __ret = error; + } + } + return __ret; + } + + template + codecvt_base::result + codecvt<_InternT, _ExternT, __enc_traits>:: + do_unshift(state_type& __state, extern_type* __to, + extern_type* __to_end, extern_type*& __to_next) const + { + result __ret = error; + if (__state._M_good()) + { + typedef state_type::__desc_type __desc_type; + const __desc_type* __desc = __state._M_get_in_descriptor(); + const size_t __tmultiple = sizeof(intern_type) / sizeof(char); + size_t __tlen = __tmultiple * (__to_end - __to); + + // Argument list for iconv specifies a byte sequence. Thus, + // all to/from arrays must be brutally casted to char*. + char* __cto = reinterpret_cast(__to); + size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL, + &__cto, &__tlen); + + if (__conv != size_t(-1)) + { + __to_next = reinterpret_cast(__cto); + if (__tlen == __tmultiple * (__to_end - __to)) + __ret = noconv; + else if (__tlen == 0) + __ret = ok; + else + __ret = partial; + } + else + __ret = error; + } + return __ret; + } + + template + codecvt_base::result + codecvt<_InternT, _ExternT, __enc_traits>:: + do_in(state_type& __state, const extern_type* __from, + const extern_type* __from_end, const extern_type*& __from_next, + intern_type* __to, intern_type* __to_end, + intern_type*& __to_next) const + { + result __ret = error; + if (__state._M_good()) + { + typedef state_type::__desc_type __desc_type; + const __desc_type* __desc = __state._M_get_in_descriptor(); + const size_t __fmultiple = sizeof(extern_type) / sizeof(char); + size_t __flen = __fmultiple * (__from_end - __from); + const size_t __tmultiple = sizeof(intern_type) / sizeof(char); + size_t __tlen = __tmultiple * (__to_end - __to); + + // Argument list for iconv specifies a byte sequence. Thus, + // all to/from arrays must be brutally casted to char*. + char* __cto = reinterpret_cast(__to); + char* __cfrom; + size_t __conv; + + // Some encodings need a byte order marker as the first item + // in the byte stream, to designate endian-ness. The default + // value for the byte order marker is NULL, so if this is + // the case, it's not necessary and we can just go on our + // merry way. + int __ext_bom = __state._M_get_external_bom(); + if (__ext_bom) + { + size_t __size = __from_end - __from; + extern_type* __cfixed = static_cast(__builtin_alloca(sizeof(extern_type) * (__size + 1))); + __cfixed[0] = static_cast(__ext_bom); + char_traits::copy(__cfixed + 1, __from, __size); + __cfrom = reinterpret_cast(__cfixed); + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, + &__flen, &__cto, &__tlen); + } + else + { + extern_type* __cfixed = const_cast(__from); + __cfrom = reinterpret_cast(__cfixed); + __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, + &__flen, &__cto, &__tlen); + } + + + if (__conv != size_t(-1)) + { + __from_next = reinterpret_cast(__cfrom); + __to_next = reinterpret_cast(__cto); + __ret = ok; + } + else + { + if (__flen < static_cast(__from_end - __from)) + { + __from_next = reinterpret_cast(__cfrom); + __to_next = reinterpret_cast(__cto); + __ret = partial; + } + else + __ret = error; + } + } + return __ret; + } + + template + int + codecvt<_InternT, _ExternT, __enc_traits>:: + do_encoding() const throw() + { + int __ret = 0; + if (sizeof(_ExternT) <= sizeof(_InternT)) + __ret = sizeof(_InternT)/sizeof(_ExternT); + return __ret; + } + + template + bool + codecvt<_InternT, _ExternT, __enc_traits>:: + do_always_noconv() const throw() + { return false; } + + template + int + codecvt<_InternT, _ExternT, __enc_traits>:: + do_length(const state_type&, const extern_type* __from, + const extern_type* __end, size_t __max) const + { return min(__max, static_cast(__end - __from)); } + +#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS +// 74. Garbled text for codecvt::do_max_length + template + int + codecvt<_InternT, _ExternT, __enc_traits>:: + do_max_length() const throw() + { return 1; } +#endif diff --git a/libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc b/libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc new file mode 100644 index 00000000000..0f667d6a4d0 --- /dev/null +++ b/libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc @@ -0,0 +1,49 @@ +// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// + +// Written by Benjamin Kosnik + +#include + +namespace std +{ + // Specializations + template<> + string + messages::do_get(catalog __c, int __setid, int __msgid, + const string& __dfault) const + { + nl_catd __nlc = reinterpret_cast(__c); + return string(catgets(__nlc, __setid, __msgid, __dfault.c_str())); + } +} diff --git a/libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h b/libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h new file mode 100644 index 00000000000..ce82eb8cdf8 --- /dev/null +++ b/libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h @@ -0,0 +1,70 @@ +// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*- + +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 22.2.7.1.2 messages virtual functions +// + +// Written by Benjamin Kosnik + + // Non-virtual member functions. + template + typename messages<_CharT>::catalog + messages<_CharT>::open(const basic_string& __s, const locale& __loc, + const char*) const + { return this->do_open(__s, __loc); } + + // Virtual member functions. + template + messages<_CharT>::~messages() + { } + + template + typename messages<_CharT>::catalog + messages<_CharT>::do_open(const basic_string& __s, + const locale&) const + { return reinterpret_cast(catopen(__s.c_str(), NL_CAT_LOCALE)); } + + template + typename messages<_CharT>::string_type + messages<_CharT>::do_get(catalog __c, int __setid, int __msgid, + const string_type& __dfault) const + { + nl_catd __nlc = reinterpret_cast(__c); + char* __msg = catgets(__nlc, __setid, __msgid, + _M_convert_to_char(__dfault)); + return _M_convert_from_char(__msg); + } + + template + void + messages<_CharT>::do_close(catalog __c) const + { catclose(reinterpret_cast(__c)); } + + diff --git a/libstdc++-v3/config/locale/messages_members_generic.cc b/libstdc++-v3/config/locale/messages_members_generic.cc deleted file mode 100644 index 480ab88d824..00000000000 --- a/libstdc++-v3/config/locale/messages_members_generic.cc +++ /dev/null @@ -1,45 +0,0 @@ -// std::messages implementation details, generic version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // Specializations - template<> - string - messages::do_get(catalog, int, int, const string& __dfault) const - { return __dfault; } -} diff --git a/libstdc++-v3/config/locale/messages_members_generic.h b/libstdc++-v3/config/locale/messages_members_generic.h deleted file mode 100644 index 62dd24d6838..00000000000 --- a/libstdc++-v3/config/locale/messages_members_generic.h +++ /dev/null @@ -1,58 +0,0 @@ -// std::messages implementation details, generic version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions -// - -// Written by Benjamin Kosnik - - // Non-virtual member functions. - template - typename messages<_CharT>::catalog - messages<_CharT>::open(const basic_string& __s, const locale& __loc, - const char*) const - { return this->do_open(__s, __loc); } - - // Virtual member functions. - template - typename messages<_CharT>::catalog - messages<_CharT>::do_open(const basic_string&, const locale&) const - { return 0; } - - template - typename messages<_CharT>::string_type - messages<_CharT>::do_get(catalog, int, int, - const string_type& __dfault) const - { return __dfault; } - - template - void - messages<_CharT>::do_close(catalog) const - { } diff --git a/libstdc++-v3/config/locale/messages_members_gnu.cc b/libstdc++-v3/config/locale/messages_members_gnu.cc deleted file mode 100644 index bd2252d0537..00000000000 --- a/libstdc++-v3/config/locale/messages_members_gnu.cc +++ /dev/null @@ -1,58 +0,0 @@ -// std::messages implementation details, GNU version -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // Specializations - template<> - string - messages::do_get(catalog, int, int, const string& __dfault) const - { -#if 0 - // Requires glibc 2.3 - __c_locale __old = uselocale(_M_c_locale_messages); - const char* __msg = const_cast(gettext(__dfault.c_str())); - uselocale(__old); - return string(__msg); -#else - const char* __old = setlocale(LC_ALL, _M_name_messages); - const char* __msg = gettext(__dfault.c_str()); - setlocale(LC_ALL, __old); - return string(__msg); -#endif - } -} diff --git a/libstdc++-v3/config/locale/messages_members_gnu.h b/libstdc++-v3/config/locale/messages_members_gnu.h deleted file mode 100644 index a83bafff5f1..00000000000 --- a/libstdc++-v3/config/locale/messages_members_gnu.h +++ /dev/null @@ -1,86 +0,0 @@ -// std::messages implementation details, GNU version -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions -// - -// Written by Benjamin Kosnik - - // Non-virtual member functions. - template - typename messages<_CharT>::catalog - messages<_CharT>::open(const basic_string& __s, const locale& __loc, - const char* __dir) const - { - bindtextdomain(__s.c_str(), __dir); - return this->do_open(__s, __loc); - } - - template - typename messages<_CharT>::catalog - messages<_CharT>::do_open(const basic_string& __s, - const locale&) const - { - // No error checking is done, assume the catalog exists and can - // be used. - textdomain(__s.c_str()); - return 0; - } - - template - typename messages<_CharT>::string_type - messages<_CharT>::do_get(catalog, int, int, - const string_type& __dfault) const - { -#if 0 - // Requires glibc 2.3 - __c_locale __old = uselocale(_M_c_locale_messages); - char* __msg = gettext(_M_convert_to_char(__dfault)); - uselocale(__old); - return _M_convert_from_char(__msg); -#else - const char* __old = setlocale(LC_ALL, _M_name_messages); - char* __msg = gettext(_M_convert_to_char(__dfault)); - setlocale(LC_ALL, __old); - return _M_convert_from_char(__msg); -#endif - } - - template - void - messages<_CharT>::do_close(catalog) const - { } - - - - - - - diff --git a/libstdc++-v3/config/locale/messages_members_ieee_1003.1-200x.cc b/libstdc++-v3/config/locale/messages_members_ieee_1003.1-200x.cc deleted file mode 100644 index 0f667d6a4d0..00000000000 --- a/libstdc++-v3/config/locale/messages_members_ieee_1003.1-200x.cc +++ /dev/null @@ -1,49 +0,0 @@ -// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // Specializations - template<> - string - messages::do_get(catalog __c, int __setid, int __msgid, - const string& __dfault) const - { - nl_catd __nlc = reinterpret_cast(__c); - return string(catgets(__nlc, __setid, __msgid, __dfault.c_str())); - } -} diff --git a/libstdc++-v3/config/locale/messages_members_ieee_1003.1-200x.h b/libstdc++-v3/config/locale/messages_members_ieee_1003.1-200x.h deleted file mode 100644 index ce82eb8cdf8..00000000000 --- a/libstdc++-v3/config/locale/messages_members_ieee_1003.1-200x.h +++ /dev/null @@ -1,70 +0,0 @@ -// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.7.1.2 messages virtual functions -// - -// Written by Benjamin Kosnik - - // Non-virtual member functions. - template - typename messages<_CharT>::catalog - messages<_CharT>::open(const basic_string& __s, const locale& __loc, - const char*) const - { return this->do_open(__s, __loc); } - - // Virtual member functions. - template - messages<_CharT>::~messages() - { } - - template - typename messages<_CharT>::catalog - messages<_CharT>::do_open(const basic_string& __s, - const locale&) const - { return reinterpret_cast(catopen(__s.c_str(), NL_CAT_LOCALE)); } - - template - typename messages<_CharT>::string_type - messages<_CharT>::do_get(catalog __c, int __setid, int __msgid, - const string_type& __dfault) const - { - nl_catd __nlc = reinterpret_cast(__c); - char* __msg = catgets(__nlc, __setid, __msgid, - _M_convert_to_char(__dfault)); - return _M_convert_from_char(__msg); - } - - template - void - messages<_CharT>::do_close(catalog __c) const - { catclose(reinterpret_cast(__c)); } - - diff --git a/libstdc++-v3/config/locale/moneypunct_members_generic.cc b/libstdc++-v3/config/locale/moneypunct_members_generic.cc deleted file mode 100644 index 7a31900a8e6..00000000000 --- a/libstdc++-v3/config/locale/moneypunct_members_generic.cc +++ /dev/null @@ -1,111 +0,0 @@ -// std::moneypunct implementation details, generic version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // Construct and return valid pattern consisting of some combination of: - // space none symbol sign value - money_base::pattern - money_base::_S_construct_pattern(char, char, char) - { return _S_default_pattern; } - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } -#endif -} diff --git a/libstdc++-v3/config/locale/moneypunct_members_gnu.cc b/libstdc++-v3/config/locale/moneypunct_members_gnu.cc deleted file mode 100644 index 88a4f95a24a..00000000000 --- a/libstdc++-v3/config/locale/moneypunct_members_gnu.cc +++ /dev/null @@ -1,461 +0,0 @@ -// std::moneypunct implementation details, GNU version -*- C++ -*- - -// Copyright (C) 2001 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - // Construct and return valid pattern consisting of some combination of: - // space none symbol sign value - money_base::pattern - money_base::_S_construct_pattern(char __precedes, char __space, char __posn) - { - pattern __ret; - - // This insanely complicated routine attempts to construct a valid - // pattern for use with monyepunct. A couple of invariants: - - // if (__precedes) symbol -> value - // else value -> symbol - - // if (__space) space - // else none - - // none == never first - // space never first or last - - // Any elegant implementations of this are welcome. - switch (__posn) - { - case 0: - case 1: - // 1 The sign precedes the value and symbol. - if (__space) - { - // Pattern starts with sign. - if (__precedes) - { - __ret.field[1] = symbol; - __ret.field[2] = space; - __ret.field[3] = value; - } - else - { - __ret.field[1] = value; - __ret.field[2] = space; - __ret.field[3] = symbol; - } - __ret.field[0] = sign; - } - else - { - // Pattern starts with sign and ends with none. - if (__precedes) - { - __ret.field[1] = symbol; - __ret.field[2] = value; - } - else - { - __ret.field[1] = value; - __ret.field[2] = symbol; - } - __ret.field[0] = sign; - __ret.field[3] = none; - } - break; - case 2: - // 2 The sign follows the value and symbol. - if (__space) - { - // Pattern either ends with sign. - if (__precedes) - { - __ret.field[0] = symbol; - __ret.field[1] = space; - __ret.field[2] = value; - } - else - { - __ret.field[0] = value; - __ret.field[1] = space; - __ret.field[2] = symbol; - } - __ret.field[3] = sign; - } - else - { - // Pattern ends with sign then none. - if (__precedes) - { - __ret.field[0] = symbol; - __ret.field[1] = value; - } - else - { - __ret.field[0] = value; - __ret.field[1] = symbol; - } - __ret.field[2] = sign; - __ret.field[3] = none; - } - break; - case 3: - // 3 The sign immediately precedes the symbol. - if (__space) - { - // Have space. - if (__precedes) - { - __ret.field[0] = sign; - __ret.field[1] = symbol; - __ret.field[2] = space; - __ret.field[3] = value; - } - else - { - __ret.field[0] = value; - __ret.field[1] = space; - __ret.field[2] = sign; - __ret.field[3] = symbol; - } - } - else - { - // Have none. - if (__precedes) - { - __ret.field[0] = sign; - __ret.field[1] = symbol; - __ret.field[2] = value; - } - else - { - __ret.field[0] = value; - __ret.field[1] = sign; - __ret.field[2] = symbol; - } - __ret.field[3] = none; - } - break; - case 4: - // 4 The sign immediately follows the symbol. - if (__space) - { - // Have space. - if (__precedes) - { - __ret.field[0] = symbol; - __ret.field[1] = sign; - __ret.field[2] = space; - __ret.field[3] = value; - } - else - { - __ret.field[0] = value; - __ret.field[1] = space; - __ret.field[2] = symbol; - __ret.field[3] = sign; - } - } - else - { - // Have none. - if (__precedes) - { - __ret.field[0] = symbol; - __ret.field[1] = sign; - __ret.field[2] = value; - } - else - { - __ret.field[0] = value; - __ret.field[1] = symbol; - __ret.field[2] = sign; - } - __ret.field[3] = none; - } - break; - default: - ; - } - return __ret; - } - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - else - { - // Named locale. - _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc)); - _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc)); - _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); - _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); - _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); - - // _Intl == true - _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); - _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc)); - char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); - char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); - char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); - _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); - char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); - char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); - char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); - if (!__nposn) - _M_negative_sign = "()"; - _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); - } - } - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - else - { - // Named locale. - _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc)); - _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc)); - _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc); - _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); - _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); - - // _Intl == false - _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); - _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); - char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); - char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); - char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); - _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); - char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); - char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); - char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); - if (!__nposn) - _M_negative_sign = "()"; - _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); - } - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - else - { - // Named locale. - _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); - - _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); - _M_grouping = __nl_langinfo_l(GROUPING, __cloc); - - mbstate_t __state; - const char* __cs; - string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); - string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); - string __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc); - string::size_type __len = max(__cpossign.size(), __cnegsign.size()); - __len = max(__len, __ccurr.size()) + 1; - wchar_t* __ws = static_cast(__builtin_alloca(sizeof(wchar_t) * __len)); - - // NB: Should swich to __cloc's ctype info first. - if (__cpossign.size()) - { - memset(&__state, 0, sizeof(mbstate_t)); - __cs = __cpossign.c_str(); - mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state); - _M_positive_sign = string_type(__ws); - } - else - _M_positive_sign = string_type(); - - if (__cnegsign.size()) - { - memset(&__state, 0, sizeof(mbstate_t)); - __cs = __cnegsign.c_str(); - mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state); - _M_negative_sign = string_type(__ws); - } - else - _M_negative_sign = string_type(); - - // _Intl == true. - if (__ccurr.size()) - { - memset(&__state, 0, sizeof(mbstate_t)); - __cs = __ccurr.c_str(); - mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state); - _M_curr_symbol = string_type(__ws); - } - else - _M_curr_symbol = string_type(); - - _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc)); - char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc)); - char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc)); - char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc)); - _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); - char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc)); - char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); - char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc)); - if (!__nposn) - _M_negative_sign = L"()"; - _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); - } - } - - template<> - void - moneypunct::_M_initialize_moneypunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_curr_symbol = string_type(); - _M_positive_sign = string_type(); - _M_negative_sign = string_type(); - _M_frac_digits = 0; - _M_pos_format = money_base::_S_default_pattern; - _M_neg_format = money_base::_S_default_pattern; - } - else - { - // Named locale. - _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); - _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); - _M_grouping = __nl_langinfo_l(GROUPING, __cloc); - - mbstate_t __state; - const char* __cs; - string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc); - string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc); - string __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc); - string::size_type __len = max(__cpossign.size(), __cnegsign.size()); - __len = max(__len, __ccurr.size()) + 1; - wchar_t* __ws = static_cast(__builtin_alloca(sizeof(wchar_t) * __len)); - - // NB: Should swich to __cloc's ctype info first. - if (__cpossign.size()) - { - memset(&__state, 0, sizeof(mbstate_t)); - __cs = __cpossign.c_str(); - mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state); - _M_positive_sign = string_type(__ws); - } - else - _M_positive_sign = string_type(); - - if (__cnegsign.size()) - { - memset(&__state, 0, sizeof(mbstate_t)); - __cs = __cnegsign.c_str(); - mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state); - _M_negative_sign = string_type(__ws); - } - else - _M_negative_sign = string_type(); - - // _Intl == false. - if (__ccurr.size()) - { - memset(&__state, 0, sizeof(mbstate_t)); - __cs = __ccurr.c_str(); - mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state); - _M_curr_symbol = string_type(__ws); - } - else - _M_curr_symbol = string_type(); - - _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc)); - char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc)); - char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc)); - char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc)); - _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn); - char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc)); - char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); - char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc)); - if (!__nposn) - _M_negative_sign = L"()"; - _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); - } - } -#endif -} diff --git a/libstdc++-v3/config/locale/numpunct_members_generic.cc b/libstdc++-v3/config/locale/numpunct_members_generic.cc deleted file mode 100644 index 7a511e3a36a..00000000000 --- a/libstdc++-v3/config/locale/numpunct_members_generic.cc +++ /dev/null @@ -1,65 +0,0 @@ -// std::numpunct implementation details, generic version -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - template<> - void - numpunct::_M_initialize_numpunct(__c_locale) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - _M_truename = "true"; - _M_falsename = "false"; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - numpunct::_M_initialize_numpunct(__c_locale) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - _M_truename = L"true"; - _M_falsename = L"false"; - } -#endif -} diff --git a/libstdc++-v3/config/locale/numpunct_members_gnu.cc b/libstdc++-v3/config/locale/numpunct_members_gnu.cc deleted file mode 100644 index 4284c7c07b3..00000000000 --- a/libstdc++-v3/config/locale/numpunct_members_gnu.cc +++ /dev/null @@ -1,98 +0,0 @@ -// std::numpunct implementation details, GNU version -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - template<> - void - numpunct::_M_initialize_numpunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_decimal_point = '.'; - _M_thousands_sep = ','; - _M_grouping = ""; - } - else - { - // Named locale. - _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc)); - _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc)); - // Check for NUL, which implies no grouping. - if (_M_thousands_sep == '\0') - _M_grouping = ""; - else - _M_grouping = __nl_langinfo_l(GROUPING, __cloc); - } - // NB: There is no way to extact this info from posix locales. - // _M_truename = __nl_langinfo_l(YESSTR, __cloc); - _M_truename = "true"; - // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); - _M_falsename = "false"; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - numpunct::_M_initialize_numpunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_decimal_point = L'.'; - _M_thousands_sep = L','; - _M_grouping = ""; - } - else - { - // Named locale. - _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); - _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); - if (_M_thousands_sep == L'\0') - _M_grouping = ""; - else - _M_grouping = __nl_langinfo_l(GROUPING, __cloc); - } - // NB: There is no way to extact this info from posix locales. - // _M_truename = __nl_langinfo_l(YESSTR, __cloc); - _M_truename = L"true"; - // _M_falsename = __nl_langinfo_l(NOSTR, __cloc); - _M_falsename = L"false"; - } -#endif -} diff --git a/libstdc++-v3/config/locale/time_members_generic.cc b/libstdc++-v3/config/locale/time_members_generic.cc deleted file mode 100644 index e546f30a0db..00000000000 --- a/libstdc++-v3/config/locale/time_members_generic.cc +++ /dev/null @@ -1,188 +0,0 @@ -// std::time_get, std::time_put implementation, GNU version -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions -// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - template<> - void - __timepunct:: - _M_put_helper(char* __s, size_t __maxlen, const char* __format, - const tm* __tm) const - { - const char* __old = setlocale(LC_ALL, _M_name_timepunct); - strftime(__s, __maxlen, __format, __tm); - setlocale(LC_ALL, __old); - } - - template<> - void - __timepunct::_M_initialize_timepunct(__c_locale) - { - // "C" locale - _M_date_format = "%m/%d/%Y"; - _M_date_era_format = "%m/%d/%Y"; - _M_time_format = "%H:%M:%S"; - _M_time_era_format = "%H:%M:%S"; - _M_date_time_format = ""; - _M_date_time_era_format = ""; - _M_am = "AM"; - _M_pm = "PM"; - _M_am_pm_format = ""; - - // Day names, starting with "C"'s Sunday. - _M_day1 = "Sunday"; - _M_day2 = "Monday"; - _M_day3 = "Tuesday"; - _M_day4 = "Wednesday"; - _M_day5 = "Thursday"; - _M_day6 = "Friday"; - _M_day7 = "Saturday"; - - // Abbreviated day names, starting with "C"'s Sun. - _M_day_a1 = "Sun"; - _M_day_a2 = "Mon"; - _M_day_a3 = "Tue"; - _M_day_a4 = "Wed"; - _M_day_a5 = "Thu"; - _M_day_a6 = "Fri"; - _M_day_a7 = "Sat"; - - // Month names, starting with "C"'s January. - _M_month01 = "January"; - _M_month02 = "February"; - _M_month03 = "March"; - _M_month04 = "April"; - _M_month05 = "May"; - _M_month06 = "June"; - _M_month07 = "July"; - _M_month08 = "August"; - _M_month09 = "September"; - _M_month10 = "October"; - _M_month11 = "November"; - _M_month12 = "December"; - - // Abbreviated month names, starting with "C"'s Jan. - _M_month_a01 = "Jan"; - _M_month_a02 = "Feb"; - _M_month_a03 = "Mar"; - _M_month_a04 = "Apr"; - _M_month_a05 = "May"; - _M_month_a06 = "Jun"; - _M_month_a07 = "July"; - _M_month_a08 = "Aug"; - _M_month_a09 = "Sep"; - _M_month_a10 = "Oct"; - _M_month_a11 = "Nov"; - _M_month_a12 = "Dec"; - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - __timepunct:: - _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format, - const tm* __tm) const - { - const char* __old = setlocale(LC_ALL, _M_name_timepunct); - wcsftime(__s, __maxlen, __format, __tm); - setlocale(LC_ALL, __old); - } - - template<> - void - __timepunct::_M_initialize_timepunct(__c_locale) - { - // "C" locale - _M_date_format = L"%m/%d/%y"; - _M_date_era_format = L"%m/%d/%y"; - _M_time_format = L"%H:%M:%S"; - _M_time_era_format = L"%H:%M:%S"; - _M_date_time_format = L""; - _M_date_time_era_format = L""; - _M_am = L"AM"; - _M_pm = L"PM"; - _M_am_pm_format = L""; - - // Day names, starting with "C"'s Sunday. - _M_day1 = L"Sunday"; - _M_day2 = L"Monday"; - _M_day3 = L"Tuesday"; - _M_day4 = L"Wednesday"; - _M_day5 = L"Thursday"; - _M_day6 = L"Friday"; - _M_day7 = L"Saturday"; - - // Abbreviated day names, starting with "C"'s Sun. - _M_day_a1 = L"Sun"; - _M_day_a2 = L"Mon"; - _M_day_a3 = L"Tue"; - _M_day_a4 = L"Wed"; - _M_day_a5 = L"Thu"; - _M_day_a6 = L"Fri"; - _M_day_a7 = L"Sat"; - - // Month names, starting with "C"'s January. - _M_month01 = L"January"; - _M_month02 = L"February"; - _M_month03 = L"March"; - _M_month04 = L"April"; - _M_month05 = L"May"; - _M_month06 = L"June"; - _M_month07 = L"July"; - _M_month08 = L"August"; - _M_month09 = L"September"; - _M_month10 = L"October"; - _M_month11 = L"November"; - _M_month12 = L"December"; - - // Abbreviated month names, starting with "C"'s Jan. - _M_month_a01 = L"Jan"; - _M_month_a02 = L"Feb"; - _M_month_a03 = L"Mar"; - _M_month_a04 = L"Apr"; - _M_month_a05 = L"May"; - _M_month_a06 = L"Jun"; - _M_month_a07 = L"July"; - _M_month_a08 = L"Aug"; - _M_month_a09 = L"Sep"; - _M_month_a10 = L"Oct"; - _M_month_a11 = L"Nov"; - _M_month_a12 = L"Dec"; - } -#endif -} diff --git a/libstdc++-v3/config/locale/time_members_gnu.cc b/libstdc++-v3/config/locale/time_members_gnu.cc deleted file mode 100644 index f00ec4a89c8..00000000000 --- a/libstdc++-v3/config/locale/time_members_gnu.cc +++ /dev/null @@ -1,330 +0,0 @@ -// std::time_get, std::time_put implementation, GNU version -*- C++ -*- - -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -// -// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions -// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions -// - -// Written by Benjamin Kosnik - -#include - -namespace std -{ - template<> - void - __timepunct:: - _M_put_helper(char* __s, size_t __maxlen, const char* __format, - const tm* __tm) const - { -#if 0 - // Requires glibc 2.3 - if (_M_c_locale_timepunct) - __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm); - else - strftime(__s, __maxlen, __format, __tm); -#else - const char* __old = setlocale(LC_ALL, _M_name_timepunct); - strftime(__s, __maxlen, __format, __tm); - setlocale(LC_ALL, __old); -#endif - } - - template<> - void - __timepunct::_M_initialize_timepunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_date_format = "%m/%d/%y"; - _M_date_era_format = "%m/%d/%y"; - _M_time_format = "%H:%M:%S"; - _M_time_era_format = "%H:%M:%S"; - _M_date_time_format = ""; - _M_date_time_era_format = ""; - _M_am = "AM"; - _M_pm = "PM"; - _M_am_pm_format = ""; - - // Day names, starting with "C"'s Sunday. - _M_day1 = "Sunday"; - _M_day2 = "Monday"; - _M_day3 = "Tuesday"; - _M_day4 = "Wednesday"; - _M_day5 = "Thursday"; - _M_day6 = "Friday"; - _M_day7 = "Saturday"; - - // Abbreviated day names, starting with "C"'s Sun. - _M_day_a1 = "Sun"; - _M_day_a2 = "Mon"; - _M_day_a3 = "Tue"; - _M_day_a4 = "Wed"; - _M_day_a5 = "Thu"; - _M_day_a6 = "Fri"; - _M_day_a7 = "Sat"; - - // Month names, starting with "C"'s January. - _M_month01 = "January"; - _M_month02 = "February"; - _M_month03 = "March"; - _M_month04 = "April"; - _M_month05 = "May"; - _M_month06 = "June"; - _M_month07 = "July"; - _M_month08 = "August"; - _M_month09 = "September"; - _M_month10 = "October"; - _M_month11 = "November"; - _M_month12 = "December"; - - // Abbreviated month names, starting with "C"'s Jan. - _M_month_a01 = "Jan"; - _M_month_a02 = "Feb"; - _M_month_a03 = "Mar"; - _M_month_a04 = "Apr"; - _M_month_a05 = "May"; - _M_month_a06 = "Jun"; - _M_month_a07 = "July"; - _M_month_a08 = "Aug"; - _M_month_a09 = "Sep"; - _M_month_a10 = "Oct"; - _M_month_a11 = "Nov"; - _M_month_a12 = "Dec"; - } - else - { - _M_c_locale_timepunct = _S_clone_c_locale(__cloc); - - _M_date_format = __nl_langinfo_l(D_FMT, __cloc); - _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc); - _M_time_format = __nl_langinfo_l(T_FMT, __cloc); - _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc); - _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc); - _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc); - _M_am = __nl_langinfo_l(AM_STR, __cloc); - _M_pm = __nl_langinfo_l(PM_STR, __cloc); - _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc); - - // Day names, starting with "C"'s Sunday. - _M_day1 = __nl_langinfo_l(DAY_1, __cloc); - _M_day2 = __nl_langinfo_l(DAY_2, __cloc); - _M_day3 = __nl_langinfo_l(DAY_3, __cloc); - _M_day4 = __nl_langinfo_l(DAY_4, __cloc); - _M_day5 = __nl_langinfo_l(DAY_5, __cloc); - _M_day6 = __nl_langinfo_l(DAY_6, __cloc); - _M_day7 = __nl_langinfo_l(DAY_7, __cloc); - - // Abbreviated day names, starting with "C"'s Sun. - _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc); - _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc); - _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc); - _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc); - _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc); - _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc); - _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc); - - // Month names, starting with "C"'s January. - _M_month01 = __nl_langinfo_l(MON_1, __cloc); - _M_month02 = __nl_langinfo_l(MON_2, __cloc); - _M_month03 = __nl_langinfo_l(MON_3, __cloc); - _M_month04 = __nl_langinfo_l(MON_4, __cloc); - _M_month05 = __nl_langinfo_l(MON_5, __cloc); - _M_month06 = __nl_langinfo_l(MON_6, __cloc); - _M_month07 = __nl_langinfo_l(MON_7, __cloc); - _M_month08 = __nl_langinfo_l(MON_8, __cloc); - _M_month09 = __nl_langinfo_l(MON_9, __cloc); - _M_month10 = __nl_langinfo_l(MON_10, __cloc); - _M_month11 = __nl_langinfo_l(MON_11, __cloc); - _M_month12 = __nl_langinfo_l(MON_12, __cloc); - - // Abbreviated month names, starting with "C"'s Jan. - _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc); - _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc); - _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc); - _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc); - _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc); - _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc); - _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc); - _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc); - _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc); - _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc); - _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc); - _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc); - } - } - -#ifdef _GLIBCPP_USE_WCHAR_T - template<> - void - __timepunct:: - _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format, - const tm* __tm) const - { -#if 0 - // Requires glibc 2.3 - if (_M_c_locale_timepunct) - __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm); - else - wcsftime(__s, __maxlen, __format, __tm); -#else - const char* __old = setlocale(LC_ALL, _M_name_timepunct); - wcsftime(__s, __maxlen, __format, __tm); - setlocale(LC_ALL, __old); -#endif - } - - template<> - void - __timepunct::_M_initialize_timepunct(__c_locale __cloc) - { - if (!__cloc) - { - // "C" locale - _M_date_format = L"%m/%d/%y"; - _M_date_era_format = L"%m/%d/%y"; - _M_time_format = L"%H:%M:%S"; - _M_time_era_format = L"%H:%M:%S"; - _M_date_time_format = L""; - _M_date_time_era_format = L""; - _M_am = L"AM"; - _M_pm = L"PM"; - _M_am_pm_format = L""; - - // Day names, starting with "C"'s Sunday. - _M_day1 = L"Sunday"; - _M_day2 = L"Monday"; - _M_day3 = L"Tuesday"; - _M_day4 = L"Wednesday"; - _M_day5 = L"Thursday"; - _M_day6 = L"Friday"; - _M_day7 = L"Saturday"; - - // Abbreviated day names, starting with "C"'s Sun. - _M_day_a1 = L"Sun"; - _M_day_a2 = L"Mon"; - _M_day_a3 = L"Tue"; - _M_day_a4 = L"Wed"; - _M_day_a5 = L"Thu"; - _M_day_a6 = L"Fri"; - _M_day_a7 = L"Sat"; - - // Month names, starting with "C"'s January. - _M_month01 = L"January"; - _M_month02 = L"February"; - _M_month03 = L"March"; - _M_month04 = L"April"; - _M_month05 = L"May"; - _M_month06 = L"June"; - _M_month07 = L"July"; - _M_month08 = L"August"; - _M_month09 = L"September"; - _M_month10 = L"October"; - _M_month11 = L"November"; - _M_month12 = L"December"; - - // Abbreviated month names, starting with "C"'s Jan. - _M_month_a01 = L"Jan"; - _M_month_a02 = L"Feb"; - _M_month_a03 = L"Mar"; - _M_month_a04 = L"Apr"; - _M_month_a05 = L"May"; - _M_month_a06 = L"Jun"; - _M_month_a07 = L"July"; - _M_month_a08 = L"Aug"; - _M_month_a09 = L"Sep"; - _M_month_a10 = L"Oct"; - _M_month_a11 = L"Nov"; - _M_month_a12 = L"Dec"; - } - else - { - _M_c_locale_timepunct = _S_clone_c_locale(__cloc); - - _M_date_format = reinterpret_cast(__nl_langinfo_l(_NL_WD_FMT, __cloc)); - _M_date_era_format = reinterpret_cast(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc)); - _M_time_format = reinterpret_cast(__nl_langinfo_l(_NL_WT_FMT, __cloc)); - _M_time_era_format = reinterpret_cast(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc)); - _M_date_time_format = reinterpret_cast(__nl_langinfo_l(_NL_WD_T_FMT, __cloc)); - _M_date_time_era_format = reinterpret_cast(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc)); - _M_am = reinterpret_cast(__nl_langinfo_l(_NL_WAM_STR, __cloc)); - _M_pm = reinterpret_cast(__nl_langinfo_l(_NL_WPM_STR, __cloc)); - _M_am_pm_format = reinterpret_cast(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc)); - - // Day names, starting with "C"'s Sunday. - _M_day1 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_1, __cloc)); - _M_day2 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_2, __cloc)); - _M_day3 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_3, __cloc)); - _M_day4 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_4, __cloc)); - _M_day5 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_5, __cloc)); - _M_day6 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_6, __cloc)); - _M_day7 = reinterpret_cast(__nl_langinfo_l(_NL_WDAY_7, __cloc)); - - // Abbreviated day names, starting with "C"'s Sun. - _M_day_a1 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_1, __cloc)); - _M_day_a2 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_2, __cloc)); - _M_day_a3 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_3, __cloc)); - _M_day_a4 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_4, __cloc)); - _M_day_a5 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_5, __cloc)); - _M_day_a6 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_6, __cloc)); - _M_day_a7 = reinterpret_cast(__nl_langinfo_l(_NL_WABDAY_7, __cloc)); - - // Month names, starting with "C"'s January. - _M_month01 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_1, __cloc)); - _M_month02 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_2, __cloc)); - _M_month03 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_3, __cloc)); - _M_month04 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_4, __cloc)); - _M_month05 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_5, __cloc)); - _M_month06 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_6, __cloc)); - _M_month07 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_7, __cloc)); - _M_month08 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_8, __cloc)); - _M_month09 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_9, __cloc)); - _M_month10 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_10, __cloc)); - _M_month11 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_11, __cloc)); - _M_month12 = reinterpret_cast(__nl_langinfo_l(_NL_WMON_12, __cloc)); - - // Abbreviated month names, starting with "C"'s Jan. - _M_month_a01 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_1, __cloc)); - _M_month_a02 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_2, __cloc)); - _M_month_a03 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_3, __cloc)); - _M_month_a04 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_4, __cloc)); - _M_month_a05 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_5, __cloc)); - _M_month_a06 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_6, __cloc)); - _M_month_a07 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_7, __cloc)); - _M_month_a08 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_8, __cloc)); - _M_month_a09 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_9, __cloc)); - _M_month_a10 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_10, __cloc)); - _M_month_a11 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_11, __cloc)); - _M_month_a12 = reinterpret_cast(__nl_langinfo_l(_NL_WABMON_12, __cloc)); - } - } -#endif -} diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 10b7d224b20..0dcaa166bcf 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -3076,16 +3076,16 @@ fi # Don't use gettext. USE_NLS=no - CLOCALE_H=config/locale/c_locale_generic.h - CLOCALE_CC=config/locale/c_locale_generic.cc - CCODECVT_H=config/locale/codecvt_specializations_generic.h - CCOLLATE_CC=config/locale/collate_members_generic.cc - CCTYPE_CC=config/locale/ctype_members_generic.cc - CMESSAGES_H=config/locale/messages_members_generic.h - CMESSAGES_CC=config/locale/messages_members_generic.cc - CMONEY_CC=config/locale/moneypunct_members_generic.cc - CNUMERIC_CC=config/locale/numpunct_members_generic.cc - CTIME_CC=config/locale/time_members_generic.cc + CLOCALE_H=config/locale/generic/c_locale.h + CLOCALE_CC=config/locale/generic/c_locale.cc + CCODECVT_H=config/locale/generic/codecvt_specializations.h + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/generic/ctype_members.cc + CMESSAGES_H=config/locale/generic/messages_members.h + CMESSAGES_CC=config/locale/generic/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_CC=config/locale/generic/time_members.cc ;; xgnu) echo "$ac_t""gnu" 1>&6 @@ -3106,16 +3106,16 @@ fi - CLOCALE_H=config/locale/c_locale_gnu.h - CLOCALE_CC=config/locale/c_locale_gnu.cc - CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h - CCOLLATE_CC=config/locale/collate_members_gnu.cc - CCTYPE_CC=config/locale/ctype_members_gnu.cc - CMESSAGES_H=config/locale/messages_members_gnu.h - CMESSAGES_CC=config/locale/messages_members_gnu.cc - CMONEY_CC=config/locale/moneypunct_members_gnu.cc - CNUMERIC_CC=config/locale/numpunct_members_gnu.cc - CTIME_CC=config/locale/time_members_gnu.cc + CLOCALE_H=config/locale/gnu/c_locale.h + CLOCALE_CC=config/locale/gnu/c_locale.cc + CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h + CCOLLATE_CC=config/locale/gnu/collate_members.cc + CCTYPE_CC=config/locale/gnu/ctype_members.cc + CMESSAGES_H=config/locale/gnu/messages_members.h + CMESSAGES_CC=config/locale/gnu/messages_members.cc + CMONEY_CC=config/locale/gnu/monetary_members.cc + CNUMERIC_CC=config/locale/gnu/numeric_members.cc + CTIME_CC=config/locale/gnu/time_members.cc ;; xieee_1003.1) echo "$ac_t""generic" 1>&6 @@ -3123,16 +3123,16 @@ fi # Don't use gettext. USE_NLS=no - CLOCALE_H=config/locale/c_locale_ieee_1003.1-200x.h - CLOCALE_CC=config/locale/c_locale_ieee_1003.1-200x.cc - CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h - CCOLLATE_CC=config/locale/collate_members_generic.cc - CCTYPE_CC=config/locale/ctype_members_generic.cc - CMESSAGES_H=config/locale/messages_members_ieee_1003.1-200x.h - CMESSAGES_CC=config/locale/messages_members_ieee_1003.1-200x.cc - CMONEY_CC=config/locale/moneypunct_members_generic.cc - CNUMERIC_CC=config/locale/numpunct_members_generic.cc - CTIME_CC=config/locale/time_members_generic.cc + CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h + CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc + CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/generic/ctype_members.cc + CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h + CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_CC=config/locale/generic/time_members.cc ;; *) echo "$enable_clocale is an unknown locale package" 1>&2 @@ -19362,14 +19362,14 @@ if test $enable_symvers = yes ; then echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:19373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* enable_symvers=gnu else @@ -19411,7 +19411,7 @@ else GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE= fi echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6 -echo "configure:19383: checking versioning on shared library symbols" >&5 +echo "configure:19415: checking versioning on shared library symbols" >&5 echo "$ac_t""$enable_symvers" 1>&6 @@ -19501,13 +19501,13 @@ glibcpp_toolexeclibdir=no glibcpp_prefixdir=${prefix} echo $ac_n "checking for interface version number""... $ac_c" 1>&6 -echo "configure:19473: checking for interface version number" >&5 +echo "configure:19505: checking for interface version number" >&5 libstdcxx_interface=$INTERFACE echo "$ac_t""$libstdcxx_interface" 1>&6 # Process the option --with-gxx-include-dir= echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6 -echo "configure:19479: checking for --with-gxx-include-dir" >&5 +echo "configure:19511: checking for --with-gxx-include-dir" >&5 # Check whether --with-gxx-include-dir or --without-gxx-include-dir was given. if test "${with_gxx_include_dir+set}" = set; then withval="$with_gxx_include_dir" @@ -19531,7 +19531,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6 # Process the option "--enable-version-specific-runtime-libs" echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6 -echo "configure:19503: checking for --enable-version-specific-runtime-libs" >&5 +echo "configure:19535: checking for --enable-version-specific-runtime-libs" >&5 # Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given. if test "${enable_version_specific_runtime_libs+set}" = set; then enableval="$enable_version_specific_runtime_libs" @@ -19578,7 +19578,7 @@ if test x"$glibcpp_toolexecdir" = x"no"; then fi echo $ac_n "checking for install location""... $ac_c" 1>&6 -echo "configure:19550: checking for install location" >&5 +echo "configure:19582: checking for install location" >&5 echo "$ac_t""$gxx_include_dir" 1>&6 @@ -20088,7 +20088,7 @@ EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF diff --git a/libstdc++-v3/docs/html/configopts.html b/libstdc++-v3/docs/html/configopts.html index 6c7374078c0..27f3c49404e 100644 --- a/libstdc++-v3/docs/html/configopts.html +++ b/libstdc++-v3/docs/html/configopts.html @@ -85,8 +85,8 @@ options
--enable-clocale=MODEL

Select a target-specific underlying locale package. The - choices are 'ieee_1003.1' to specify an X/Open, Standard Unix - (IEEE Std. 1003.1-200x) model based on langinfo/iconv/catgets, + choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix + (IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets, 'gnu' to specify a model based on functionality from the GNU C library (langinfo/iconv/gettext) (from glibc, the GNU C diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 9043a929e5e..f7c9c54ea8c 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -68,6 +68,7 @@ AS = @AS@ ATOMICITY_INC_SRCDIR = @ATOMICITY_INC_SRCDIR@ AWK = @AWK@ BASIC_FILE_H = @BASIC_FILE_H@ +BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ @@ -89,17 +90,17 @@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ +GLIBC21 = @GLIBC21@ GLIBCPP_INCLUDES = @GLIBCPP_INCLUDES@ GLIBCPP_IS_CROSS_COMPILING = @GLIBCPP_IS_CROSS_COMPILING@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ -GT_NO = @GT_NO@ -GT_YES = @GT_YES@ -INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ INSTOBJEXT = @INSTOBJEXT@ -INTLDEPS = @INTLDEPS@ +INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ +INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +LIBICONV = @LIBICONV@ LIBIO_INCLUDES = @LIBIO_INCLUDES@ LIBMATHOBJS = @LIBMATHOBJS@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@ @@ -141,7 +142,6 @@ glibcpp_prefixdir = @glibcpp_prefixdir@ glibcpp_toolexecdir = @glibcpp_toolexecdir@ glibcpp_toolexeclibdir = @glibcpp_toolexeclibdir@ ifGNUmake = @ifGNUmake@ -l = @l@ libio_la = @libio_la@ libtool_VERSION = @libtool_VERSION@ release_VERSION = @release_VERSION@ @@ -159,52 +159,278 @@ glibcpp_builddir = @glibcpp_builddir@ bits_srcdir = ${glibcpp_srcdir}/include/bits bits_builddir = ./bits -bits_headers = ${bits_srcdir}/basic_ios.h ${bits_srcdir}/basic_ios.tcc ${bits_srcdir}/basic_string.h ${bits_srcdir}/basic_string.tcc ${bits_srcdir}/boost_concept_check.h ${bits_srcdir}/char_traits.h ${bits_srcdir}/codecvt.h ${bits_srcdir}/concept_check.h ${bits_srcdir}/cpp_type_traits.h ${bits_srcdir}/fpos.h ${bits_srcdir}/fstream.tcc ${bits_srcdir}/functexcept.h ${bits_srcdir}/generic_shadow.h ${bits_srcdir}/gslice.h ${bits_srcdir}/gslice_array.h ${bits_srcdir}/indirect_array.h ${bits_srcdir}/ios_base.h ${bits_srcdir}/istream.tcc ${bits_srcdir}/locale_facets.h ${bits_srcdir}/locale_facets.tcc ${bits_srcdir}/localefwd.h ${bits_srcdir}/mask_array.h ${bits_srcdir}/ostream.tcc ${bits_srcdir}/pthread_allocimpl.h ${bits_srcdir}/stream_iterator.h ${bits_srcdir}/streambuf_iterator.h ${bits_srcdir}/slice.h ${bits_srcdir}/slice_array.h ${bits_srcdir}/sstream.tcc ${bits_srcdir}/stl_algo.h ${bits_srcdir}/stl_algobase.h ${bits_srcdir}/stl_alloc.h ${bits_srcdir}/stl_bvector.h ${bits_srcdir}/stl_construct.h ${bits_srcdir}/stl_deque.h ${bits_srcdir}/stl_function.h ${bits_srcdir}/stl_heap.h ${bits_srcdir}/stl_iterator.h ${bits_srcdir}/stl_iterator_base_funcs.h ${bits_srcdir}/stl_iterator_base_types.h ${bits_srcdir}/stl_list.h ${bits_srcdir}/stl_map.h ${bits_srcdir}/stl_multimap.h ${bits_srcdir}/stl_multiset.h ${bits_srcdir}/stl_numeric.h ${bits_srcdir}/stl_pair.h ${bits_srcdir}/stl_pthread_alloc.h ${bits_srcdir}/stl_queue.h ${bits_srcdir}/stl_raw_storage_iter.h ${bits_srcdir}/stl_relops.h ${bits_srcdir}/stl_set.h ${bits_srcdir}/stl_stack.h ${bits_srcdir}/stl_tempbuf.h ${bits_srcdir}/stl_threads.h ${bits_srcdir}/stl_tree.h ${bits_srcdir}/stl_uninitialized.h ${bits_srcdir}/stl_vector.h ${bits_srcdir}/streambuf.tcc ${bits_srcdir}/stringfwd.h ${bits_srcdir}/type_traits.h ${bits_srcdir}/valarray_array.h ${bits_srcdir}/valarray_array.tcc ${bits_srcdir}/valarray_meta.h +bits_headers = \ + ${bits_srcdir}/basic_ios.h \ + ${bits_srcdir}/basic_ios.tcc \ + ${bits_srcdir}/basic_string.h \ + ${bits_srcdir}/basic_string.tcc \ + ${bits_srcdir}/boost_concept_check.h \ + ${bits_srcdir}/char_traits.h \ + ${bits_srcdir}/codecvt.h \ + ${bits_srcdir}/concept_check.h \ + ${bits_srcdir}/cpp_type_traits.h \ + ${bits_srcdir}/fpos.h \ + ${bits_srcdir}/fstream.tcc \ + ${bits_srcdir}/functexcept.h \ + ${bits_srcdir}/generic_shadow.h \ + ${bits_srcdir}/gslice.h \ + ${bits_srcdir}/gslice_array.h \ + ${bits_srcdir}/indirect_array.h \ + ${bits_srcdir}/ios_base.h \ + ${bits_srcdir}/istream.tcc \ + ${bits_srcdir}/locale_facets.h \ + ${bits_srcdir}/locale_facets.tcc \ + ${bits_srcdir}/localefwd.h \ + ${bits_srcdir}/mask_array.h \ + ${bits_srcdir}/ostream.tcc \ + ${bits_srcdir}/pthread_allocimpl.h \ + ${bits_srcdir}/stream_iterator.h \ + ${bits_srcdir}/streambuf_iterator.h \ + ${bits_srcdir}/slice.h \ + ${bits_srcdir}/slice_array.h \ + ${bits_srcdir}/sstream.tcc \ + ${bits_srcdir}/stl_algo.h \ + ${bits_srcdir}/stl_algobase.h \ + ${bits_srcdir}/stl_alloc.h \ + ${bits_srcdir}/stl_bvector.h \ + ${bits_srcdir}/stl_construct.h \ + ${bits_srcdir}/stl_deque.h \ + ${bits_srcdir}/stl_function.h \ + ${bits_srcdir}/stl_heap.h \ + ${bits_srcdir}/stl_iterator.h \ + ${bits_srcdir}/stl_iterator_base_funcs.h \ + ${bits_srcdir}/stl_iterator_base_types.h \ + ${bits_srcdir}/stl_list.h \ + ${bits_srcdir}/stl_map.h \ + ${bits_srcdir}/stl_multimap.h \ + ${bits_srcdir}/stl_multiset.h \ + ${bits_srcdir}/stl_numeric.h \ + ${bits_srcdir}/stl_pair.h \ + ${bits_srcdir}/stl_pthread_alloc.h \ + ${bits_srcdir}/stl_queue.h \ + ${bits_srcdir}/stl_raw_storage_iter.h \ + ${bits_srcdir}/stl_relops.h \ + ${bits_srcdir}/stl_set.h \ + ${bits_srcdir}/stl_stack.h \ + ${bits_srcdir}/stl_tempbuf.h \ + ${bits_srcdir}/stl_threads.h \ + ${bits_srcdir}/stl_tree.h \ + ${bits_srcdir}/stl_uninitialized.h \ + ${bits_srcdir}/stl_vector.h \ + ${bits_srcdir}/streambuf.tcc \ + ${bits_srcdir}/stringfwd.h \ + ${bits_srcdir}/type_traits.h \ + ${bits_srcdir}/valarray_array.h \ + ${bits_srcdir}/valarray_array.tcc \ + ${bits_srcdir}/valarray_meta.h backward_srcdir = ${glibcpp_srcdir}/include/backward backward_builddir = ./backward -backward_headers = ${backward_srcdir}/complex.h ${backward_srcdir}/iomanip.h ${backward_srcdir}/istream.h ${backward_srcdir}/ostream.h ${backward_srcdir}/stream.h ${backward_srcdir}/streambuf.h ${backward_srcdir}/algo.h ${backward_srcdir}/algobase.h ${backward_srcdir}/alloc.h ${backward_srcdir}/bvector.h ${backward_srcdir}/defalloc.h ${backward_srcdir}/deque.h ${backward_srcdir}/function.h ${backward_srcdir}/hash_map.h ${backward_srcdir}/hash_set.h ${backward_srcdir}/hashtable.h ${backward_srcdir}/heap.h ${backward_srcdir}/iostream.h ${backward_srcdir}/iterator.h ${backward_srcdir}/list.h ${backward_srcdir}/map.h ${backward_srcdir}/multimap.h ${backward_srcdir}/new.h ${backward_srcdir}/multiset.h ${backward_srcdir}/pair.h ${backward_srcdir}/queue.h ${backward_srcdir}/rope.h ${backward_srcdir}/set.h ${backward_srcdir}/slist.h ${backward_srcdir}/stack.h ${backward_srcdir}/tempbuf.h ${backward_srcdir}/tree.h ${backward_srcdir}/vector.h ${backward_srcdir}/fstream.h ${backward_srcdir}/strstream.h ${backward_srcdir}/strstream ${backward_srcdir}/backward_warning.h +backward_headers = \ + ${backward_srcdir}/complex.h \ + ${backward_srcdir}/iomanip.h \ + ${backward_srcdir}/istream.h \ + ${backward_srcdir}/ostream.h \ + ${backward_srcdir}/stream.h \ + ${backward_srcdir}/streambuf.h \ + ${backward_srcdir}/algo.h \ + ${backward_srcdir}/algobase.h \ + ${backward_srcdir}/alloc.h \ + ${backward_srcdir}/bvector.h \ + ${backward_srcdir}/defalloc.h \ + ${backward_srcdir}/deque.h \ + ${backward_srcdir}/function.h \ + ${backward_srcdir}/hash_map.h \ + ${backward_srcdir}/hash_set.h \ + ${backward_srcdir}/hashtable.h \ + ${backward_srcdir}/heap.h \ + ${backward_srcdir}/iostream.h \ + ${backward_srcdir}/iterator.h \ + ${backward_srcdir}/list.h \ + ${backward_srcdir}/map.h \ + ${backward_srcdir}/multimap.h \ + ${backward_srcdir}/new.h \ + ${backward_srcdir}/multiset.h \ + ${backward_srcdir}/pair.h \ + ${backward_srcdir}/queue.h \ + ${backward_srcdir}/rope.h \ + ${backward_srcdir}/set.h \ + ${backward_srcdir}/slist.h \ + ${backward_srcdir}/stack.h \ + ${backward_srcdir}/tempbuf.h \ + ${backward_srcdir}/tree.h \ + ${backward_srcdir}/vector.h \ + ${backward_srcdir}/fstream.h \ + ${backward_srcdir}/strstream.h \ + ${backward_srcdir}/strstream \ + ${backward_srcdir}/backward_warning.h ext_srcdir = ${glibcpp_srcdir}/include/ext ext_builddir = ./ext -ext_headers = ${ext_srcdir}/algorithm ${ext_srcdir}/functional ${ext_srcdir}/hash_map ${ext_srcdir}/hash_set ${ext_srcdir}/iterator ${ext_srcdir}/memory ${ext_srcdir}/numeric ${ext_srcdir}/rb_tree ${ext_srcdir}/rope ${ext_srcdir}/ropeimpl.h ${ext_srcdir}/slist ${ext_srcdir}/stl_hash_fun.h ${ext_srcdir}/stl_hashtable.h ${ext_srcdir}/stl_rope.h +ext_headers = \ + ${ext_srcdir}/algorithm \ + ${ext_srcdir}/functional \ + ${ext_srcdir}/hash_map \ + ${ext_srcdir}/hash_set \ + ${ext_srcdir}/iterator \ + ${ext_srcdir}/memory \ + ${ext_srcdir}/numeric \ + ${ext_srcdir}/rb_tree \ + ${ext_srcdir}/rope \ + ${ext_srcdir}/ropeimpl.h \ + ${ext_srcdir}/slist \ + ${ext_srcdir}/stl_hash_fun.h \ + ${ext_srcdir}/stl_hashtable.h \ + ${ext_srcdir}/stl_rope.h # This is the common subset of files that all three "C" header models use. c_base_srcdir = @C_INCLUDE_DIR@ c_base_builddir = . -c_base_headers = ${c_base_srcdir}/std_cassert.h ${c_base_srcdir}/std_cctype.h ${c_base_srcdir}/std_cerrno.h ${c_base_srcdir}/std_cfloat.h ${c_base_srcdir}/std_ciso646.h ${c_base_srcdir}/std_climits.h ${c_base_srcdir}/std_clocale.h ${c_base_srcdir}/std_cmath.h ${c_base_srcdir}/std_csetjmp.h ${c_base_srcdir}/std_csignal.h ${c_base_srcdir}/std_cstdarg.h ${c_base_srcdir}/std_cstddef.h ${c_base_srcdir}/std_cstdio.h ${c_base_srcdir}/std_cstdlib.h ${c_base_srcdir}/std_cstring.h ${c_base_srcdir}/std_ctime.h ${c_base_srcdir}/std_cwchar.h ${c_base_srcdir}/std_cwctype.h +c_base_headers = \ + ${c_base_srcdir}/std_cassert.h \ + ${c_base_srcdir}/std_cctype.h \ + ${c_base_srcdir}/std_cerrno.h \ + ${c_base_srcdir}/std_cfloat.h \ + ${c_base_srcdir}/std_ciso646.h \ + ${c_base_srcdir}/std_climits.h \ + ${c_base_srcdir}/std_clocale.h \ + ${c_base_srcdir}/std_cmath.h \ + ${c_base_srcdir}/std_csetjmp.h \ + ${c_base_srcdir}/std_csignal.h \ + ${c_base_srcdir}/std_cstdarg.h \ + ${c_base_srcdir}/std_cstddef.h \ + ${c_base_srcdir}/std_cstdio.h \ + ${c_base_srcdir}/std_cstdlib.h \ + ${c_base_srcdir}/std_cstring.h \ + ${c_base_srcdir}/std_ctime.h \ + ${c_base_srcdir}/std_cwchar.h \ + ${c_base_srcdir}/std_cwctype.h # Some of the "C" headers need extra files. -c_base_headers_extra = ${c_base_srcdir}/cmath.tcc - -c_base_headers_rename = cassert cctype cerrno cfloat ciso646 climits clocale cmath csetjmp csignal cstdarg cstddef cstdio cstdlib cstring ctime cwchar cwctype +c_base_headers_extra = \ + ${c_base_srcdir}/cmath.tcc + +c_base_headers_rename = \ + cassert \ + cctype \ + cerrno \ + cfloat \ + ciso646 \ + climits \ + clocale \ + cmath \ + csetjmp \ + csignal \ + cstdarg \ + cstddef \ + cstdio \ + cstdlib \ + cstring \ + ctime \ + cwchar \ + cwctype std_srcdir = ${glibcpp_srcdir}/include/std std_builddir = . -std_headers = ${std_srcdir}/std_algorithm.h ${std_srcdir}/std_bitset.h ${std_srcdir}/std_complex.h ${std_srcdir}/std_deque.h ${std_srcdir}/std_fstream.h ${std_srcdir}/std_functional.h ${std_srcdir}/std_iomanip.h ${std_srcdir}/std_ios.h ${std_srcdir}/std_iosfwd.h ${std_srcdir}/std_iostream.h ${std_srcdir}/std_istream.h ${std_srcdir}/std_iterator.h ${std_srcdir}/std_limits.h ${std_srcdir}/std_list.h ${std_srcdir}/std_locale.h ${std_srcdir}/std_map.h ${std_srcdir}/std_memory.h ${std_srcdir}/std_numeric.h ${std_srcdir}/std_ostream.h ${std_srcdir}/std_queue.h ${std_srcdir}/std_set.h ${std_srcdir}/std_sstream.h ${std_srcdir}/std_stack.h ${std_srcdir}/std_stdexcept.h ${std_srcdir}/std_streambuf.h ${std_srcdir}/std_string.h ${std_srcdir}/std_utility.h ${std_srcdir}/std_valarray.h ${std_srcdir}/std_vector.h +std_headers = \ + ${std_srcdir}/std_algorithm.h \ + ${std_srcdir}/std_bitset.h \ + ${std_srcdir}/std_complex.h \ + ${std_srcdir}/std_deque.h \ + ${std_srcdir}/std_fstream.h \ + ${std_srcdir}/std_functional.h \ + ${std_srcdir}/std_iomanip.h \ + ${std_srcdir}/std_ios.h \ + ${std_srcdir}/std_iosfwd.h \ + ${std_srcdir}/std_iostream.h \ + ${std_srcdir}/std_istream.h \ + ${std_srcdir}/std_iterator.h \ + ${std_srcdir}/std_limits.h \ + ${std_srcdir}/std_list.h \ + ${std_srcdir}/std_locale.h \ + ${std_srcdir}/std_map.h \ + ${std_srcdir}/std_memory.h \ + ${std_srcdir}/std_numeric.h \ + ${std_srcdir}/std_ostream.h \ + ${std_srcdir}/std_queue.h \ + ${std_srcdir}/std_set.h \ + ${std_srcdir}/std_sstream.h \ + ${std_srcdir}/std_stack.h \ + ${std_srcdir}/std_stdexcept.h \ + ${std_srcdir}/std_streambuf.h \ + ${std_srcdir}/std_string.h \ + ${std_srcdir}/std_utility.h \ + ${std_srcdir}/std_valarray.h \ + ${std_srcdir}/std_vector.h # Renamed at build time. -std_headers_rename = algorithm bitset complex deque fstream functional iomanip ios iosfwd iostream istream iterator limits list locale map memory numeric ostream queue set sstream stack stdexcept streambuf string utility valarray vector +std_headers_rename = \ + algorithm \ + bitset \ + complex \ + deque \ + fstream \ + functional \ + iomanip \ + ios \ + iosfwd \ + iostream \ + istream \ + iterator \ + limits \ + list \ + locale \ + map \ + memory \ + numeric \ + ostream \ + queue \ + set \ + sstream \ + stack \ + stdexcept \ + streambuf \ + string \ + utility \ + valarray \ + vector target_srcdir = ${glibcpp_srcdir}/@OS_INC_SRCDIR@ target_builddir = ./${target_alias}/bits -target_headers = ${target_srcdir}/ctype_base.h ${target_srcdir}/ctype_inline.h ${target_srcdir}/ctype_noninline.h ${target_srcdir}/os_defines.h ${glibcpp_srcdir}/@ATOMICITY_INC_SRCDIR@/atomicity.h ${glibcpp_srcdir}/@CPU_LIMITS_INC_SRCDIR@/cpu_limits.h +target_headers = \ + ${target_srcdir}/ctype_base.h \ + ${target_srcdir}/ctype_inline.h \ + ${target_srcdir}/ctype_noninline.h \ + ${target_srcdir}/os_defines.h \ + ${glibcpp_srcdir}/@ATOMICITY_INC_SRCDIR@/atomicity.h \ + ${glibcpp_srcdir}/@CPU_LIMITS_INC_SRCDIR@/cpu_limits.h # These extra_target_headers files are all built with ad hoc naming rules. -extra_target_headers = ${target_builddir}/basic_file.h ${target_builddir}/c++config.h ${target_builddir}/c++io.h ${target_builddir}/c++locale.h ${target_builddir}/messages_members.h ${target_builddir}/codecvt_specializations.h +extra_target_headers = \ + ${target_builddir}/basic_file.h \ + ${target_builddir}/c++config.h \ + ${target_builddir}/c++io.h \ + ${target_builddir}/c++locale.h \ + ${target_builddir}/messages_members.h \ + ${target_builddir}/codecvt_specializations.h -thread_target_headers = ${target_builddir}/gthr.h ${target_builddir}/gthr-single.h ${target_builddir}/gthr-posix.h ${target_builddir}/gthr-default.h +thread_target_headers = \ + ${target_builddir}/gthr.h \ + ${target_builddir}/gthr-single.h \ + ${target_builddir}/gthr-posix.h \ + ${target_builddir}/gthr-default.h # List of all timestamp files. By keeping only one copy of this list, both # CLEANFILES and all-local are kept up-to-date. -allstamps = stamp-std stamp-bits stamp-c_base stamp-backward stamp-ext ${target_builddir}/stamp-target +allstamps = stamp-std stamp-bits stamp-c_base stamp-backward stamp-ext \ + ${target_builddir}/stamp-target # Target includes for threads @@ -227,7 +453,7 @@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index 07955d3e1e6..e7be54c1fc9 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -66,7 +66,7 @@ sources = \ cmath.cc bitset.cc \ functexcept.cc stdexcept.cc vterminate.cc \ c++locale.cc locale.cc localename.cc codecvt.cc \ - collate.cc ctype.cc messages.cc moneypunct.cc numpunct.cc time.cc \ + collate.cc ctype.cc messages.cc monetary.cc numeric.cc time.cc \ concept-inst.cc locale-inst.cc misc-inst.cc stl-inst.cc \ string-inst.cc wstring-inst.cc valarray-inst.cc ext-inst.cc diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 2a4664ab554..e241928e00f 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -191,7 +191,7 @@ sources = \ cmath.cc bitset.cc \ functexcept.cc stdexcept.cc vterminate.cc \ c++locale.cc locale.cc localename.cc codecvt.cc \ - collate.cc ctype.cc messages.cc moneypunct.cc numpunct.cc time.cc \ + collate.cc ctype.cc messages.cc monetary.cc numeric.cc time.cc \ concept-inst.cc locale-inst.cc misc-inst.cc stl-inst.cc \ string-inst.cc wstring-inst.cc valarray-inst.cc ext-inst.cc @@ -271,7 +271,7 @@ LIBS = @LIBS@ libstdc___la_OBJECTS = globals.lo limits.lo basic_file.lo complex_io.lo \ ios.lo strstream.lo cmath.lo bitset.lo functexcept.lo stdexcept.lo \ vterminate.lo c++locale.lo locale.lo localename.lo codecvt.lo \ -collate.lo ctype.lo messages.lo moneypunct.lo numpunct.lo time.lo \ +collate.lo ctype.lo messages.lo monetary.lo numeric.lo time.lo \ concept-inst.lo locale-inst.lo misc-inst.lo stl-inst.lo string-inst.lo \ wstring-inst.lo valarray-inst.lo ext-inst.lo CXXFLAGS = @CXXFLAGS@