Fix portability problem with Tru64 and BSD/OS.
authorBruno Haible <bruno@clisp.org>
Thu, 18 Mar 2004 13:36:53 +0000 (13:36 +0000)
committerBruno Haible <bruno@clisp.org>
Thu, 18 Mar 2004 13:36:53 +0000 (13:36 +0000)
lib/ChangeLog
lib/mbswidth.c
lib/mbswidth.h
m4/ChangeLog
m4/mbswidth.m4

index ee5b5f634cdb70d532fd9e233b4a35191ef29075..0a315fe4ad94ae0b3e6a9e2d0f19977aee95699b 100644 (file)
@@ -1,3 +1,10 @@
+2004-03-18  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * mbswidth.h: Include <wchar.h> only if HAVE_DECL_MBSWIDTH_IN_WCHAR_H,
+       not on all platforms that have <wchar.h>.
+       * mbswidth.c: Include <stdio.h> and <time.h> before <wchar.h>.
+
 2004-03-09  Paul Eggert  <eggert@cs.ucla.edu>
 
        * argp-parse.c, getopt.c, getopt.h, getopt1.c:
index c6f91db971a104f138f4937ec6b70bf7e15de1a3..6b9d4b38bbe6e8e135ae2a40f9ed523a6be4c719 100644 (file)
@@ -1,5 +1,5 @@
 /* Determine the number of screen columns needed for a string.
-   Copyright (C) 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 2000-2004 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
 
 /* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth().  */
 #if HAVE_WCHAR_H
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+   <wchar.h>.  */
+# include <stdio.h>
+# include <time.h>
 # include <wchar.h>
 #endif
 
index cd41c9f20efbeb6545db9cdcd025890218b1cc1c..6fec3f4904a4acbe80ccdc29f8e57b6510c5ba82 100644 (file)
@@ -1,5 +1,5 @@
 /* Determine the number of screen columns needed for a string.
-   Copyright (C) 2000-2003 Free Software Foundation, Inc.
+   Copyright (C) 2000-2004 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
 
 /* Avoid a clash of our mbswidth() with a function of the same name defined
    in UnixWare 7.1.1 <wchar.h>.  We need this #include before the #define
-   below.  */
-#if HAVE_WCHAR_H
+   below.
+   However, we don't want to #include <wchar.h> on all platforms because
+   - Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+     <wchar.h>.
+   - BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+     <wchar.h>.  */
+#if HAVE_DECL_MBSWIDTH_IN_WCHAR_H
 # include <wchar.h>
 #endif
 
index 29bc12e5cc4bfeac7ef577c964d16cb40e826741..8abf642befd2fd3826981b1b2051b217ea54f1fc 100644 (file)
@@ -1,3 +1,9 @@
+2004-03-18  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * mbswidth.m4 (gl_MBSWIDTH): Also test whether <wchar.h> declares
+       mbswidth.
+
 2004-03-07  Paul Eggert  <eggert@twinsun.com>
 
        * c-stack.m4 (gl_PREREQ_C_STACK): Renamed from jm_PREREQ_C_STACK.
index d7981ca39b74db3fd7b286dd2af5dd7586a20aba..7eefd879d26a46e04279dd0972a38ebd905fdc6b 100644 (file)
@@ -1,4 +1,4 @@
-#serial 9
+#serial 10
 
 dnl autoconf tests required for use of mbswidth.c
 dnl From Bruno Haible.
@@ -32,5 +32,24 @@ AC_DEFUN([gl_MBSWIDTH],
   AC_DEFINE_UNQUOTED(HAVE_DECL_WCWIDTH, $ac_val,
     [Define to 1 if you have the declaration of wcwidth(), and to 0 otherwise.])
 
+  dnl UnixWare 7.1.1 <wchar.h> has a declaration of a function mbswidth()
+  dnl that clashes with ours.
+  AC_CACHE_CHECK([whether mbswidth is declared in <wchar.h>],
+    ac_cv_have_decl_mbswidth,
+    [AC_TRY_COMPILE([
+#if HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+], [
+  char *p = (char *) mbswidth;
+], ac_cv_have_decl_mbswidth=yes, ac_cv_have_decl_mbswidth=no)])
+  if test $ac_cv_have_decl_mbswidth = yes; then
+    ac_val=1
+  else
+    ac_val=0
+  fi
+  AC_DEFINE_UNQUOTED(HAVE_DECL_MBSWIDTH_IN_WCHAR_H, $ac_val,
+    [Define to 1 if you have a declaration of mbswidth() in <wchar.h>, and to 0 otherwise.])
+
   AC_TYPE_MBSTATE_T
 ])