summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2008-11-20 23:33:58 +0100
committerBruno Haible <bruno@clisp.org>2008-11-20 23:39:43 +0100
commit52f349189c93527b757000d5ebb217b68617957c (patch)
tree67c207e12f08bff0c2dfa6c3f4ffffe1b6a525f2
parentf42ef8e521922f40030af8b005114a44b1a15211 (diff)
downloadgnulib-52f349189c93527b757000d5ebb217b68617957c.tar.gz
Attempt to work around another AIX 5.3, 6.1 compiler bug with include_next.
-rw-r--r--ChangeLog10
-rw-r--r--lib/math.in.h2
-rw-r--r--m4/include_next.m452
-rw-r--r--modules/math2
4 files changed, 53 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 2350635a22..8c1961187d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-11-20 Bruno Haible <bruno@clisp.org>
+
+ Attempt to work around an AIX 5.3, 6.1 compiler bug with include_next.
+ * lib/math.in.h: Use INCLUDE_NEXT_AS_FIRST_DIRECTIVE instead of
+ INCLUDE_NEXT.
+ * m4/include_next.m4 (gl_INCLUDE_NEXT): Set also
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE.
+ * modules/math (Makefile.am): Substitute
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE instead of INCLUDE_NEXT.
+
2008-11-18 Alexandre Duret-Lutz <adl@lrde.epita.fr>
Bruno Haible <bruno@clisp.org>
diff --git a/lib/math.in.h b/lib/math.in.h
index c1d6b0a593..6e1b9a2b22 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -22,7 +22,7 @@
#endif
/* The include_next requires a split double-inclusion guard. */
-#@INCLUDE_NEXT@ @NEXT_MATH_H@
+#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_MATH_H@
#ifndef _GL_MATH_H
#define _GL_MATH_H
diff --git a/m4/include_next.m4 b/m4/include_next.m4
index c70c4133a0..062753c588 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,4 +1,4 @@
-# include_next.m4 serial 9
+# include_next.m4 serial 10
dnl Copyright (C) 2006-2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -11,6 +11,10 @@ dnl
dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
dnl 'include' otherwise.
dnl
+dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
+dnl supports it in the special case that it is the first include directive in
+dnl the given file, or to 'include' otherwise.
+dnl
dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
dnl '#pragma GCC system_header' has the same effect as if the file was found
@@ -26,12 +30,26 @@ AC_DEFUN([gl_INCLUDE_NEXT],
AC_LANG_PREPROC_REQUIRE()
AC_CACHE_CHECK([whether the preprocessor supports include_next],
[gl_cv_have_include_next],
- [rm -rf conftestd1 conftestd2
- mkdir conftestd1 conftestd2
+ [rm -rf conftestd1a conftestd1b conftestd2
+ mkdir conftestd1a conftestd1b conftestd2
dnl The include of <stdio.h> is because IBM C 9.0 on AIX 6.1 supports
dnl include_next when used as first preprocessor directive in a file,
- dnl but not when preceded by another include directive.
- cat <<EOF > conftestd1/conftest.h
+ dnl but not when preceded by another include directive. Additionally,
+ dnl with this same compiler, include_next is a no-op when used in a
+ dnl header file that was included by specifying its absolute file name.
+ dnl Despite these two bugs, include_next is used in the compiler's
+ dnl <math.h>. By virtue of the second bug, we need to use include_next
+ dnl as well in this case.
+ cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+ cat <<EOF > conftestd1b/conftest.h
#define DEFINED_IN_CONFTESTD1
#include <stdio.h>
#include_next <conftest.h>
@@ -47,24 +65,36 @@ EOF
#endif
#define DEFINED_IN_CONFTESTD2
EOF
- save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2"
+ gl_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
AC_COMPILE_IFELSE([#include <conftest.h>],
[gl_cv_have_include_next=yes],
- [gl_cv_have_include_next=no])
- CPPFLAGS="$save_CPPFLAGS"
- rm -rf conftestd1 conftestd2
+ [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+ AC_COMPILE_IFELSE([#include <conftest.h>],
+ [gl_cv_have_include_next=buggy],
+ [gl_cv_have_include_next=no])
+ ])
+ CPPFLAGS="$gl_save_CPPFLAGS"
+ rm -rf conftestd1a conftestd1b conftestd2
])
PRAGMA_SYSTEM_HEADER=
if test $gl_cv_have_include_next = yes; then
INCLUDE_NEXT=include_next
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
if test -n "$GCC"; then
PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
fi
else
- INCLUDE_NEXT=include
+ if test $gl_cv_have_include_next = buggy; then
+ INCLUDE_NEXT=include
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+ else
+ INCLUDE_NEXT=include
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+ fi
fi
AC_SUBST([INCLUDE_NEXT])
+ AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
AC_SUBST([PRAGMA_SYSTEM_HEADER])
])
diff --git a/modules/math b/modules/math
index 82408c154e..44163e0074 100644
--- a/modules/math
+++ b/modules/math
@@ -20,7 +20,7 @@ BUILT_SOURCES += math.h
math.h: math.in.h
rm -f $@-t $@
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
- sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''NEXT_MATH_H''@|$(NEXT_MATH_H)|g' \
-e 's|@''GNULIB_CEILF''@|$(GNULIB_CEILF)|g' \