[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Gnulib's wctype.h fails to compile with MinGW
From: |
Bruno Haible |
Subject: |
Re: Gnulib's wctype.h fails to compile with MinGW |
Date: |
Mon, 01 May 2017 12:45:08 +0200 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-75-generic; KDE/5.18.0; x86_64; ; ) |
Eli Zaretskii wrote:
> It turns out the same problem exists in Gnulib's wchar.h, so it needs
> the same solution. Bruno, could you do that, please?
Done per patch below.
> (The reason I didn't see that before is because Gnulib's wchar.h is
> used in Texinfo only when compiling the XS extensions, which I didn't
> succeed in originally.)
You don't need to apologize for not reporting all bugs together. We always
report and fix bugs one by one.
2017-05-01 Bruno Haible <address@hidden>
wchar: Fix compilation error with the original mingw.org mingw.
* lib/wchar.in.h (rpl_wint_t): If <crtdefs.h> does not exist, include
<stddef.h> instead.
* m4/wint_t.m4 (gl_TYPE_WINT_T_PREREQ): New macro, extracted from
gl_WCTYPE_H.
* m4/wctype_h.m4 (gl_WCTYPE_H): Don't set HAVE_CRTDEFS_H here; require
gl_TYPE_WINT_T_PREREQ instead.
* m4/wchar_h.m4 (gl_WCHAR_H): Require gl_TYPE_WINT_T_PREREQ.
* modules/wchar (Makefile.am): Substitute HAVE_CRTDEFS_H.
Reported by Eli Zaretskii <address@hidden>.
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
index ef155d2..8666b5d 100644
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -113,12 +113,16 @@
# define WEOF -1
# endif
#else
-/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h>.
- This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
- "unchanged by default argument promotions". Override it. */
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+ <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
+ wint_t must be "unchanged by default argument promotions". Override it. */
# if @GNULIB_OVERRIDES_WINT_T@
# if !GNULIB_defined_wint_t
-# include <crtdefs.h>
+# if @HAVE_CRTDEFS_H@
+# include <crtdefs.h>
+# else
+# include <stddef.h>
+# endif
typedef unsigned int rpl_wint_t;
# undef wint_t
# define wint_t rpl_wint_t
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
index 621cfb9..1a2734c 100644
--- a/m4/wchar_h.m4
+++ b/m4/wchar_h.m4
@@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is
preserved.
dnl Written by Eric Blake.
-# wchar_h.m4 serial 41
+# wchar_h.m4 serial 42
AC_DEFUN([gl_WCHAR_H],
[
@@ -35,6 +35,8 @@ AC_DEFUN([gl_WCHAR_H],
fi
AC_SUBST([HAVE_WINT_T])
+ AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[
diff --git a/m4/wctype_h.m4 b/m4/wctype_h.m4
index c72a73f..0c8c305 100644
--- a/m4/wctype_h.m4
+++ b/m4/wctype_h.m4
@@ -1,4 +1,4 @@
-# wctype_h.m4 serial 19
+# wctype_h.m4 serial 20
dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
@@ -30,6 +30,8 @@ AC_DEFUN([gl_WCTYPE_H],
fi
AC_SUBST([HAVE_WINT_T])
+ AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
gl_CHECK_NEXT_HEADERS([wctype.h])
if test $ac_cv_header_wctype_h = yes; then
if test $ac_cv_func_iswcntrl = yes; then
@@ -66,14 +68,6 @@ AC_DEFUN([gl_WCTYPE_H],
fi
AC_SUBST([HAVE_WCTYPE_H])
- AC_CHECK_HEADERS_ONCE([crtdefs.h])
- if test $ac_cv_header_crtdefs_h = yes; then
- HAVE_CRTDEFS_H=1
- else
- HAVE_CRTDEFS_H=0
- fi
- AC_SUBST([HAVE_CRTDEFS_H])
-
case "$gl_cv_func_iswcntrl_works" in
*yes) REPLACE_ISWCNTRL=0 ;;
*) REPLACE_ISWCNTRL=1 ;;
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
index 65e25a4..d30b8bc 100644
--- a/m4/wint_t.m4
+++ b/m4/wint_t.m4
@@ -1,4 +1,4 @@
-# wint_t.m4 serial 6
+# wint_t.m4 serial 7
dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -60,3 +60,15 @@ AC_DEFUN([gt_TYPE_WINT_T],
fi
AC_SUBST([GNULIB_OVERRIDES_WINT_T])
])
+
+dnl Prerequisites of the 'wint_t' override.
+AC_DEFUN([gl_TYPE_WINT_T_PREREQ],
+[
+ AC_CHECK_HEADERS_ONCE([crtdefs.h])
+ if test $ac_cv_header_crtdefs_h = yes; then
+ HAVE_CRTDEFS_H=1
+ else
+ HAVE_CRTDEFS_H=0
+ fi
+ AC_SUBST([HAVE_CRTDEFS_H])
+])
diff --git a/modules/wchar b/modules/wchar
index 73012c6..31770d8 100644
--- a/modules/wchar
+++ b/modules/wchar
@@ -31,6 +31,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status
$(CXXDEFS_H) $(ARG_NONNULL_H)
-e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
-e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g'
\
-e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
-e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
- Re: Gnulib's wctype.h fails to compile with MinGW,
Bruno Haible <=