[Top][All Lists]
[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.