bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gnulib breakage on Tru64 UNIX with commercial C compiler


From: Bruno Haible
Subject: Re: gnulib breakage on Tru64 UNIX with commercial C compiler
Date: Fri, 6 Apr 2007 14:34:36 +0200
User-agent: KMail/1.5.4

Albert Chin wrote:
> If I change:
>   #include "///usr/include.dtk/stdio.h"
> to:
>   #include_next <stdio.h>
> then it works as expected (./stdio.h, /usr/include.dtk/stdio.h,
> /usr/include/stdio.h).
> 
> If I #include_next "///usr/include.dtk/stdio.h", it does not.

Thanks for these tests.

Furthermore the #include_next must be outside our double-inclusion guard,
otherwise it breaks: Often we use the CPPFLAGS   -Ilib -I./lib  (or similar),
and then the compiler has these files in his list:

  lib/stdio.h
  ./lib/stdio.h
  /usr/include.dtk/stdio.h
  /usr/include/stdio.h

the second one will expand to empty (i.e. not include /usr/include.dtk/stdio.h)
if the #include_next is inside the double-inclusion guard.

I'm applying this. Not just for <stdio.h>, but for all header files for
which there is a /usr/include.dtk/....h with an include_next directive.


2007-04-06  Bruno Haible  <address@hidden>

        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 <address@hidden> in
        <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00088.html>.

*** lib/math_.h 30 Mar 2007 00:13:24 -0000      1.8
--- lib/math_.h 6 Apr 2007 12:17:19 -0000
***************
*** 16,25 ****
     along with this program; if not, write to the Free Software Foundation,
     Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
  
  #ifndef _GL_MATH_H
  #define _GL_MATH_H
  
! #include @ABSOLUTE_MATH_H@
  
  
  /* The definition of GL_LINK_WARNING is copied here.  */
--- 16,31 ----
     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
  
! #ifndef __DECC
! # include @ABSOLUTE_MATH_H@
! #endif
  
  
  /* The definition of GL_LINK_WARNING is copied here.  */
*** lib/stdio_.h        27 Mar 2007 20:18:17 -0000      1.14
--- lib/stdio_.h        6 Apr 2007 12:17:19 -0000
***************
*** 23,32 ****
  
  #else
  /* Normal invocation convention.  */
  #ifndef _GL_STDIO_H
  #define _GL_STDIO_H
  
! #include @ABSOLUTE_STDIO_H@
  
  #include <stdarg.h>
  #include <stddef.h>
--- 23,39 ----
  
  #else
  /* Normal invocation convention.  */
+ 
+ #ifdef __DECC
+ # include_next <stdio.h>
+ #endif
+ 
  #ifndef _GL_STDIO_H
  #define _GL_STDIO_H
  
! #ifndef __DECC
! # include @ABSOLUTE_STDIO_H@
! #endif
  
  #include <stdarg.h>
  #include <stddef.h>
*** lib/stdlib_.h       17 Mar 2007 19:02:51 -0000      1.7
--- lib/stdlib_.h       6 Apr 2007 12:17:19 -0000
***************
*** 30,35 ****
--- 30,40 ----
  
  #else
  /* Normal invocation convention.  */
+ 
+ #ifdef __DECC
+ # include_next <stdlib.h>
+ #endif
+ 
  #ifndef _GL_STDLIB_H
  #define _GL_STDLIB_H
  
***************
*** 40,46 ****
  # pragma GCC system_header
  #endif
  
! #include @ABSOLUTE_STDLIB_H@
  
  
  /* The definition of GL_LINK_WARNING is copied here.  */
--- 45,53 ----
  # pragma GCC system_header
  #endif
  
! #ifndef __DECC
! # include @ABSOLUTE_STDLIB_H@
! #endif
  
  
  /* The definition of GL_LINK_WARNING is copied here.  */
