Re: MinGW cross compilation failure on Debian trixie - Mailing list pgsql-hackers

From Thomas Munro
Subject Re: MinGW cross compilation failure on Debian trixie
Date
Msg-id CA+hUKGL=zW1m4ptfyB07AOZXabv7PeUcw_qpR=R_OfnaiguRQg@mail.gmail.com
Whole thread Raw
In response to MinGW cross compilation failure on Debian trixie  (Nazir Bilal Yavuz <byavuz81@gmail.com>)
Responses Re: MinGW cross compilation failure on Debian trixie
List pgsql-hackers
On Fri, Sep 19, 2025 at 8:13 PM Nazir Bilal Yavuz <byavuz81@gmail.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?  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++"



pgsql-hackers by date:

Previous
From: Sami Imseih
Date:
Subject: Re: [BUG] temporary file usage report with extended protocol and unnamed portals
Next
From: Corey Huinker
Date:
Subject: Re: someone else to do the list of acknowledgments