diff options
author | Bruno Haible <bruno@clisp.org> | 2008-11-20 23:33:58 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2008-11-20 23:39:43 +0100 |
commit | 52f349189c93527b757000d5ebb217b68617957c (patch) | |
tree | 67c207e12f08bff0c2dfa6c3f4ffffe1b6a525f2 | |
parent | f42ef8e521922f40030af8b005114a44b1a15211 (diff) | |
download | gnulib-52f349189c93527b757000d5ebb217b68617957c.tar.gz |
Attempt to work around another AIX 5.3, 6.1 compiler bug with include_next.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | lib/math.in.h | 2 | ||||
-rw-r--r-- | m4/include_next.m4 | 52 | ||||
-rw-r--r-- | modules/math | 2 |
4 files changed, 53 insertions, 13 deletions
@@ -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' \ |