public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
* Build fails with an error in setlocale.h
@ 2016-08-16 10:37 Matthew Wahab
  2016-08-16 10:48 ` Corinna Vinschen
  0 siblings, 1 reply; 10+ messages in thread
From: Matthew Wahab @ 2016-08-16 10:37 UTC (permalink / raw)
  To: newlib; +Cc: corinna

Hello,

I get a build failure when cross-compiling for aarch64-none-elf, the error 
message is
----
newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error: unknown 
type name 'locale_t'; did you mean 'clockid_t'?
          size_t, size_t, mbstate_t *, locale_t);
                                       ^~~~~~~~
                                       clockid_t
----

The error points to the declaration

diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h
+extern size_t _wcsnrtombs_l (struct _reent *, char *, const wchar_t **,
+			     size_t, size_t, mbstate_t *, locale_t);
+

added by
----
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Wed Aug 10 16:30:46 2016 +0200

     Implement strto[dflu]_l/wcsto[dflu]_l
----

Looking at the surrounding code in that file, I think that locale_t should have 
been __locale_t.

Let me know if there's anything else I should check,
Matthew

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 10:37 Build fails with an error in setlocale.h Matthew Wahab
@ 2016-08-16 10:48 ` Corinna Vinschen
  2016-08-16 10:58   ` Corinna Vinschen
  2016-08-16 11:39   ` Matthew Wahab
  0 siblings, 2 replies; 10+ messages in thread
From: Corinna Vinschen @ 2016-08-16 10:48 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1886 bytes --]

Hi Matthew,


[please don't CC me.  I'm subscribed to the newlib ML anyway.  Thanks.]


On Aug 16 11:37, Matthew Wahab wrote:
> Hello,
> 
> I get a build failure when cross-compiling for aarch64-none-elf, the error
> message is
> ----
> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error:
> unknown type name 'locale_t'; did you mean 'clockid_t'?
>          size_t, size_t, mbstate_t *, locale_t);
>                                       ^~~~~~~~
>                                       clockid_t

What on earth is the compiler thinking here?

> ----
> 
> The error points to the declaration
> 
> diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h
> +extern size_t _wcsnrtombs_l (struct _reent *, char *, const wchar_t **,
> +			     size_t, size_t, mbstate_t *, locale_t);
> +
> [...]
> Looking at the surrounding code in that file, I think that locale_t should
> have been __locale_t.

Almost.  It should have been `struct __locale_t *':

diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h
index de2bd67..03b1dd7 100644
--- a/newlib/libc/locale/setlocale.h
+++ b/newlib/libc/locale/setlocale.h
@@ -203,7 +203,7 @@ extern const char *__get_locale_env(struct _reent *, int);
 extern struct lconv *__localeconv_l (struct __locale_t *locale);
 
 extern size_t _wcsnrtombs_l (struct _reent *, char *, const wchar_t **,
-			     size_t, size_t, mbstate_t *, locale_t);
+			     size_t, size_t, mbstate_t *, struct __locale_t *);
 
 /* In POSIX terms the global locale is the process-wide locale.  Use this
    function to always refer to the global locale. */



> Let me know if there's anything else I should check,

Can you test that the above patch works for you?  I'll check it in then.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 10:48 ` Corinna Vinschen
@ 2016-08-16 10:58   ` Corinna Vinschen
  2016-08-16 11:39   ` Matthew Wahab
  1 sibling, 0 replies; 10+ messages in thread
From: Corinna Vinschen @ 2016-08-16 10:58 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1985 bytes --]

