changeset 8646:27dec01819aa

Fix problem with Compaq (ex-DEC) Desktop C compiler on Tru64.
author Bruno Haible <bruno@clisp.org>
date Fri, 06 Apr 2007 12:25:54 +0000
parents 21f8505f12f3
children 8493230fff95
files ChangeLog lib/math_.h lib/stdio_.h lib/stdlib_.h lib/string_.h lib/time_.h lib/wchar_.h lib/wctype_.h
diffstat 8 files changed, 124 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2007-04-06  Bruno Haible  <bruno@clisp.org>
+
+	Fix problem with Compaq (ex-DEC) Desktop C compiler on Tru64.
+	* lib/math_.h [__DECC]: Include the overridden include file through
+	#include_next, outside the double-inclusion guard.
+	* lib/stdio_.h [__DECC]: Likewise.
+	* lib/stdlib_.h [__DECC]: Likewise.
+	* lib/string_.h [__DECC]: Likewise.
+	* lib/time_.h [__DECC]: Likewise.
+	* lib/wchar_.h [__DECC]: Likewise.
+	* lib/wctype_.h [__DECC]: Likewise.
+	Reported by Albert Chin <china@thewrittenword.com> in
+	<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00088.html>.
+
 2007-04-04  Eric Blake  <ebb9@byu.net>
 
 	* m4/stdint.m4 (gl_STDINT_H): Detect WINT_MAX bug in cygwin
--- a/lib/math_.h
+++ b/lib/math_.h
@@ -16,10 +16,16 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
+#ifdef __DECC
+# include_next <math.h>
+#endif
+
 #ifndef _GL_MATH_H
 #define _GL_MATH_H
 
-#include @ABSOLUTE_MATH_H@
+#ifndef __DECC
+# include @ABSOLUTE_MATH_H@
+#endif
 
 
 /* The definition of GL_LINK_WARNING is copied here.  */
--- a/lib/stdio_.h
+++ b/lib/stdio_.h
@@ -23,10 +23,17 @@
 
 #else
 /* Normal invocation convention.  */
+
+#ifdef __DECC
+# include_next <stdio.h>
+#endif
+
 #ifndef _GL_STDIO_H
 #define _GL_STDIO_H
 
-#include @ABSOLUTE_STDIO_H@
+#ifndef __DECC
+# include @ABSOLUTE_STDIO_H@
+#endif
 
 #include <stdarg.h>
 #include <stddef.h>
--- a/lib/stdlib_.h
+++ b/lib/stdlib_.h
@@ -30,6 +30,11 @@
 
 #else
 /* Normal invocation convention.  */
+
+#ifdef __DECC
+# include_next <stdlib.h>
+#endif
+
 #ifndef _GL_STDLIB_H
 #define _GL_STDLIB_H
 
@@ -40,7 +45,9 @@
 # pragma GCC system_header
 #endif
 
-#include @ABSOLUTE_STDLIB_H@
+#ifndef __DECC
+# include @ABSOLUTE_STDLIB_H@
+#endif
 
 
 /* The definition of GL_LINK_WARNING is copied here.  */
--- a/lib/string_.h
+++ b/lib/string_.h
@@ -16,6 +16,10 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
+#ifdef __DECC
+# include_next <string.h>
+#endif
+
 #ifndef _GL_STRING_H
 #define _GL_STRING_H
 
@@ -25,7 +29,9 @@
 # pragma GCC system_header
 #endif
 
-#include @ABSOLUTE_STRING_H@
+#ifndef __DECC
+# include @ABSOLUTE_STRING_H@
+#endif
 
 
 /* The definition of GL_LINK_WARNING is copied here.  */
--- a/lib/time_.h
+++ b/lib/time_.h
@@ -22,86 +22,97 @@
 #if defined __need_time_t || defined __need_clock_t || defined __need_timespec
 # include @ABSOLUTE_TIME_H@
 
-#elif ! defined _GL_TIME_H
-# define _GL_TIME_H
-# include @ABSOLUTE_TIME_H@
+#else
+/* Normal invocation convention.  */
+
+# ifdef __DECC
+#  include_next <time.h>
+# endif
 
-# ifdef __cplusplus
+# if ! defined _GL_TIME_H
+#  define _GL_TIME_H
+
+#  ifndef __DECC
+#   include @ABSOLUTE_TIME_H@
+#  endif
+
+#  ifdef __cplusplus
 extern "C" {
-# endif
+#  endif
 
 /* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
    Or they define it with the wrong member names or define it in <sys/time.h>
    (e.g., FreeBSD circa 1997).  */
-# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
-#  if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
-#   include <sys/time.h>
-#  else
-#   undef timespec
-#   define timespec rpl_timespec
+#  if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
+#   if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+#    include <sys/time.h>
+#   else
+#    undef timespec
+#    define timespec rpl_timespec
 struct timespec
 {
   time_t tv_sec;
   long int tv_nsec;
 };
+#   endif
 #  endif
-# endif
 
 /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
    return -1 and store the remaining time into RMTP.  See
    <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
-# if @REPLACE_NANOSLEEP@
-#  define nanosleep rpl_nanosleep
+#  if @REPLACE_NANOSLEEP@
+#   define nanosleep rpl_nanosleep
 int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp);
