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

Eric Blake eblake at redhat.com
Mon May 13 19:28:54 UTC 2013


[adding bug-gnulib]

On 05/13/2013 06:17 AM, Daniel P. Berrange wrote:
> 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(+)

Some of this needs to be imported into upstream gnulib.

> 
> 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"
>  ])
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130513/63c22f58/attachment-0001.sig>


More information about the libvir-list mailing list