> Date: Wed, 14 Jan 2026 18:54:53 +0200 > From: Eli Zaretskii <[email protected]> > Cc: [email protected], [email protected] > > Once configure step succeeded, I ran "make". I found several > Gnulib-related problems: > > 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), ); > | ^~~~~~~~~~~~~~~~ > In file included from ./wctype.h:56, > from d:\usr\include\wchar.h:62, > from ./wchar.h:77, > from btowc.c:21: > ./wchar.h:1135:10: error: unknown type name 'mbstate_t' > 1135 | mbszero (mbstate_t *ps) > | ^~~~~~~~~ > In file included from ./wctype.h:56, > from d:\usr\include\wchar.h:62, > from ./wchar.h:77, > from btowc.c:21: > d:\usr\lib\gcc\mingw32\9.2.0\include\stddef.h:350:23: error: conflicting > types for ' > rpl_wint_t' > 350 | typedef __WINT_TYPE__ wint_t; > | ^~~~~~ > ./wchar.h:740:22: note: previous declaration of 'rpl_wint_t' was here > 740 | typedef unsigned int rpl_wint_t; > | ^~~~~~~~~~ > In file included from ./wctype.h:56, > from d:\usr\include\wchar.h:62, > from ./wchar.h:77, > from btowc.c:21: > d:\usr\include\wchar.h:539:33: error: conflicting types for 'rpl_btowc' > 539 | __cdecl __MINGW_NOTHROW wint_t btowc (int); > | ^~~~~ > In file included from ./wctype.h:56, > from d:\usr\include\wchar.h:62, > from ./wchar.h:77, > from btowc.c:21: > ./wchar.h:869:1: note: previous declaration of 'rpl_btowc' was here > 869 | _GL_FUNCDECL_RPL (btowc, wint_t, (int c), _GL_ATTRIBUTE_PURE); > | ^~~~~~~~~~~~~~~~ > In file included from ./wctype.h:56, > from d:\usr\include\wchar.h:62, > from ./wchar.h:77, > from btowc.c:21: > btowc.c:28:1: error: conflicting types for 'rpl_btowc' > 28 | btowc (int 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:869:1: note: previous declaration of 'rpl_btowc' was here > 869 | _GL_FUNCDECL_RPL (btowc, wint_t, (int c), _GL_ATTRIBUTE_PURE); > | ^~~~~~~~~~~~~~~~ > btowc.c: In function 'rpl_btowc': > btowc.c:38:7: warning: implicit declaration of function 'mbszero' > [-Wimplicit-function-declaration] > 38 | mbszero (&state); > | ^~~~~~~ > Makefile:2934: recipe for target `libgnu_a-btowc.o' failed > make[4]: *** [libgnu_a-btowc.o] Error 1 > > 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. I hope Bruno will know. The > kludge I used was not to include wchar.h from wctype.h. The original > Gnulib's wctype.h includes wchar.h twice: > > #if 1 > /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */ > # include <wchar.h> > #endif > > /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and > isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include > <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the > declarations. */ > #if defined _WIN32 && ! defined __CYGWIN__ > # include <ctype.h> > # include <wchar.h> > #endif > > I needed to remove both these lines. > > Another Gnulib-related problem was with stdio-consolesafe.c: > > 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-stdio-consolesafe.o -MD -MP -MF > .deps/libgnu_a-stdio-consolesafe.Tpo -c -o libgnu_a-stdio-consolesafe.o `test > -f 'stdio-consolesafe.c' || echo './'`stdio-consolesafe.c > stdio-consolesafe.c:88:1: error: static declaration of 'vasprintf' > follows non-static declaration > 88 | vasprintf (char **resultp, const char *format, va_list args) > | ^~~~~~~~~ > In file included from stdio-consolesafe.c:20: > ./stdio.h:2346:1: note: previous declaration of 'vasprintf' was here > 2346 | _GL_FUNCDECL_SYS (vasprintf, int, > | ^~~~~~~~~~~~~~~~ > > I originally just removed the 'static' qualifier from the version of > vasprintf included in stdio-consolesafe.c, but that failed the link > step further down the line, because Gnulib also includes vasprintf.c, > which the MinGW build compiles and links against. So, again as a > temporary kludge, I renamed the vasprintf in stdio-consolesafe.c to > rpl_vasprintf, and that solved the compilation and link problems. > Again, I hope Bruno will be able to suggest a clean solution.
Bruno, any suggestions? Or did I miss your responses?
