Make determination of absolute name of header file work with AIX xlc.
[gnulib.git] / m4 / absolute-header.m4
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#^/[^/]#//&#