From 7dd57f2f2c8fde93fa42b4dbf6d9860717723b41 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Tue, 26 Sep 2023 13:14:37 +0300 Subject: [PATCH] Build: Silence Autoconf warning. There was a use of AC_COMPILE_IFELSE that didn't use AC_LANG_SOURCE and Autoconf warned about this. The omission had been intentional but it turned out that this didn't do what I thought it would. Autoconf 2.71 manual gives an impression that AC_LANG_SOURCE inserts all #defines that have been made with AC_DEFINE so far (confdefs.h). The idea was that omitting AC_LANG_SOURCE would mean that only the exact code included in the AC_COMPILE_IFELSE call would be compiled. With C programs this is not true: the #defines get added without AC_LANG_SOURCE too. There seems to be no neat way to avoid this. Thus, with the C language at least, adding AC_LANG_SOURCE makes no other difference than silencing a warning from Autoconf. The generated "configure" remains identical. (Docs of AC_LANG_CONFTEST say that the #defines have been inserted since Autoconf 2.63b and that AC_COMPILE_IFELSE uses AC_LANG_CONFTEST. So the behavior is documented if one also reads the docs of macros that one isn't calling directly.) Any extra code, including #defines, can cause problems for these two tests because these tests must use -Werror. CC=clang CFLAGS=-Weverything is the most extreme example. It enables -Wreserved-macro-identifier which warns about It's possible to write a test file that passes -Weverything but it becomes impossible when Autoconf inserts confdefs.h. So this commit adds AC_LANG_SOURCE to silence Autoconf warnings. A different solution is needed for -Werror tests. --- configure.ac | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 45c74776..9eb17ac2 100644 --- a/configure.ac +++ b/configure.ac @@ -834,15 +834,14 @@ AC_C_BIGENDIAN # Use -Werror because some compilers accept unknown attributes and just # give a warning. If it works this should give no warnings, even # clang -Weverything should be fine. -# dnl This doesn't need AC_LANG_SOURCE, minimal code is enough. AC_MSG_CHECKING([if __attribute__((__constructor__)) can be used]) have_func_attribute_constructor=no OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" -AC_COMPILE_IFELSE([ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ __attribute__((__constructor__)) static void my_constructor_func(void) { return; } -], [ +]])], [ AC_DEFINE([HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR], [1], [Define to 1 if __attribute__((__constructor__)) is supported for functions.])