[libvirt] [PATCH 4/6] Correctly detect warning flags with clang

Daniel P. Berrange berrange at redhat.com
Mon May 13 12:17:25 UTC 2013


From: "Daniel P. Berrange" <berrange at redhat.com>

Clang will happily claim to support any warning flags
unless the -Werror and -Wunknown-warning-option flags
are set. Thus we need to make sure these are set when
testing for clags.

We must also set the clang specific warning flags
-Wno-unused-command-line-argument to avoid a warning
from the ssp-buffer-size flag when linking .o files.

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 m4/virt-compile-warnings.m4 | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
index fbeb3eb..5803d48 100644
--- a/m4/virt-compile-warnings.m4
+++ b/m4/virt-compile-warnings.m4
@@ -60,6 +60,18 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     # gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -Wall
     dontwarn="$dontwarn -Wenum-compare"
 
+    # clang rather horribly ignores unknown warning flags by
+    # default. Thus to get gl_WARN_ADD to reliably detect
+    # flags, we need to set '-Werror -Wunknown-warning-option'
+    # in CFLAGS while probing support
+    WARN_CFLAGS=
+    orig_CFLAGS="$CFLAGS"
+    gl_WARN_ADD([-Wunknown-warning-option])
+    if test -n "$WARN_CFLAGS" ; then
+        WARN_CFLAGS=
+        CFLAGS="-Werror -Wunknown-warning-option $CFLAGS"
+    fi
+
     # gcc 4.2 treats attribute(format) as an implicit attribute(nonnull),
     # which triggers spurious warnings for our usage
     AC_CACHE_CHECK([whether gcc -Wformat allows NULL strings],
@@ -185,6 +197,13 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
        dnl gl_WARN_ADD([-fstack-protector])
        gl_WARN_ADD([-fstack-protector-all])
        gl_WARN_ADD([--param=ssp-buffer-size=4])
+       dnl Even though it supports it, clang complains about
+       dnl use of --param=ssp-buffer-size=4 unless used with
+       dnl the -c arg. It doesn't like it when used with args
+       dnl that just link together .o files. Unfortunately
+       dnl we can't avoid that with automake, so we must turn
+       dnl off the following clang specific warning
+       gl_WARN_ADD([-Wno-unused-command-line-argument])
        ;;
     esac
     gl_WARN_ADD([-fexceptions])
@@ -222,4 +241,7 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
       AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP], 1,
        [Define to 1 if gcc -Wlogical-op reports false positives on strchr])
     fi
+
+    # Remove stuff we set for clang
+    CFLAGS="$orig_CFLAGS"
 ])
-- 
1.8.2.1




More information about the libvir-list mailing list