[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: MinGW compilation errors with Gnulib wchar.h and wctype.h
From: |
Eli Zaretskii |
Subject: |
Re: MinGW compilation errors with Gnulib wchar.h and wctype.h |
Date: |
Mon, 10 Oct 2016 16:26:53 +0300 |
> Cc: address@hidden
> From: Paul Eggert <address@hidden>
> Date: Sun, 9 Oct 2016 11:07:46 -0700
>
> Eli Zaretskii wrote:
> > But because string.h was included, __STRING_H_SOURCED__ is defined,
> > and MinGW's wchar.h doesn't define mbstate_t. Gnulib's wchar.h
>
> I suggest adding a __STRING_H_SOURCED__ check to Gnulib's lib/wchar.in.h's
> complicated test for the special invocation convention.
Thanks for the guidance. Indeed, the two patches below fix both
issues for me. Please consider this for inclusion in Gnulib.
2016-10-08 Eli Zaretskii <address@hidden>
Fix wchar.h and wctype.h for MinGW 3.22.2
* lib/wchar.in.h [__MINGW32__]: Add one more condition for
special invocation, to fix issues with MinGW 3.22.2 wchar.h
when included from <string.h>.
* lib/wctype.in.h [__MINGW32__]: Add special invocation
convention for MinGW 3.22.2, to solve issues with their
wctype.h when included from <ctype.h>.
--- lib/wchar.in.h~0 2016-08-01 18:50:20.000000000 +0300
+++ lib/wchar.in.h 2016-10-10 15:44:45.178750000 +0300
@@ -35,6 +35,7 @@
|| (defined __hpux \
&& ((defined _INTTYPES_INCLUDED && !defined strtoimax) \
|| defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \
+ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \
|| defined _GL_ALREADY_INCLUDING_WCHAR_H)
/* Special invocation convention:
- Inside glibc and uClibc header files, but not MinGW.
@@ -44,6 +45,8 @@
and once directly. In both situations 'wint_t' is not yet defined,
therefore we cannot provide the function overrides; instead include only
the system's <wchar.h>.
+ - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of
+ <wchar.h> is actually processed, and that doesn't include 'mbstate_t'.
- On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
the latter includes <wchar.h>. But here, we have no way to detect whether
<wctype.h> is completely included or is still being included. */
--- lib/wctype.in.h~0 2016-08-01 18:50:20.000000000 +0300
+++ lib/wctype.in.h 2016-10-10 15:55:32.350625000 +0300
@@ -25,13 +25,25 @@
* wctrans_t, and wctype_t are not yet implemented.
*/
-#ifndef address@hidden@_WCTYPE_H
-
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@
+#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. */
+
address@hidden@ @NEXT_WCTYPE_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef address@hidden@_WCTYPE_H
+
#if @HAVE_WINT_T@
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
@@ -512,3 +524,4 @@
#endif /* address@hidden@_WCTYPE_H */
#endif /* address@hidden@_WCTYPE_H */
+#endif
- MinGW compilation errors with Gnulib wchar.h and wctype.h, Eli Zaretskii, 2016/10/09
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Paul Eggert, 2016/10/09
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Eli Zaretskii, 2016/10/09
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Paul Eggert, 2016/10/09
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Eli Zaretskii, 2016/10/09
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Paul Eggert, 2016/10/09
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h,
Eli Zaretskii <=
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Paul Eggert, 2016/10/10
- Re: MinGW compilation errors with Gnulib wchar.h and wctype.h, Eli Zaretskii, 2016/10/10