On Aug 16 12:48, Corinna Vinschen wrote:
> On Aug 16 11:37, Matthew Wahab wrote:
> > The error points to the declaration
> > 
> > diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h
> > +extern size_t _wcsnrtombs_l (struct _reent *, char *, const wchar_t **,
> > +			     size_t, size_t, mbstate_t *, locale_t);
> > +
> > [...]
> > Looking at the surrounding code in that file, I think that locale_t should
> > have been __locale_t.
> 
> Almost.  It should have been `struct __locale_t *':
> 
> diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h
> [...]

Actually, make that:

diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h
index de2bd67..03b1dd7 100644
--- a/newlib/libc/locale/setlocale.h
+++ b/newlib/libc/locale/setlocale.h
@@ -203,7 +203,7 @@ extern const char *__get_locale_env(struct _reent *, int);
 extern struct lconv *__localeconv_l (struct __locale_t *locale);
 
 extern size_t _wcsnrtombs_l (struct _reent *, char *, const wchar_t **,
-			     size_t, size_t, mbstate_t *, locale_t);
+			     size_t, size_t, mbstate_t *, struct __locale_t *);
 
 /* In POSIX terms the global locale is the process-wide locale.  Use this
    function to always refer to the global locale. */
diff --git a/newlib/libc/stdlib/wcsnrtombs.c b/newlib/libc/stdlib/wcsnrtombs.c
index 8ad8bcd..8e5c387 100644
--- a/newlib/libc/stdlib/wcsnrtombs.c
+++ b/newlib/libc/stdlib/wcsnrtombs.c
@@ -107,7 +107,7 @@ PORTABILITY
 
 size_t
 _wcsnrtombs_l (struct _reent *r, char *dst, const wchar_t **src, size_t nwc,
-	       size_t len, mbstate_t *ps, locale_t loc)
+	       size_t len, mbstate_t *ps, struct __locale_t *loc)
 {
   char *ptr = dst;
   char buff[10];

> > Let me know if there's anything else I should check,
> 
> Can you test that the above patch works for you?  I'll check it in then.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 10:48 ` Corinna Vinschen
  2016-08-16 10:58   ` Corinna Vinschen
@ 2016-08-16 11:39   ` Matthew Wahab
  2016-08-16 11:57     ` Matthew Wahab
  1 sibling, 1 reply; 10+ messages in thread
From: Matthew Wahab @ 2016-08-16 11:39 UTC (permalink / raw)
  To: newlib

On 16/08/16 11:48, Corinna Vinschen wrote:
> On Aug 16 11:37, Matthew Wahab wrote:
>> I get a build failure when cross-compiling for aarch64-none-elf, the error
>> message is
>> ----
>> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error:
>> unknown type name 'locale_t'; did you mean 'clockid_t'?
>>           size_t, size_t, mbstate_t *, locale_t);
>>                                        ^~~~~~~~
>>                                        clockid_t
>
>
> Can you test that the above patch works for you?  I'll check it in then.
>

Thanks for the patch. It fixes that failure but there's another in localeconv.c:
----
newlib-cygwin/newlib/libc/locale/localeconv.c: In function '__localeconv_l':
newlib-cygwin/newlib/libc/locale/localeconv.c:47:10: error: 'lconv' undeclared 
(first use in this function); did you mean 'lconv'?
    return lconv;
           ^~~~~
           lconv
----
I think that this is because the lconv is declared and used
----
#ifdef __HAVE_LOCALE_INFO__
   struct lconv *lconv = &locale->lconv;
..
#endif /* __HAVE_LOCALE_INFO__ */
   return lconv;
----

That's easy to fix but I then get failures in time/strftime.c for__get_time_locale:
----
newlib-cygwin/newlib/libc/time/../time/strftime.c: In function '__strftime':
newlib-cygwin/newlib/libc/time/../time/strftime.c:701:48: warning: implicit 
declaration of function '__get_time_locale'; did you mean 
'__get_current_locale'? [-Wimplicit-function-declaration]
    const struct lc_time_T *_CurrentTimeLocale = __get_time_locale (locale);
                                                 ^~~~~~~~~~~~~~~~~
                                                 __get_current_locale
----

I also get errors for the use of era_info_t and other types in that function
----
newlib-cygwin/newlib/libc/time/../time/strftime.c: In function 'wcsftime':
newlib-cygwin/newlib/libc/time/../time/strftime.c:1446:3: error: unknown type 
name 'era_info_t'; did you mean '__ino_t'?
    era_info_t *era_info = NULL;
    ^~~~~~~~~~
    __ino_t
----
But I haven't been able to track down what causes those.

Matthew

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 11:39   ` Matthew Wahab
@ 2016-08-16 11:57     ` Matthew Wahab
  2016-08-16 13:27       ` Corinna Vinschen
  0 siblings, 1 reply; 10+ messages in thread
