From: Daniel P. Berrange Date: Mon, 13 May 2013 11:45:54 +0000 (+0100) Subject: Correctly detect warning flags with clang X-Git-Tag: CVE-2013-1962~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1634100447b4afc936bb19f2e21e6d68b7c4e3a;p=thirdparty%2Flibvirt.git Correctly detect warning flags with clang 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 --- diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4 index fbeb3eb5e1..59091a6a52 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], @@ -179,12 +191,19 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[ dnl -fstack-protector stuff passes gl_WARN_ADD with gcc dnl on Mingw32, but fails when actually used case $host in - *-*-linux*) + *-*-linux*|*-*-freebsd*) dnl Fedora only uses -fstack-protector, but doesn't seem to dnl be great overhead in adding -fstack-protector-all instead 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" ])