> From: Bruno Haible <[email protected]>
> Date: Sun, 25 Jan 2026 00:06:02 +0100
> 
> Eli Zaretskii wrote in
> <https://lists.gnu.org/archive/html/bug-texinfo/2026-01/msg00099.html>
> about the old dead mingw.org's mingw distribution:
> 
> > >      gcc -DHAVE_CONFIG_H -I. -I../..   -Id:/usr/include  -Wno-cast-qual 
> > > -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef 
> > > -Wno-unused-function -Wno-unused-parameter -Wno-float-conversion 
> > > -Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion 
> > > -Wno-type-limits -Wno-unused-const-variable 
> > > -Wno-unsuffixed-float-constants -Wno-error -O2 -gdwarf-4 -g3 -MT 
> > > libgnu_a-btowc.o -MD -MP -MF .deps/libgnu_a-btowc.Tpo -c -o 
> > > libgnu_a-btowc.o `test -f 'btowc.c' || echo './'`btowc.c
> > >      In file included from ./wctype.h:56,
> > >                 from d:\usr\include\wchar.h:62,
> > >                 from ./wchar.h:77,
> > >                 from btowc.c:21:
> > >      ./wchar.h:923:1: error: unknown type name 'mbstate_t'
> > >        923 | _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps), );
> > >      | ^~~~~~~~~~~~~~~~
> > > ...
> > > This is because the MinGW wchar.h includes wctype.h, so we include the
> > > Gnulib's version of it, and that one then turns around and includes
> > > wchar.h again.  But because the MinGW wchar.h was not yet completely
> > > processed, mbstate_t is not yet defined.
> > > 
> > > I don't know how to solve this cleanly.
> 
> We have a technique for this situation in Gnulib. But it is fragile, therefore
> let me ask one or two questions before applying it.
> 
> gnulib/lib/wctype.in.h has this piece of code:
> 
> -------------------------------------------------------------------------------
> #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__)
> 
> /* Special invocation convention:
>    - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of
>      <wctype.h> is being processed, which doesn't include the idempotency
>      guard.   */
> 
> #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@
> 
> #else
> /* Normal invocation convention.  */
> -------------------------------------------------------------------------------
> 
> In your mingw <wchar.h>, is there some preprocessor definition, that we
> could test (similar to __CTYPE_H_SOURCED__)?

I'm not sure I understand what do you want to do if this hypothetical
test yields true.  Do you want that condition for including wchar.h
from wctype.h or for something else?

(Btw, ctype.h here also includes wctype.ch, and does define
__CTYPE_H_SOURCED__ just before it does.  So that test needs to stay.)

Thanks.

Reply via email to