From: "Daniel P. Berrange" <berrange(a)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(a)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