bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] include_next: do not check for standard headers like stddef.


From: Bruno Haible
Subject: Re: [PATCH] include_next: do not check for standard headers like stddef.h
Date: Thu, 20 Jan 2011 11:27:42 +0100
User-agent: KMail/1.9.9

Hi Paul,

> * m4/include_next.m4 (gl_NEXT_HEADERS): New macro, which does not
> use AC_CHECK_HEADERS_ONCE, but which otherwise contains what
> gl_CHECK_NEXT_HEADERS used to contain.  This makes 'configure' run
> faster for headers like stddef.h that are known to exist.

While doing this, you overlooked that the expansion of gl_CHECK_NEXT_HEADERS
tests the ac_cv_header_... variable. So, for example, for <locale.h>, it now
tests $ac_cv_header_locale_h, but this shell variable is never set.

As a consequence, when I take a testdir of  locale fcntl-h signal stdlib
and compile it on Solaris 8 with Sun cc, I previously got these definitions:

$ grep NEXT_ config.status
S["NEXT_AS_FIRST_DIRECTIVE_WCHAR_H"]="\"///usr/include/wchar.h\""
S["NEXT_WCHAR_H"]="\"///usr/include/wchar.h\""
S["NEXT_AS_FIRST_DIRECTIVE_UNISTD_H"]="\"///usr/include/unistd.h\""
S["NEXT_UNISTD_H"]="\"///usr/include/unistd.h\""
S["NEXT_AS_FIRST_DIRECTIVE_STDLIB_H"]="\"///usr/include/stdlib.h\""
S["NEXT_STDLIB_H"]="\"///usr/include/stdlib.h\""
S["NEXT_AS_FIRST_DIRECTIVE_STDINT_H"]="<stdint.h>"
S["NEXT_STDINT_H"]="<stdint.h>"
S["NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H"]="\"///usr/include/signal.h\""
S["NEXT_SIGNAL_H"]="\"///usr/include/signal.h\""
S["NEXT_AS_FIRST_DIRECTIVE_LOCALE_H"]="\"///usr/include/locale.h\""
S["NEXT_LOCALE_H"]="\"///usr/include/locale.h\""
S["NEXT_AS_FIRST_DIRECTIVE_STDDEF_H"]=""
S["NEXT_STDDEF_H"]=""
S["NEXT_AS_FIRST_DIRECTIVE_FCNTL_H"]="\"///usr/include/fcntl.h\""
S["NEXT_FCNTL_H"]="\"///usr/include/fcntl.h\""
S["INCLUDE_NEXT_AS_FIRST_DIRECTIVE"]="include"

and now I get

$ grep NEXT_ config.status
S["NEXT_AS_FIRST_DIRECTIVE_WCHAR_H"]="\"///usr/include/wchar.h\""
S["NEXT_WCHAR_H"]="\"///usr/include/wchar.h\""
S["NEXT_AS_FIRST_DIRECTIVE_UNISTD_H"]="\"///usr/include/unistd.h\""
S["NEXT_UNISTD_H"]="\"///usr/include/unistd.h\""
S["NEXT_AS_FIRST_DIRECTIVE_STDLIB_H"]="\"///usr/include/stdlib.h\""
S["NEXT_STDLIB_H"]="\"///usr/include/stdlib.h\""
S["NEXT_AS_FIRST_DIRECTIVE_STDINT_H"]="<stdint.h>"
S["NEXT_STDINT_H"]="<stdint.h>"
S["NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H"]="<signal.h>"
S["NEXT_SIGNAL_H"]="<signal.h>"
S["NEXT_AS_FIRST_DIRECTIVE_LOCALE_H"]="<locale.h>"
S["NEXT_LOCALE_H"]="<locale.h>"
S["NEXT_AS_FIRST_DIRECTIVE_STDDEF_H"]=""
S["NEXT_STDDEF_H"]=""
S["NEXT_AS_FIRST_DIRECTIVE_FCNTL_H"]="<fcntl.h>"
S["NEXT_FCNTL_H"]="<fcntl.h>"
S["INCLUDE_NEXT_AS_FIRST_DIRECTIVE"]="include"

