[Kroupware] building gcc

Appel, Stanley kroupware@mail.kde.org
Sun, 29 Dec 2002 23:16:40 -0000


>"list-user" <lists@snp.org> writes:
>
>> trying to bootstrap the 1.0-beta1 toolchain:
>
>  <AOL>Mee to.</AOL>
>
>> In file included from ../../../../libstdcv3/src/locale.cc:406:
>>
/kolab/RPM/TMP/gcc-3.2/obj/i686-pc-linux-gnu/libstdcv3/include/i686-pc-linux
-gnu/bits/ctype_noninline.h:
>> In   static member function `static const short unsigned int*
>>    std::ctype<char>::classic_table()':
>
>[...]
>
>> make[4]: *** [locale.lo] Error 1
>> make[3]: *** [all-recursive] Error 1
>> make[2]: *** [all-recursive-am] Error 2
>> make[1]: *** [all-target-libstdcv3] Error 2
>> make: *** [bootstrap-lean] Error 2
>> error: Bad exit status from /kolab/RPM/TMP/rpm-tmp.10227 (%build)
>
>Same error on the same place while compiling gcc 3.2 on system with
>gcc 3.2 (RedHat 8.0).

Found it, it's not a kolab problem but a known gcc 3.2 + glibc problem.
There is a patch for it:

*** libstdc++-v3/config/locale/gnu/c_locale.cc.bak	2002-04-19
09:59:03.000000000 +0200
--- libstdc++-v3/config/locale/gnu/c_locale.cc	2002-09-29
01:08:12.000000000 +0200
***************
*** 39,44 ****
--- 39,55 ----
  
  namespace std 
  {
+   extern "C" __typeof (strtol_l) __strtol_l;
+   extern "C" __typeof (strtoul_l) __strtoul_l;
+   extern "C" __typeof (strtoll_l) __strtoll_l;
+   extern "C" __typeof (strtoull_l) __strtoull_l;
+   extern "C" __typeof (strtof_l) __strtof_l;
+   extern "C" __typeof (strtod_l) __strtod_l;
+   extern "C" __typeof (strtold_l) __strtold_l;
+   extern "C" __typeof (newlocale) __newlocale;
+   extern "C" __typeof (freelocale) __freelocale;
+   extern "C" __typeof (duplocale) __duplocale;
+ 
    template<>
      void
      __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, 
*** libstdc++-v3/config/locale/gnu/collate_members.cc.bak	2002-04-19
09:59:03.000000000 +0200
--- libstdc++-v3/config/locale/gnu/collate_members.cc	2002-09-29
01:10:05.000000000 +0200
***************
*** 37,42 ****
--- 37,47 ----
  
  namespace std
  {
+   extern "C" __typeof (strcoll_l) __strcoll_l;
+   extern "C" __typeof (strxfrm_l) __strxfrm_l;
+   extern "C" __typeof (wcscoll_l) __wcscoll_l;
+   extern "C" __typeof (wcsxfrm_l) __wcsxfrm_l;
+ 
    // These are basically extensions to char_traits, and perhaps should
    // be put there instead of here.
    template<>
*** libstdc++-v3/config/locale/gnu/ctype_members.cc.bak	2002-05-24
18:15:25.000000000 +0200
--- libstdc++-v3/config/locale/gnu/ctype_members.cc	2002-09-29
01:10:46.000000000 +0200
***************
*** 37,42 ****
--- 37,47 ----
  
  namespace std
  {
+   extern "C" __typeof (wctype_l) __wctype_l;
+   extern "C" __typeof (towupper_l) __towupper_l;
+   extern "C" __typeof (towlower_l) __towlower_l;
+   extern "C" __typeof (iswctype_l) __iswctype_l;
+ 
    // NB: The other ctype<char> specializations are in src/locale.cc and
    // various /config/os/* files.
    template<>
*** libstdc++-v3/config/locale/gnu/messages_members.cc.bak	2002-05-19
00:00:14.000000000 +0200
--- libstdc++-v3/config/locale/gnu/messages_members.cc	2002-09-29
01:11:03.000000000 +0200
***************
*** 37,42 ****
--- 37,43 ----
  
  namespace std
  {
+   extern "C" __typeof (uselocale) __uselocale;
    // Specializations.
    template<>
      string
*** libstdc++-v3/config/locale/gnu/messages_members.h.bak	2002-05-19
00:00:14.000000000 +0200
--- libstdc++-v3/config/locale/gnu/messages_members.h	2002-09-29
01:13:17.000000000 +0200
***************
*** 33,38 ****
--- 33,40 ----
  
  // Written by Benjamin Kosnik <bkoz@redhat.com>
  
+   extern "C" __typeof (uselocale) __uselocale;
+ 
    // Non-virtual member functions.
    template<typename _CharT>
      typename messages<_CharT>::catalog 
*** libstdc++-v3/config/locale/gnu/monetary_members.cc.bak	2002-07-27
01:23:42.000000000 +0200
--- libstdc++-v3/config/locale/gnu/monetary_members.cc	2002-09-29
01:11:33.000000000 +0200
***************
*** 37,42 ****
--- 37,44 ----
  
  namespace std
  {
+   extern "C" __typeof (nl_langinfo_l) __nl_langinfo_l;
+ 
    // Construct and return valid pattern consisting of some combination of:
    // space none symbol sign value
    money_base::pattern
*** libstdc++-v3/config/locale/gnu/numeric_members.cc.bak	2002-04-19
09:59:03.000000000 +0200
--- libstdc++-v3/config/locale/gnu/numeric_members.cc	2002-09-29
01:11:50.000000000 +0200
***************
*** 37,42 ****
--- 37,44 ----
  
  namespace std
  {
+   extern "C" __typeof (nl_langinfo_l) __nl_langinfo_l;
+ 
    template<> 
      void
      numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
*** libstdc++-v3/config/locale/gnu/time_members.cc.bak	2002-05-19
00:00:14.000000000 +0200
--- libstdc++-v3/config/locale/gnu/time_members.cc	2002-09-29
01:18:12.000000000 +0200
***************
*** 38,43 ****
--- 38,47 ----
  
  namespace std
  {
+   extern "C" __typeof (strftime_l) __strftime_l;
+   extern "C" __typeof (wcsftime_l) __wcsftime_l;
+   extern "C" __typeof (nl_langinfo_l) __nl_langinfo_l;
+ 
    template<>
      __timepunct<char>::~__timepunct()
      {
***************
*** 52,58 ****
  	   const tm* __tm) const
      {
  #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
!       __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
  #else
        char* __old = strdup(setlocale(LC_ALL, NULL));
        setlocale(LC_ALL, _M_name_timepunct);
--- 56,62 ----
  	   const tm* __tm) const
      {
  #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
!       __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
  #else
        char* __old = strdup(setlocale(LC_ALL, NULL));
        setlocale(LC_ALL, _M_name_timepunct);
***************
*** 202,208 ****
  	   const tm* __tm) const
      {
  #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
!       __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
  #else
        char* __old = strdup(setlocale(LC_ALL, NULL));
        setlocale(LC_ALL, _M_name_timepunct);
--- 206,212 ----
  	   const tm* __tm) const
      {
  #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
!       __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
  #else
        char* __old = strdup(setlocale(LC_ALL, NULL));
        setlocale(LC_ALL, _M_name_timepunct);
*** libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h.bak	2002-04-19
09:59:07.000000000 +0200
--- libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h	2002-09-30
04:03:04.000000000 +0200
***************
*** 34,48 ****
    
  // Information as gleaned from /usr/include/ctype.h
  
- #if _GLIBCPP_USE_SHADOW_HEADERS
-   using _C_legacy::__ctype_toupper;
-   using _C_legacy::__ctype_tolower;
-   using _C_legacy::__ctype_b;
- #endif
- 
    const ctype_base::mask*
    ctype<char>::classic_table() throw()
!   { return __ctype_b; }  
    
  #if _GLIBCPP_C_LOCALE_GNU
    ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del, 
--- 34,42 ----
    
  // Information as gleaned from /usr/include/ctype.h
  
    const ctype_base::mask*
    ctype<char>::classic_table() throw()
!   { return *(__ctype_b_loc ()); }
    
  #if _GLIBCPP_C_LOCALE_GNU
    ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del, 
***************
*** 58,71 ****
    ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
  		     size_t __refs) 
    : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del), 
!   _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
    _M_table(__table ? __table : classic_table())
    { _M_c_locale_ctype = _S_c_locale; }
  #endif
  
    ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) : 
    __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del), 
!   _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
    _M_table(__table ? __table : classic_table())
    { _M_c_locale_ctype = _S_c_locale; }
  
--- 52,65 ----
    ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
  		     size_t __refs) 
    : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del), 
!   _M_toupper(*(__ctype_toupper_loc ())), _M_tolower(*(__ctype_tolower_loc
())),
    _M_table(__table ? __table : classic_table())
    { _M_c_locale_ctype = _S_c_locale; }
  #endif
  
    ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) : 
    __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del), 
!   _M_toupper(*(__ctype_toupper_loc ())), _M_tolower(*(__ctype_tolower_loc
())),
    _M_table(__table ? __table : classic_table())
    { _M_c_locale_ctype = _S_c_locale; }