From: Matthew Wahab @ 2016-08-16 11:57 UTC (permalink / raw)
  To: newlib

On 16/08/16 12:39, Matthew Wahab wrote:
> On 16/08/16 11:48, Corinna Vinschen wrote:
>> On Aug 16 11:37, Matthew Wahab wrote:
>>> I get a build failure when cross-compiling for aarch64-none-elf, the error
>>> message is
>>> ----
>>> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error:
>>> unknown type name 'locale_t'; did you mean 'clockid_t'?
>>>           size_t, size_t, mbstate_t *, locale_t);
>>>                                        ^~~~~~~~
>>>                                        clockid_t
>>
>>
>> Can you test that the above patch works for you?  I'll check it in then.
>>
>
> Thanks for the patch. It fixes that failure but there's another in localeconv.c:

I've also tried with the second patch and still get the build errors.
Matthew

> ----
> newlib-cygwin/newlib/libc/locale/localeconv.c: In function '__localeconv_l':
> newlib-cygwin/newlib/libc/locale/localeconv.c:47:10: error: 'lconv' undeclared
> (first use in this function); did you mean 'lconv'?
>     return lconv;
>            ^~~~~
>            lconv
> ----
> I think that this is because the lconv is declared and used
> ----
> #ifdef __HAVE_LOCALE_INFO__
>    struct lconv *lconv = &locale->lconv;
> ..
> #endif /* __HAVE_LOCALE_INFO__ */
>    return lconv;
> ----
>
> That's easy to fix but I then get failures in time/strftime.c
> for__get_time_locale:
> ----
> newlib-cygwin/newlib/libc/time/../time/strftime.c: In function '__strftime':
> newlib-cygwin/newlib/libc/time/../time/strftime.c:701:48: warning: implicit
> declaration of function '__get_time_locale'; did you mean
> '__get_current_locale'? [-Wimplicit-function-declaration]
>     const struct lc_time_T *_CurrentTimeLocale = __get_time_locale (locale);
>                                                  ^~~~~~~~~~~~~~~~~
>                                                  __get_current_locale
> ----
>
> I also get errors for the use of era_info_t and other types in that function
> ----
> newlib-cygwin/newlib/libc/time/../time/strftime.c: In function 'wcsftime':
> newlib-cygwin/newlib/libc/time/../time/strftime.c:1446:3: error: unknown type
> name 'era_info_t'; did you mean '__ino_t'?
>     era_info_t *era_info = NULL;
>     ^~~~~~~~~~
>     __ino_t
> ----
> But I haven't been able to track down what causes those.
>
> Matthew

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 11:57     ` Matthew Wahab
@ 2016-08-16 13:27       ` Corinna Vinschen
  2016-08-16 13:59         ` Matthew Wahab
  0 siblings, 1 reply; 10+ messages in thread
From: Corinna Vinschen @ 2016-08-16 13:27 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1085 bytes --]

Hi Matthew,

On Aug 16 12:57, Matthew Wahab wrote: > On 16/08/16 12:39, Matthew Wahab wrote:
> > On 16/08/16 11:48, Corinna Vinschen wrote:
> > > On Aug 16 11:37, Matthew Wahab wrote:
> > > > I get a build failure when cross-compiling for aarch64-none-elf, the error
> > > > message is
> > > > ----
> > > > newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error:
> > > > unknown type name 'locale_t'; did you mean 'clockid_t'?
> > > >           size_t, size_t, mbstate_t *, locale_t);
> > > >                                        ^~~~~~~~
> > > >                                        clockid_t
> > > 
> > > 
> > > Can you test that the above patch works for you?  I'll check it in then.
> > > 
> > 
> > Thanks for the patch. It fixes that failure but there's another in localeconv.c:
> 
> I've also tried with the second patch and still get the build errors.

I applied a couple of patches meant to fix the locale stuff on non-Cygwin
targets.  Please give them a try.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 13:27       ` Corinna Vinschen
@ 2016-08-16 13:59         ` Matthew Wahab
  2016-08-16 14:28           ` Corinna Vinschen
  0 siblings, 1 reply; 10+ messages in thread
