]> Savannah Git Hosting - gnulib.git/commitdiff
snippet/warn-on-use: Don't cause wrong AC_CHECK_DECL results with clang.
authorBruno Haible <bruno@clisp.org>
Tue, 20 Sep 2022 21:31:19 +0000 (23:31 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 20 Sep 2022 21:57:48 +0000 (23:57 +0200)
* m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Use the clang command-line
option that disables implicit built-in function declarations in clang.

ChangeLog
m4/warn-on-use.m4

index 4a9f361aa3e8985bca09b561ca50a6cc18825aca..5f32077c97bc29f55cab794424897db4e5a9a0ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2022-09-20  Bruno Haible  <bruno@clisp.org>
+
+       snippet/warn-on-use: Don't cause wrong AC_CHECK_DECL results with clang.
+       * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Use the clang command-line
+       option that disables implicit built-in function declarations in clang.
+
 2022-09-19  Bruno Haible  <bruno@clisp.org>
 
        stdbool tests: Fix compilation error with clang/MSVC.
index d43355ab174fca7bbff6078bb3c98f85447143c3..a81731f31c879b1e5dcb4518103692bc1fb5e5b2 100644 (file)
@@ -1,4 +1,4 @@
-# warn-on-use.m4 serial 9
+# warn-on-use.m4 serial 10
 dnl Copyright (C) 2010-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -32,17 +32,30 @@ AC_DEFUN([gl_WARN_ON_USE_PREPARE],
           undefining macros.])])dnl
      for gl_func in m4_flatten([$2]); do
        AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+       dnl As a workaround to implicit built-in function declarations in
+       dnl clang (e.g. strndup), reference ac_compile_for_check_decl instead
+       dnl of ac_compile.  If, for whatever reason, the override of AC_PROG_CC
+       dnl in zzgnulib.m4 is inactive, use the original ac_compile.
+       ac_save_ac_compile="$ac_compile"
+       if test -n "$ac_compile_for_check_decl"; then
+         ac_compile="$ac_compile_for_check_decl"
+       fi
        AC_CACHE_CHECK([whether $gl_func is declared without a macro],
          [gl_Symbol],
          [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
 [[#undef $gl_func
   (void) $gl_func;]])],
            [AS_VAR_SET([gl_Symbol], [yes])], [AS_VAR_SET([gl_Symbol], [no])])])
+       ac_compile="$ac_save_ac_compile"
        AS_VAR_IF([gl_Symbol], [yes],
          [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
-          dnl shortcut - if the raw declaration exists, then set a cache
-          dnl variable to allow skipping any later AC_CHECK_DECL efforts
-          eval ac_cv_have_decl_$gl_func=yes])
+          dnl Shortcut for an AC_CHECK_DECL invocation that may come later:
+          dnl If the raw declaration exists with the given includes, then
+          dnl AC_CHECK_DECL with its many includes would see it as well.
+          dnl So, set a cache variable to allow skipping any later
+          dnl AC_CHECK_DECL invocation for $gl_func.
+          eval "ac_cv_have_decl_$gl_func=yes"
+         ])
        AS_VAR_POPDEF([gl_Symbol])dnl
      done
     ])