changeset 8922:4d1bebb0f82b

Linux uClibc built without wide character support lacks <wchar.h>.
author Bruno Haible <bruno@clisp.org>
date Thu, 07 Jun 2007 13:33:15 +0000
parents 28ffab893f7a
children 9ded750c3fc8
files ChangeLog doc/headers/wchar.texi lib/wchar_.h m4/stdint.m4 m4/wchar.m4 modules/mbfile modules/mbiter modules/mbuiter modules/wchar
diffstat 9 files changed, 49 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2007-06-07  Bruno Haible  <bruno@clisp.org>
+
+	Work around the lack of <wchar.h> on some builds of uClibc.
+	* doc/headers/wchar.texi: Update.
+	* lib/wchar_.h: Include <wchar.h> only if it exists.
+	* m4/wchar.m4 (gl_WCHAR_H): Check for <wchar.h>. Set HAVE_WCHAR_H.
+	* m4/stdint.m4 (gl_STDINT_H): Check for <wchar.h>.
+	(gl_STDINT_TYPE_PROPERTIES): Don't try to include <wchar.h> if it
+	doesn't exist.
+	* modules/wchar (wchar.h): Substitute HAVE_WCHAR_H.
+	* modules/mbfile (Depends-on): Add wchar.
+	* modules/mbiter (Depends-on): Likewise.
+	* modules/mbuiter (Depends-on): Likewise.
+
 2007-06-06  Paul Eggert  <eggert@cs.ucla.edu>
 
 	Work around problem reported by Steven M. Schweda in
--- a/doc/headers/wchar.texi
+++ b/doc/headers/wchar.texi
@@ -8,6 +8,9 @@
 Portability problems fixed by Gnulib:
 @itemize
 @item
+This header file cannot be included on some platforms:
+Linux uClibc built without wide character support.
+@item
 This header file is not self-contained on some platforms:
 OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1.
 @end itemize
--- a/lib/wchar_.h
+++ b/lib/wchar_.h
@@ -35,12 +35,15 @@
 #include <stdio.h>
 #include <time.h>
 
-/* Include the original <wchar.h>.  */
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
 /* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_INCLUDE_NEXT@
-# include_next <wchar.h>
-#else
-# include @ABSOLUTE_WCHAR_H@
+#if @HAVE_WCHAR_H@
+# if @HAVE_INCLUDE_NEXT@
+#  include_next <wchar.h>
+# else
+#  include @ABSOLUTE_WCHAR_H@
+# endif
 #endif
 
 #ifndef _GL_WCHAR_H
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,4 +1,4 @@
-# stdint.m4 serial 25
+# stdint.m4 serial 26
 dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -222,6 +222,10 @@
     fi
     AC_SUBST([HAVE_SYS_BITYPES_H])
 
+    dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+    dnl character support).
+    AC_CHECK_HEADERS_ONCE([wchar.h])
+
     gl_STDINT_TYPE_PROPERTIES
     STDINT_H=stdint.h
   fi
@@ -357,9 +361,11 @@
      included before <wchar.h>.  */
   #include <stddef.h>
   #include <signal.h>
-  #include <stdio.h>
-  #include <time.h>
-  #include <wchar.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
 ]])
 
 dnl gl_STDINT_TYPE_PROPERTIES
--- a/m4/wchar.m4
+++ b/m4/wchar.m4
@@ -7,7 +7,7 @@
 
 dnl Written by Eric Blake.
 
-# wchar.m4 serial 1
+# wchar.m4 serial 2
 
 AC_DEFUN([gl_WCHAR_H],
 [
@@ -20,6 +20,15 @@
   if test $gl_cv_header_wchar_h_standalone = yes; then
     WCHAR_H=
   else
+    dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+    dnl character support).
+    AC_CHECK_HEADERS_ONCE([wchar.h])
+    if test $ac_cv_header_wchar_h = yes; then
+      HAVE_WCHAR_H=1
+    else
+      HAVE_WCHAR_H=0
+    fi
+    AC_SUBST([HAVE_WCHAR_H])
     gl_ABSOLUTE_HEADER([wchar.h])
     ABSOLUTE_WCHAR_H=\"$gl_cv_absolute_wchar_h\"
     WCHAR_H=wchar.h
--- a/modules/mbfile
+++ b/modules/mbfile
@@ -8,6 +8,7 @@
 
 Depends-on:
 mbchar
+wchar
 stdbool
 
 configure.ac:
--- a/modules/mbiter
+++ b/modules/mbiter
@@ -8,6 +8,7 @@
 
 Depends-on:
 mbchar
+wchar
 stdbool
 
 configure.ac:
--- a/modules/mbuiter
+++ b/modules/mbuiter
@@ -8,6 +8,7 @@
 
 Depends-on:
 mbchar
+wchar
 stdbool
 strnlen1
 
--- a/modules/wchar
+++ b/modules/wchar
@@ -21,6 +21,7 @@
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
 	  sed -e 's|@''ABSOLUTE_WCHAR_H''@|$(ABSOLUTE_WCHAR_H)|g' \
 	      -e 's/@''HAVE_INCLUDE_NEXT''@/$(HAVE_INCLUDE_NEXT)/g' \
+	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
 	    < $(srcdir)/wchar_.h; \
 	} > $@-t
 	mv $@-t $@