From: Matthew Wahab @ 2016-08-16 13:59 UTC (permalink / raw)
  To: newlib

On 16/08/16 14:27, Corinna Vinschen wrote:
> Hi Matthew,
>
> On Aug 16 12:57, Matthew Wahab wrote: > On 16/08/16 12:39, Matthew Wahab wrote:
>>> On 16/08/16 11:48, Corinna Vinschen wrote:
>>>> On Aug 16 11:37, Matthew Wahab wrote:
>>>>> I get a build failure when cross-compiling for aarch64-none-elf, the error
>>>>> message is
>>>>> ----
>>>>> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error:
>>>>> unknown type name 'locale_t'; did you mean 'clockid_t'?
>>>>>            size_t, size_t, mbstate_t *, locale_t);
>>>>>                                         ^~~~~~~~
>>>>>                                         clockid_t
>>>>
>>>>
>>>> Can you test that the above patch works for you?  I'll check it in then.
>>>>
>>>
>>> Thanks for the patch. It fixes that failure but there's another in localeconv.c:
>>
>> I've also tried with the second patch and still get the build errors.
>
> I applied a couple of patches meant to fix the locale stuff on non-Cygwin
> targets.  Please give them a try.
>

Thanks for that. The patches worked but now there are failures to do with 
_C_monetary_locale, _C_numeric_locale, _C_time_locale and _C_messages_locale. e.g.
----
newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h: In function 
'__get_monetary_locale':
newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:329:10: error: 
incompatible types when returning type 'const struct lc_monetary_T' but 'const 
struct lc_monetary_T *' was expected
    return _C_monetary_locale;
           ^~~~~~~~~~~~~~~~~~
----
There are a number of these, it looks like they're all in setlocale.h.

Matthew

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 13:59         ` Matthew Wahab
@ 2016-08-16 14:28           ` Corinna Vinschen
  2016-08-16 15:14             ` Matthew Wahab
  0 siblings, 1 reply; 10+ messages in thread
From: Corinna Vinschen @ 2016-08-16 14:28 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1933 bytes --]

On Aug 16 14:59, Matthew Wahab wrote:
> On 16/08/16 14:27, Corinna Vinschen wrote:
> > Hi Matthew,
> > 
> > On Aug 16 12:57, Matthew Wahab wrote: > On 16/08/16 12:39, Matthew Wahab wrote:
> > > > On 16/08/16 11:48, Corinna Vinschen wrote:
> > > > > On Aug 16 11:37, Matthew Wahab wrote:
> > > > > > I get a build failure when cross-compiling for aarch64-none-elf, the error
> > > > > > message is
> > > > > > ----
> > > > > > newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:206:38: error:
> > > > > > unknown type name 'locale_t'; did you mean 'clockid_t'?
> > > > > >            size_t, size_t, mbstate_t *, locale_t);
> > > > > >                                         ^~~~~~~~
> > > > > >                                         clockid_t
> > > > > 
> > > > > 
> > > > > Can you test that the above patch works for you?  I'll check it in then.
> > > > > 
> > > > 
> > > > Thanks for the patch. It fixes that failure but there's another in localeconv.c:
> > > 
> > > I've also tried with the second patch and still get the build errors.
> > 
> > I applied a couple of patches meant to fix the locale stuff on non-Cygwin
> > targets.  Please give them a try.
> > 
> 
> Thanks for that. The patches worked but now there are failures to do with
> _C_monetary_locale, _C_numeric_locale, _C_time_locale and
> _C_messages_locale. e.g.
> ----
> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h: In function
> '__get_monetary_locale':
> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:329:10: error:
> incompatible types when returning type 'const struct lc_monetary_T' but
> 'const struct lc_monetary_T *' was expected
>    return _C_monetary_locale;
>           ^~~~~~~~~~~~~~~~~~
> ----
> There are a number of these, it looks like they're all in setlocale.h.

Forgot the &.  Should be fixed now.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 14:28           ` Corinna Vinschen
@ 2016-08-16 15:14             ` Matthew Wahab
  2016-08-16 17:04               ` Corinna Vinschen
  0 siblings, 1 reply; 10+ messages in thread
