changeset 10454:83d12e60b1e0

Ensure that wint_t gets defined on IRIX 5.3.
author Bruno Haible <bruno@clisp.org>
date Sat, 20 Sep 2008 14:51:52 +0200
parents 483ea2002278
children e8f55251d47e
files ChangeLog doc/posix-headers/wchar.texi doc/posix-headers/wctype.texi lib/wchar.in.h lib/wctype.in.h m4/wchar.m4 modules/wchar tests/test-wchar.c tests/test-wctype.c
diffstat 9 files changed, 65 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2008-09-20  Bruno Haible  <bruno@clisp.org>
+
+	Ensure that wint_t gets defined on IRIX 5.3.
+	* lib/wchar.in.h (wint_t): Define if not defined by the system.
+	* lib/wctype.in.h (wint_t): Likewise.
+	(__wctype_wint_t): Remove type.
+	(isw*): Use wint_t instead of __wctype_wint_t.
+	* m4/wchar.m4 (gl_WCHAR_H): Invoke gt_TYPE_WINT_T and set HAVE_WINT_T.
+	* modules/wchar (Files): Add m4/wint_t.m4.
+	(Makefile.am): Substitute HAVE_WINT_T.
+	* tests/test-wchar.c: Check that wchar_t and wint_t are defined.
+	* tests/test-wctype.c: Check that wint_t is defined.
+	* doc/posix-headers/wchar.texi: Mention the IRIX 5 problem.
+	* doc/posix-headers/wctype.texi: Likewise.
+	Reported by Tom G. Christensen <tgc@jupiterrise.com>.
+
 2008-09-18  Bruno Haible  <bruno@clisp.org>
 
 	* gnulib-tool (func_exit): Update comment.
--- a/doc/posix-headers/wchar.texi
+++ b/doc/posix-headers/wchar.texi
@@ -13,6 +13,9 @@
 @item
 This header file is not self-contained on some platforms:
 OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1.
+@item
+The type @code{wint_t} is missing on some platforms:
+IRIX 5.3.
 @end itemize
 
 Portability problems not fixed by Gnulib:
--- a/doc/posix-headers/wctype.texi
+++ b/doc/posix-headers/wctype.texi
@@ -14,6 +14,9 @@
 This header file is not self-contained on some platforms:
 Solaris 2.5, OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1.
 @item
+The type @code{wint_t} is missing on some platforms:
+IRIX 5.3.
+@item
 The functions @code{isw*} are missing on some platforms:
 FreeBSD 4.11.
 @item
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -63,6 +63,12 @@
 #endif
 
 
+/* Define wint_t.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+#endif
+
+
 /* Return the number of screen columns needed for WC.  */
 #if @GNULIB_WCWIDTH@
 # if @REPLACE_WCWIDTH@
--- a/lib/wctype.in.h
+++ b/lib/wctype.in.h
@@ -52,10 +52,9 @@
 #ifndef _GL_WCTYPE_H
 #define _GL_WCTYPE_H
 
-#if @HAVE_WINT_T@
-typedef wint_t __wctype_wint_t;
-#else
-typedef int __wctype_wint_t;
+/* Define wint_t.  (Also done in wchar.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
 #endif
 
 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
@@ -98,56 +97,56 @@
 #  endif
 
 static inline int
-iswalnum (__wctype_wint_t wc)
+iswalnum (wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
 	  || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
 }
 
 static inline int
-iswalpha (__wctype_wint_t wc)
+iswalpha (wint_t wc)
 {
   return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
 }
 
 static inline int
-iswblank (__wctype_wint_t wc)
+iswblank (wint_t wc)
 {
   return wc == ' ' || wc == '\t';
 }
 
 static inline int
-iswcntrl (__wctype_wint_t wc)
+iswcntrl (wint_t wc)
 {
   return (wc & ~0x1f) == 0 || wc == 0x7f;
 }
 
 static inline int
-iswdigit (__wctype_wint_t wc)
+iswdigit (wint_t wc)
 {
   return wc >= '0' && wc <= '9';
 }
 
 static inline int
-iswgraph (__wctype_wint_t wc)
+iswgraph (wint_t wc)
 {
   return wc >= '!' && wc <= '~';
 }
 
 static inline int
-iswlower (__wctype_wint_t wc)
+iswlower (wint_t wc)
 {
   return wc >= 'a' && wc <= 'z';
 }
 
 static inline int
-iswprint (__wctype_wint_t wc)
+iswprint (wint_t wc)
 {
   return wc >= ' ' && wc <= '~';
 }
 
 static inline int
-iswpunct (__wctype_wint_t wc)
+iswpunct (wint_t wc)
 {
   return (wc >= '!' && wc <= '~'
 	  && !((wc >= '0' && wc <= '9')
@@ -155,20 +154,20 @@
 }
 
 static inline int
-iswspace (__wctype_wint_t wc)
+iswspace (wint_t wc)
 {
   return (wc == ' ' || wc == '\t'
 	  || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
 }
 
 static inline int
-iswupper (__wctype_wint_t wc)
+iswupper (wint_t wc)
 {
   return wc >= 'A' && wc <= 'Z';
 }
 
 static inline int
-iswxdigit (__wctype_wint_t wc)
+iswxdigit (wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
 	  || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
--- a/m4/wchar.m4
+++ b/m4/wchar.m4
@@ -1,13 +1,13 @@
 dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
 
-dnl Copyright (C) 2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl Written by Eric Blake.
 
-# wchar.m4 serial 4
+# wchar.m4 serial 5
 
 AC_DEFUN([gl_WCHAR_H],
 [
@@ -18,7 +18,16 @@
 wchar_t w;]],
       [gl_cv_header_wchar_h_standalone=yes],
       [gl_cv_header_wchar_h_standalone=no])])
-  if test $gl_cv_header_wchar_h_standalone != yes; then
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then
     WCHAR_H=wchar.h
   fi
 
--- a/modules/wchar
+++ b/modules/wchar
@@ -4,6 +4,7 @@
 Files:
 lib/wchar.in.h
 m4/wchar.m4
+m4/wint_t.m4
 
 Depends-on:
 include_next
@@ -25,6 +26,7 @@
 	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
 	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
 	      -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
 	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
 	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
 	      -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
--- a/tests/test-wchar.c
+++ b/tests/test-wchar.c
@@ -1,5 +1,5 @@
 /* Test of <wchar.h> substitute.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007-2008 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -20,6 +20,10 @@
 
 #include <wchar.h>
 
+/* Check that the types wchar_t and wint_t are defined.  */
+wchar_t a = 'c';
+wint_t b = 'x';
+
 int
 main ()
 {
--- a/tests/test-wctype.c
+++ b/tests/test-wctype.c
@@ -20,6 +20,9 @@
 
 #include <wctype.h>
 
+/* Check that the type wint_t is defined.  */
+wint_t a = 'x';
+
 int
 main ()
 {