This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See crosstool-NG for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]