From: Matthew Wahab @ 2016-08-16 15:14 UTC (permalink / raw)
  To: newlib

On 16/08/16 15:28, Corinna Vinschen wrote:
> On Aug 16 14:59, Matthew Wahab wrote:
>> Thanks for that. The patches worked but now there are failures to do with
>> _C_monetary_locale, _C_numeric_locale, _C_time_locale and
>> _C_messages_locale. e.g.
>> ----
>> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h: In function
>> '__get_monetary_locale':
>> newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:329:10: error:
>> incompatible types when returning type 'const struct lc_monetary_T' but
>> 'const struct lc_monetary_T *' was expected
>>     return _C_monetary_locale;
>>            ^~~~~~~~~~~~~~~~~~
>> ----
>> There are a number of these, it looks like they're all in setlocale.h.
>
> Forgot the &.  Should be fixed now.

Yes, cross-compiled aarch64-none-elf now builds.

Thanks,
Matthew

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Build fails with an error in setlocale.h
  2016-08-16 15:14             ` Matthew Wahab
@ 2016-08-16 17:04               ` Corinna Vinschen
  0 siblings, 0 replies; 10+ messages in thread
From: Corinna Vinschen @ 2016-08-16 17:04 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 995 bytes --]

On Aug 16 16:14, Matthew Wahab wrote:
> On 16/08/16 15:28, Corinna Vinschen wrote:
> > On Aug 16 14:59, Matthew Wahab wrote:
> > > Thanks for that. The patches worked but now there are failures to do with
> > > _C_monetary_locale, _C_numeric_locale, _C_time_locale and
> > > _C_messages_locale. e.g.
> > > ----
> > > newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h: In function
> > > '__get_monetary_locale':
> > > newlib-cygwin/newlib/libc/stdlib/../locale/setlocale.h:329:10: error:
> > > incompatible types when returning type 'const struct lc_monetary_T' but
> > > 'const struct lc_monetary_T *' was expected
> > >     return _C_monetary_locale;
> > >            ^~~~~~~~~~~~~~~~~~
> > > ----
> > > There are a number of these, it looks like they're all in setlocale.h.
> > 
> > Forgot the &.  Should be fixed now.
> 
> Yes, cross-compiled aarch64-none-elf now builds.

Thanks for your feedback.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2016-08-16 17:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-16 10:37 Build fails with an error in setlocale.h Matthew Wahab
2016-08-16 10:48 ` Corinna Vinschen
2016-08-16 10:58   ` Corinna Vinschen
2016-08-16 11:39   ` Matthew Wahab
2016-08-16 11:57     ` Matthew Wahab
2016-08-16 13:27       ` Corinna Vinschen
2016-08-16 13:59         ` Matthew Wahab
2016-08-16 14:28           ` Corinna Vinschen
2016-08-16 15:14             ` Matthew Wahab
2016-08-16 17:04               ` Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).