I'm committing this fix, which restores the previous behaviour, by eliminating
the test of the ac_cv_header_... variable.


2011-01-20  Bruno Haible  <address@hidden>

        include_next: Fix bug introduced on 2011-01-18.
        * m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): New macro, extracted
        from gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. Omit test of
        ac_cv_header_... variable if the second argument is not 'check'.
        (gl_CHECK_NEXT_HEADERS, gl_NEXT_HEADERS): Invoke
        gl_NEXT_HEADERS_INTERNAL.

*** m4/include_next.m4.orig     Thu Jan 20 11:18:25 2011
--- m4/include_next.m4  Thu Jan 20 11:15:10 2011
***************
*** 149,156 ****
  # provides some type/enum definitions or function/variable declarations.
  AC_DEFUN([gl_CHECK_NEXT_HEADERS],
  [
!   AC_CHECK_HEADERS_ONCE([$1])
!   gl_NEXT_HEADERS([$1])
  ])
  
  # gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
--- 149,155 ----
  # provides some type/enum definitions or function/variable declarations.
  AC_DEFUN([gl_CHECK_NEXT_HEADERS],
  [
!   gl_NEXT_HEADERS_INTERNAL([$1], [check])
  ])
  
  # gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
***************
*** 160,168 ****
--- 159,177 ----
  # and therefore can be assumed to exist.
  AC_DEFUN([gl_NEXT_HEADERS],
  [
+   gl_NEXT_HEADERS_INTERNAL([$1], [assume])
+ ])
+ 
+ # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
+ AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
+ [
    AC_REQUIRE([gl_INCLUDE_NEXT])
    AC_REQUIRE([AC_CANONICAL_HOST])
  
+   m4_if([$2], [check],
+     [AC_CHECK_HEADERS_ONCE([$1])
+     ])
+ 
    m4_foreach_w([gl_HEADER_NAME], [$1],
      [AS_VAR_PUSHDEF([gl_next_header],
                      [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
***************
*** 172,210 ****
         AC_CACHE_CHECK(
           [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
           m4_defn([gl_next_header]),
!          [AS_VAR_PUSHDEF([gl_header_exists],
!                          [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
!           if test AS_VAR_GET(gl_header_exists) = yes; then
!             AC_LANG_CONFTEST(
!               [AC_LANG_SOURCE(
!                  [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
!                )])
!             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 "$gl_absname_cpp conftest.$ac_ext") 
2>&AS_MESSAGE_LOG_FD |
!                sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
!                  s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
!                  s#^/[^/]#//&#
!                  p
!                  q
!                }'`'"'])
!           else
!             AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
!           fi
!           AS_VAR_POPDEF([gl_header_exists])])
       fi
       AC_SUBST(
         AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
--- 181,224 ----
         AC_CACHE_CHECK(
           [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
           m4_defn([gl_next_header]),
!          [m4_if([$2], [check],
!             [AS_VAR_PUSHDEF([gl_header_exists],
!                             [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
!              if test AS_VAR_GET(gl_header_exists) = yes; then
!              AS_VAR_POPDEF([gl_header_exists])
!             ])
!                AC_LANG_CONFTEST(
!                  [AC_LANG_SOURCE(
!                     [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
!                   )])
!                dnl AIX "xlc -E" and "cc -E" omit #line directives for header
!                dnl files that contain only a #include of other header files 
and
!                dnl no non-comment tokens of their own. This leads to a failure
!                dnl to detect the absolute name of <dirent.h>, <signal.h>,
!                dnl <poll.h> and others. The workaround is to force 
preservation
!                dnl of comments through option -C. This ensures all necessary
!                dnl #line directives 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 "$gl_absname_cpp conftest.$ac_ext") 
2>&AS_MESSAGE_LOG_FD |
!                   sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
!                     s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
!                     s#^/[^/]#//&#
!                     p
!                     q
!                   }'`'"'])
!           m4_if([$2], [check],
!             [else
!                AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
!              fi
!             ])
!          ])
       fi
       AC_SUBST(
         AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),



reply via email to

[Prev in Thread] Current Thread [Next in Thread]