-# endif
+#  endif
 
 /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
    <http://www.opengroup.org/susv3xsh/localtime_r.html> and
    <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
-# if @REPLACE_LOCALTIME_R@
-#  undef localtime_r
-#  define localtime_r rpl_localtime_r
-#  undef gmtime_r
-#  define gmtime_r rpl_gmtime_r
+#  if @REPLACE_LOCALTIME_R@
+#   undef localtime_r
+#   define localtime_r rpl_localtime_r
+#   undef gmtime_r
+#   define gmtime_r rpl_gmtime_r
 struct tm *localtime_r (time_t const *restrict __timer,
 			struct tm *restrict __result);
 struct tm *gmtime_r (time_t const *restrict __timer,
 		     struct tm *restrict __result);
-# endif
+#  endif
 
 /* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
    the resulting broken-down time into TM.  See
    <http://www.opengroup.org/susv3xsh/strptime.html>.  */
-# if @REPLACE_STRPTIME@
-#  undef strptime
-#  define strptime rpl_strptime
+#  if @REPLACE_STRPTIME@
+#   undef strptime
+#   define strptime rpl_strptime
 char *strptime (char const *restrict __buf, char const *restrict __format,
 		struct tm *restrict __tm);
-# endif
+#  endif
 
 /* Convert TM to a time_t value, assuming UTC.  */
-# if @REPLACE_TIMEGM@
-#  undef timegm
-#  define timegm rpl_timegm
+#  if @REPLACE_TIMEGM@
+#   undef timegm
+#   define timegm rpl_timegm
 time_t timegm (struct tm *__tm);
-#endif
+#  endif
 
 /* Encourage applications to avoid unsafe functions that can overrun
    buffers when given outlandish struct tm values.  Portable
    applications should use strftime (or even sprintf) instead.  */
-# if GNULIB_PORTCHECK
-#  undef asctime
-#  define asctime eschew_asctime
-#  undef asctime_r
-#  define asctime_r eschew_asctime_r
-#  undef ctime
-#  define ctime eschew_ctime
-#  undef ctime_r
-#  define ctime_r eschew_ctime_r
+#  if GNULIB_PORTCHECK
+#   undef asctime
+#   define asctime eschew_asctime
+#   undef asctime_r
+#   define asctime_r eschew_asctime_r
+#   undef ctime
+#   define ctime eschew_ctime
+#   undef ctime_r
+#   define ctime_r eschew_ctime_r
+#  endif
+
+#  ifdef __cplusplus
+}
+#  endif
+
 # endif
-
-# ifdef __cplusplus
-}
-# endif
-
 #endif
--- a/lib/wchar_.h
+++ b/lib/wchar_.h
@@ -25,6 +25,11 @@
  * For now, this just ensures proper prerequisite inclusion order.
  */
 
+#ifdef __DECC
+# include <stdio.h>
+# include_next <wchar.h>
+#endif
+
 #ifndef _GL_WCHAR_H
 #define _GL_WCHAR_H
 
@@ -37,6 +42,8 @@
 #include <time.h>
 
 /* Include the original <wchar.h>.  */
-#include @ABSOLUTE_WCHAR_H@
+#ifndef __DECC
+# include @ABSOLUTE_WCHAR_H@
+#endif
 
 #endif /* _GL_WCHAR_H */
--- a/lib/wctype_.h
+++ b/lib/wctype_.h
@@ -26,9 +26,6 @@
  * wctrans_t, and wctype_t are not yet implemented.
  */
 
-#ifndef _GL_WCTYPE_H
-#define _GL_WCTYPE_H
-
 #if @HAVE_WINT_T@
 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
    Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
@@ -39,15 +36,29 @@
 # include <stdio.h>
 # include <time.h>
 # include <wchar.h>
-typedef wint_t __wctype_wint_t;
-#else
-typedef int __wctype_wint_t;
 #endif
 
+#if @HAVE_WCTYPE_H@
+# ifdef __DECC
+#  include_next <wctype.h>
+# endif
+#endif
+
+#ifndef _GL_WCTYPE_H
+#define _GL_WCTYPE_H
+
 /* Include the original <wctype.h> if it exists.
    BeOS 5 has the functions but no <wctype.h>.  */
 #if @HAVE_WCTYPE_H@
-# include @ABSOLUTE_WCTYPE_H@
+# ifndef __DECC
+#  include @ABSOLUTE_WCTYPE_H@
+# endif
+#endif
+
+#if @HAVE_WINT_T@
+typedef wint_t __wctype_wint_t;
+#else
+typedef int __wctype_wint_t;
 #endif
 
 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.