Make determination of absolute name of header file work with AIX xlc.
authorBruno Haible <bruno@clisp.org>
Tue, 4 Nov 2008 00:52:43 +0000 (01:52 +0100)
committerBruno Haible <bruno@clisp.org>
Tue, 4 Nov 2008 00:52:43 +0000 (01:52 +0100)
ChangeLog
m4/absolute-header.m4
m4/include_next.m4

index 6a42c87..2d86ee5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-11-03  Bruno Haible  <bruno@clisp.org>
+
+       Make determination of absolute name of header file work with AIX xlc.
+       * m4/include_next.m4 (gl_CHECK_NEXT_HEADERS): Require
+       AC_CANONICAL_HOST. On AIX, use "$CPP -C" rather than "$CPP" for
+       preprocessing.
+       * m4/absolute-header.m4 (gl_ABSOLUTE_HEADER): Likewise.
+       Reported by Gary V. Vaughan <gary@thewrittenword.com>.
+
 2008-11-03  Simon Josefsson  <simon@josefsson.org>
 
        * top/maint.mk (COVERAGE_CCOPTS): Use --coverage instead of
index 99f15ec..91a93e4 100644 (file)
@@ -1,4 +1,4 @@
-# absolute-header.m4 serial 9
+# absolute-header.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,
@@ -20,7 +20,8 @@ dnl From Derek Price.
 # preprocessing, i.e. it does not only define preprocessor macros but also
 # provides some type/enum definitions or function/variable declarations.
 AC_DEFUN([gl_ABSOLUTE_HEADER],
-[AC_LANG_PREPROC_REQUIRE()dnl
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PREPROC_REQUIRE()dnl
 m4_foreach_w([gl_HEADER_NAME], [$1],
   [AS_VAR_PUSHDEF([gl_absolute_header],
                   [gl_cv_absolute_]m4_quote(m4_defn([gl_HEADER_NAME])))dnl
@@ -31,10 +32,22 @@ m4_foreach_w([gl_HEADER_NAME], [$1],
     AC_CHECK_HEADERS_ONCE(m4_quote(m4_defn([gl_HEADER_NAME])))dnl
     if test AS_VAR_GET(ac_header_exists) = yes; then
       AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]])])
-dnl eval is necessary to expand ac_cpp.
-dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell.
+      dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+      dnl that contain only a #include of other header files and no
+      dnl non-comment tokens of their own. This leads to a failure to
+      dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+      dnl and others. The workaround is to force preservation of comments
+      dnl through option -C. This ensures all necessary #line directives
+      dnl are present. GCC supports option -C as well.
+      case "$host_os" in
+        aix*) gl_absname_cpp="$ac_cpp -C" ;;
+        *)    gl_absname_cpp="$ac_cpp" ;;
+      esac
+      dnl eval is necessary to expand gl_absname_cpp.
+      dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+      dnl so use subshell.
       AS_VAR_SET(gl_absolute_header,
-[`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
 sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
        s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#
        s#^/[^/]#//&#
index b6e4d3a..c70c413 100644 (file)
@@ -1,4 +1,4 @@
-# include_next.m4 serial 8
+# include_next.m4 serial 9
 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,
@@ -87,6 +87,7 @@ EOF
 AC_DEFUN([gl_CHECK_NEXT_HEADERS],
 [
   AC_REQUIRE([gl_INCLUDE_NEXT])
+  AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CHECK_HEADERS_ONCE([$1])
 
   m4_foreach_w([gl_HEADER_NAME], [$1],
@@ -105,11 +106,22 @@ AC_DEFUN([gl_CHECK_NEXT_HEADERS],
              [AC_LANG_SOURCE(
                 [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
               )])
-           dnl eval is necessary to expand ac_cpp.
+           dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+           dnl that contain only a #include of other header files and no
+           dnl non-comment tokens of their own. This leads to a failure to
+           dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+           dnl and others. The workaround is to force preservation of comments
+           dnl through option -C. This ensures all necessary #line directives
+           dnl are present. GCC supports option -C as well.
+           case "$host_os" in
+             aix*) gl_absname_cpp="$ac_cpp -C" ;;
+             *)    gl_absname_cpp="$ac_cpp" ;;
+           esac
+           dnl eval is necessary to expand gl_absname_cpp.
            dnl Ultrix and Pyramid sh refuse to redirect output of eval,
            dnl so use subshell.
            AS_VAR_SET([gl_next_header],
-             ['"'`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+             ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
               sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
                 s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#
                 s#^/[^/]#//&#