Requiring autoconf's AC_FUNC_STRERROR_R and then calling AC_DEFINE ourselves leads to two insertions of #define STRERROR_R_CHAR_P in confdefs.h, but with different values (at least on glibc). This in turn sparks a gcc warning about redeclaring the macro, and kills any subsequent tests that use -Werror (which now error because of the conflicting define, whether or not the test used to error).
A better approach is to replace the autoconf macro with a version of our own that doesn't probe anything, so that the AC_DEFINE is reached exactly once. * m4/strerror_r.m4 (AC_FUNC_STRERROR_R): New override. (gl_FUNC_STRERROR_R): Don't reuse AC_DEFINE() with a potentially different value. Signed-off-by: Eric Blake <ebl...@redhat.com> --- ChangeLog | 7 +++++++ m4/strerror_r.m4 | 13 ++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5d7987..4837fe2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-11-04 Eric Blake <ebl...@redhat.com> + + strerror_r-posix: Fix override of AC_FUNC_STRERROR_R + * m4/strerror_r.m4 (AC_FUNC_STRERROR_R): New override. + (gl_FUNC_STRERROR_R): Don't reuse AC_DEFINE() with a potentially + different value. + 2016-11-03 Eric Blake <ebl...@redhat.com> bootstrap: Fix get_version() for AIX 5.3 diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4 index 06c51e1..c566f38 100644 --- a/m4/strerror_r.m4 +++ b/m4/strerror_r.m4 @@ -1,4 +1,4 @@ -# strerror_r.m4 serial 16 +# strerror_r.m4 serial 17 dnl Copyright (C) 2002, 2007-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -41,8 +41,15 @@ AC_DEFUN([gl_FUNC_STRERROR_R], # Overwrite the findings of AC_FUNC_STRERROR_R (for code that uses that). AC_REQUIRE([AC_FUNC_STRERROR_R]) - AC_DEFINE([HAVE_DECL_STRERROR_R], [1]) - AC_DEFINE([STRERROR_R_CHAR_P], [0]) +]) + +# If this module is in use, we unconditionally want POSIX semantics; so +# replace autoconf's macro with a version that does not probe +AC_DEFUN([AC_FUNC_STRERROR_R], [ + AC_DEFINE([HAVE_DECL_STRERROR_R], [1], + [Define to 1, since you should have the declaration of strerror_r.]) + AC_DEFINE([STRERROR_R_CHAR_P], [0], + [Define to 0, since strerror_r should not return char *.]) ]) # Prerequisites of lib/strerror_r.c. -- 2.7.4