*** lib/string_.h       21 Mar 2007 04:22:35 -0000      1.29
--- lib/string_.h       6 Apr 2007 12:17:19 -0000
***************
*** 16,21 ****
--- 16,25 ----
     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,31 ****
  # pragma GCC system_header
  #endif
  
! #include @ABSOLUTE_STRING_H@
  
  
  /* The definition of GL_LINK_WARNING is copied here.  */
--- 29,37 ----
  # pragma GCC system_header
  #endif
  
! #ifndef __DECC
! # include @ABSOLUTE_STRING_H@
! #endif
  
  
  /* The definition of GL_LINK_WARNING is copied here.  */
*** lib/time_.h 1 Mar 2007 21:24:55 -0000       1.2
--- lib/time_.h 6 Apr 2007 12:17:19 -0000
***************
*** 22,107 ****
  #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@
  
! # ifdef __cplusplus
! extern "C" {
  # 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
  struct timespec
  {
    time_t tv_sec;
    long int tv_nsec;
  };
  #  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
  int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp);
! # 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
  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
  
  /* 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
  char *strptime (char const *restrict __buf, char const *restrict __format,
                struct tm *restrict __tm);
! # endif
  
  /* Convert TM to a time_t value, assuming UTC.  */
! # if @REPLACE_TIMEGM@
! #  undef timegm
! #  define timegm rpl_timegm
  time_t timegm (struct tm *__tm);
! #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
! # endif
  
! # ifdef __cplusplus
  }
! # endif
  
  #endif
--- 22,118 ----
  #if defined __need_time_t || defined __need_clock_t || defined __need_timespec
  # include @ABSOLUTE_TIME_H@
  
! #else
! /* Normal invocation convention.  */
  
! # ifdef __DECC
! #  include_next <time.h>
  # endif
  
+ # if ! defined _GL_TIME_H
+ #  define _GL_TIME_H
+ 
+ #  ifndef __DECC
+ #   include @ABSOLUTE_TIME_H@
+ #  endif
+ 
+ #  ifdef __cplusplus
+ extern "C" {
+ #  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
  struct timespec
  {
    time_t tv_sec;
    long int tv_nsec;
  };
+ #   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
  int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp);
! #  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
  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
  
  /* 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
  char *strptime (char const *restrict __buf, char const *restrict __format,
                struct tm *restrict __tm);
! #  endif
  
  /* Convert TM to a time_t value, assuming UTC.  */
! #  if @REPLACE_TIMEGM@
! #   undef timegm
! #   define timegm rpl_timegm
  time_t timegm (struct tm *__tm);
! #  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
! #  endif
  
! #  ifdef __cplusplus
  }
! #  endif
  
+ # endif
  #endif
*** lib/wchar_.h        13 Jan 2007 05:23:37 -0000      1.1
--- lib/wchar_.h        6 Apr 2007 12:17:19 -0000
***************
*** 25,30 ****
--- 25,35 ----
   * 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,42 ****
  #include <time.h>
  
  /* Include the original <wchar.h>.  */
! #include @ABSOLUTE_WCHAR_H@
  
  #endif /* _GL_WCHAR_H */
--- 42,49 ----
  #include <time.h>
  
  /* Include the original <wchar.h>.  */
! #ifndef __DECC
! # include @ABSOLUTE_WCHAR_H@
! #endif
  
  #endif /* _GL_WCHAR_H */
*** lib/wctype_.h       10 Jan 2007 22:25:04 -0000      1.8
--- lib/wctype_.h       6 Apr 2007 12:17:19 -0000
***************
*** 26,34 ****
   * 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
--- 26,31 ----
***************
*** 39,53 ****
  # include <stdio.h>
  # include <time.h>
  # include <wchar.h>
- typedef wint_t __wctype_wint_t;
- #else
- typedef int __wctype_wint_t;
  #endif
  
  /* 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@
  #endif
  
  /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
--- 36,64 ----
  # include <stdio.h>
  # include <time.h>
  # include <wchar.h>
  #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@
! # 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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]