AW: canadian build for mingw host: patch for gettext 0.19.8.1

Alexey Neyman stilor@att.net
Fri Apr 21 19:23:00 GMT 2017


On 04/21/2017 12:15 PM, Titus von Boxberg wrote:
>
>> -----Ursprüngliche Nachricht-----
>> Von: Alexey Neyman [mailto:stilor@att.net]
>> Gesendet: Freitag, 21. April 2017 20:26
>> An: Titus von Boxberg <titus@elbe-informatik.de>
>> Cc: crossgcc maillist <crossgcc@sourceware.org>
>> Betreff: Re: AW: canadian build for mingw host: patch for gettext 0.19.8.1
>>
>> On 04/21/2017 10:59 AM, Titus von Boxberg wrote:
>>> Alexey, all,
>>>
>>> see below:
>>>
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: Alexey Neyman [mailto:stilor@att.net]
>>>> Gesendet: Freitag, 21. April 2017 18:17
>>>> An: Titus von Boxberg <titus@elbe-informatik.de>
>>>> Cc: crossgcc maillist <crossgcc@sourceware.org>
>>>> Betreff: Re: canadian build for mingw host: patch for gettext
>>>> 0.19.8.1
>>>>
>>>> [CC crossgcc list]
>>>>
>>>> Hi Titus,
>>>>
>>>> First off, please send the emails the crossgcc mailing list, not to
>>>> me personally - I may not be the only person interested in a certain
>>>> patch, etc.
>>>>
>>>>
>>>> On 04/21/2017 04:12 AM, Titus von Boxberg wrote:
>>>>> Hi Alexey,
>>>>>
>>>>> I had to use the patch below to let ct-ng build gettext 0.19.8.1 for
>>>>> host
>>>> mingw.
>>>>> I don't use mingw nor gettext at all (besides for running a cross
>>>>> gcc on windows), so I don't really understand why it's required (or
>>>>> rather why
>>>> mingw defines asprintf).
>>>> asprintf is more or less common function now.
>>>>
>>>> Can you describe how you set up the mingw host? I'd like to add it to
>>>> our docs and add that to our testing regimen.
>>> I use a (rather old) i686-w64-mingw32 cross compiler from Linux to mingw.
>>> gcc version 4.7.2
>> What do you use as a shell, etc? Cygwin?
> I'm afraid I don't get the question.
> On the ct-ng build machine (Linux), I installed
> i686-w64-mingw32-gcc-4.7.2-release-linux64_rubenvb.tar.xz
> That's it, afair.
> The shell on the host (Windows) is beyond the canadian build (on Linux).
> Anyway, I don't use cygwin at all.
Ah, I missed 'canadian' in the Subject line. Sorry.
>>>> As to the patch itself, what was the problem with using asprintf from
>>>> mingw's libraries? A build log fragment would be helpful.
>>> gettext contains three definitions of asprintf in three files
>>> asprintf.c These conflict with a static implementation of asprintf in
>>> mingw header stdio.h As I said: Unfortunately, I don't have a clue about
>> gettext and mingw.
>> I looked at mingw's <stdio.h> and I see what the problem is. The function is
>> actually not static - had it been, e.g., 'static inline', it wouldn't have
>> conflicted with a built-in implementation of asprintf().
>>
>> So, the patch makes sense, but I am not sure if it should be fixed by mingw
>> instead.
> No, the asprintf in (my) mingw's stdio.h is static:
>
> static __attribute__ ((__unused__))
> __attribute__ ((__format__ (gnu_printf, 2, 3))) __attribute__((nonnull (1,2)))
> int asprintf(char **__ret, const char *__format, ...)
> {
>    register int __retval;
>    __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
>    __retval = __mingw_vasprintf( __ret, __format, __local_argv );
>    __builtin_va_end( __local_argv );
>    return __retval;
> }
>
>
> With my nonexistent knowledge of gettext, I'd deduce that the problem
> could be either that gettext's configure does not check for
> an external implementation of asprintf at all, or that it cannot detect this
> implementation. In either way, it apparently chooses to bring in
> gettext's own implementation of asprintf which leads to the duplicate
> definition when compiling gettext's asprintf.c

In the current version of i686-w64-mingw32 sample's <stdio.h> it looks 
like this:

__mingw_ovr
__attribute__ ((__format__ (gnu_printf, 2, 3))) __attribute__((nonnull 
(1,2)))
int asprintf(char **__ret, const char *__format, ...)
{
   register int __retval;
   __builtin_va_list __local_argv; __builtin_va_start( __local_argv, 
__format );
   __retval = __mingw_vasprintf( __ret, __format, __local_argv );
   __builtin_va_end( __local_argv );
   return __retval;
}

So, it apparently breaks with either static or not.

Please file an issue on Github so that I do not forget about this issue. 
Attach your .config and the patch.

Thanks,
Alexey.



More information about the crossgcc mailing list