changeset 38522:c2d38142dbf0

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 <eliz@gnu.org>.
author Bruno Haible <bruno@clisp.org>
date Mon, 01 May 2017 12:36:02 +0200
parents 3cd64e3590e8
children 362be3f37898
files ChangeLog lib/wchar.in.h m4/wchar_h.m4 m4/wctype_h.m4 m4/wint_t.m4 modules/wchar
diffstat 6 files changed, 41 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon May 01 11:52:56 2017 +0200
+++ b/ChangeLog	Mon May 01 12:36:02 2017 +0200
@@ -1,3 +1,16 @@
+2017-05-01  Bruno Haible  <bruno@clisp.org>
+
+	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 <eliz@gnu.org>.
+
 2017-04-30  Bruno Haible  <bruno@clisp.org>
 
 	utimecmp: Add support for native Windows.
--- a/lib/wchar.in.h	Mon May 01 11:52:56 2017 +0200
+++ b/lib/wchar.in.h	Mon May 01 12:36:02 2017 +0200
@@ -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
--- a/m4/wchar_h.m4	Mon May 01 11:52:56 2017 +0200
+++ b/m4/wchar_h.m4	Mon May 01 12:36:02 2017 +0200
@@ -7,7 +7,7 @@
 
 dnl Written by Eric Blake.
 
-# wchar_h.m4 serial 41
+# wchar_h.m4 serial 42
 
 AC_DEFUN([gl_WCHAR_H],
 [
@@ -35,6 +35,8 @@
   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([[
--- a/m4/wctype_h.m4	Mon May 01 11:52:56 2017 +0200
+++ b/m4/wctype_h.m4	Mon May 01 12:36:02 2017 +0200
@@ -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 @@
   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 @@
   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 ;;
--- a/m4/wint_t.m4	Mon May 01 11:52:56 2017 +0200
+++ b/m4/wint_t.m4	Mon May 01 12:36:02 2017 +0200
@@ -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 @@
   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])
+])
--- a/modules/wchar	Mon May 01 11:52:56 2017 +0200
+++ b/modules/wchar	Mon May 01 12:36:02 2017 +0200
@@ -31,6 +31,7 @@
 	      -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' \