[Top][All Lists]

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

[SCM] GNU Autoconf source repository branch, master, updated. v2.69-166-

From: Eric Blake
Subject: [SCM] GNU Autoconf source repository branch, master, updated. v2.69-166-ge17a30e
Date: Thu, 15 Sep 2016 16:29:25 +0000 (UTC)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Autoconf source repository".;a=commitdiff;h=e17a30e987d7ee695fb4294a82d987ec3dc9b974

The branch, master has been updated
       via  e17a30e987d7ee695fb4294a82d987ec3dc9b974 (commit)
      from  565a6dc50cfa01cec2fb4db894026689cdf4970c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e17a30e987d7ee695fb4294a82d987ec3dc9b974
Author: Eric Blake <address@hidden>
Date:   Wed Sep 14 08:17:06 2016 -0500

    AC_HEADER_MAJOR: port to glibc 2.25
    glibc 2.25 is deprecating the namespace pollution of <sys/types.h>
    injecting major(), minor(), and makedev() into the compilation
    environment, with a warning that insists that users include
    <sys/sysmacros.h> instead.  However, because the expansion of
    AC_HEADER_MAJOR didn't bother checking sys/sysmacros.h until
    after probing whether sys/types.h pollutes the namespace, it was
    not defining MAJOR_IN_SYSMACROS, with the result that code
    compiled with -Werror chokes on the deprecation warnings because
    it was not including sysmacros.h.
    In addition to fixing autoconf (which only benefits projects
    that rebuild configure after this fix is released), we can also
    give a hint to distros on how they can populate with
    a cache variable to force pre-existing configure scripts without
    the updated macro to behave sanely in the presence of glibc 2.25
    (the documentation is especially useful since that cache variable
    is no longer present in autoconf after this patch).
    Note that mingw lacks major/minor/makedev in any of its standard
    headers; for that platform, the behavior of this macro is unchanged
    (code using the recommended include formula will get a compile error
    when trying to use major(), whether before or after this patch); but
    for now, it is assumed that programs actually concerned with
    creating devices are not worried about portability to mingw.  If
    desired, a later patch could tighten AC_HEADER_MAJOR to fail at
    configure time if the macros are unavailable in any of the three
    system headers, but that semantic change is not worth mixing into
    this patch.
    * lib/autoconf/headers.m4 (AC_HEADER_MAJOR): Drop check for
    major within sys/types.h; it interferes with the need to check
    sysmacros.h first.
    * doc/autoconf.texi (Particular Headers) <AC_HEADER_MAJOR>: Expand
    details on usage, and on workarounds for non-updated projects.
    Signed-off-by: Eric Blake <address@hidden>


Summary of changes:
 doc/autoconf.texi       |   35 +++++++++++++++++++++++++++++++----
 lib/autoconf/headers.m4 |   30 ++++++++++++++----------------
 2 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 9ad7dc1..4f041bd 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -5970,10 +5970,37 @@ Also see @code{AC_STRUCT_DIRENT_D_INO} and
-If @file{sys/types.h} does not define @code{major}, @code{minor}, and
address@hidden, but @file{sys/mkdev.h} does, define
address@hidden; otherwise, if @file{sys/sysmacros.h} does, define
+Detect the headers required to use @code{makedev}, @code{major}, and
address@hidden  These functions may be defined by @file{sys/mkdev.h},
address@hidden/sysmacros.h}, or @file{sys/types.h}.
address@hidden defines @code{MAJOR_IN_MKDEV} if they are in
address@hidden/mkdev.h}, or @code{MAJOR_IN_SYSMACROS} if they are in
address@hidden/sysmacros.h}.  If neither macro is defined, they are either in
address@hidden/types.h} or unavailable.
+To properly use these functions, your code should contain something
+#include <sys/types.h>
+# include <sys/mkdev.h>
+#elif defined MAJOR_IN_SYSMACROS
+# include <sys/sysmacros.h>
address@hidden verbatim
+Note: Configure scripts built with Autoconf 2.69 or earlier will not
+detect a problem if @file{sys/types.h} contains definitions of
address@hidden, @code{minor}, and/or @code{makedev} that trigger compiler
+warnings upon use.  This is known to occur with GNU libc 2.25, where
+those definitions are being deprecated to reduce namespace pollution.
+If it is not practical to use Autoconf 2.70 to regenerate the configure
+script of affected software, you can work around the problem by setting
address@hidden, as an argument to
address@hidden or as part of a @file{} site default file
+(@pxref{Site Defaults}).
 @end defmac
diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4
index 0c44973..72262c1 100644
--- a/lib/autoconf/headers.m4
+++ b/lib/autoconf/headers.m4
@@ -427,31 +427,29 @@ fi
 # ---------------
+# Thanks to glibc 2.25 deprecating macros in sys/types.h, coupled with
+# back-compat to autoconf 2.69, we need the following logic:
+# Check whether <sys/types.h> compiles.
+# If <sys/mkdev.h> compiles, assume it provides major/minor/makedev.
+# Otherwise, if <sys/sysmacros.h> compiles, assume it provides the macros.
+# Otherwise, either the macros were provided by <sys/types.h>, or do
+# not exist on the platform.  Code trying to use these three macros is
+# assumed to not care about platforms that lack the macros.
 AN_HEADER([sys/mkdev.h], [AC_HEADER_MAJOR])
-[AC_CACHE_CHECK(whether sys/types.h defines makedev,
-               ac_cv_header_sys_types_h_makedev,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM(address@hidden:@include <sys/types.h>]],
-                                [[return makedev(0, 0);]])],
-               [ac_cv_header_sys_types_h_makedev=yes],
-               [ac_cv_header_sys_types_h_makedev=no])
-if test $ac_cv_header_sys_types_h_makedev = no; then
                [AC_DEFINE(MAJOR_IN_MKDEV, 1,
                           [Define to 1 if `major', `minor', and `makedev' are
                            declared in <mkdev.h>.])])
-  if test $ac_cv_header_sys_mkdev_h = no; then
-    AC_CHECK_HEADER(sys/sysmacros.h,
-                   [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
-                              [Define to 1 if `major', `minor', and `makedev'
-                               are declared in <sysmacros.h>.])])
-  fi
+if test $ac_cv_header_sys_mkdev_h = no; then
+  AC_CHECK_HEADER(sys/sysmacros.h,
+                 [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
+                            [Define to 1 if `major', `minor', and `makedev'
+                             are declared in <sysmacros.h>.])])

GNU Autoconf source repository

reply via email to

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