From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
Cc: | Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: MinGW cross compilation failure on Debian trixie |
Date: | 2025-09-19 13:17:35 |
Message-ID: | yh7pyvctvx3xtyj3eweh7a5ip4rt3twuxflrkpakvf2d5jiokr@fi6us3ncdyqd |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
On 2025-09-20 00:51:55 +1200, Thomas Munro wrote:
> On Fri, Sep 19, 2025 at 8:13 PM Nazir Bilal Yavuz <byavuz81(at)gmail(dot)com> wrote::
> > pg_locale_libc.c: In function ‘wc_isdigit_libc_mb’:
> > ../../../../src/include/port/win32_port.h:438:20: error: implicit
> > declaration of function ‘_iswctype_l’; did you mean ‘_isctype_l’?
> > [-Wimplicit-function-declaration]
> > 438 | #define iswdigit_l _iswdigit_l
> > | ^~~~~~~~~~~
> > pg_locale_libc.c:178:16: note: in expansion of macro ‘iswdigit_l’
> > 178 | return iswdigit_l((wint_t) wc, locale->info.lt);
> > | ^~~~~~~~~~
>
> It looks like version 12 of mingw-w64-x86-64-dev, currently shipping
> in Debian trixie and sid, must have broken something that worked in
> version 8 from bullseye. Several different headers apparently compete
> to provide that family of functions, with a common guard
> _WCTYPE_DEFINED:
>
> https://github.com/mingw-w64/mingw-w64/blob/v12.x/mingw-w64-headers/crt/ctype.h
> https://github.com/mingw-w64/mingw-w64/blob/v12.x/mingw-w64-headers/crt/wchar.h
> https://github.com/mingw-w64/mingw-w64/blob/v12.x/mingw-w64-headers/crt/wctype.h
>
> I suspect that if you define _CTYPE_DISABLE_MACROS (for example in
> CPPFLAGS) then it might work. Assuming <ctype.h> wins (I guess so,
> it's included at the top of port.h), then I suppose it must use this
> definition, hiding the function of the same name:
>
> #define _iswdigit_l(_c,_p) (_iswctype_l(_c,_DIGIT,_p))
>
> But _iswctype_l is only declared if:
>
> #if __MSVCRT_VERSION__ >= 0x800
>
> It looks like the default __MSVCRT_VERSION__ is 0x700
> (/usr/x86_64-w64-mingw32/include/_mingw.h). Hmm, so does UCRT
> make the problem go away?
Yes, I actually just got this far - if I add -D_UCRT the build
succeeds. That's not the right actual solution, but confirms this much.
> We wanted to do that already -- see pgql-bugs #18940. Try installing
> gcc-mingw-w64-ucrt64 and g++-mingw-w64-ucrt64 on the CI image, and changing
> the compilers like this, perhaps?
>
> - CC="ccache x86_64-w64-mingw32-gcc" \
> - CXX="ccache x86_64-w64-mingw32-g++"
> + CC="ccache x86_64-w64-mingw32ucrt-gcc" \
> + CXX="ccache x86_64-w64-mingw32ucrt-g++"
The "--host=x86_64-w64-mingw32" would need to be adjusted too. The only reason
we also specify CC/CXX explicitly is to use ccache...
Switching to the ucrt binaries does fix the build with meson on debian
unstable, fwiw. Nice.
Greetings,
Andres Freund
From | Date | Subject | |
---|---|---|---|
Previous Message | Rahila Syed | 2025-09-19 13:12:32 | Re: Use WALReadFromBuffers in more places |