[libvirt] [PATCH] build: avoid warnings on older gcc

Viktor Mihajlovski mihajlov at linux.vnet.ibm.com
Wed Aug 15 15:24:42 UTC 2012


On 08/15/2012 12:42 AM, Eric Blake wrote:
> The previous patch pulled in a newer version of stat-time.h from
> gnulib, which tries to suppress some stupid gcc warnings (see
> <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>) by exploiting
> a feature of newer gcc.  But we still aim to compile on RHEL 6.3,
> with gcc 4.4.6 (not to mention even older devel platforms like
> RHEL 5), which fails to build thanks to our development -Werror.
>
> It took me a while to figure out how to make our set of warnings
> smaller on older gcc without losing the benefit of the warnings
> when using newer gcc (such as the one on Fedora 17), but this
> should do the trick.
>
> * m4/virt-compile-warnings.m4 (LIBVIRT_COMPILE_WARNINGS): Avoid
> warnings that gnulib can't silence on older gcc.
> ---
>
> If I don't get a review by tomorrow, I will go ahead and push this
> under the build-breaker rule.
>
>   m4/virt-compile-warnings.m4 | 23 +++++++++++++++++++++++
>   1 file changed, 23 insertions(+)
>
> diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
> index 9dee000..702506d 100644
> --- a/m4/virt-compile-warnings.m4
> +++ b/m4/virt-compile-warnings.m4
> @@ -58,6 +58,23 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
>       # Gnulib's stat-time.h violates this
>       dontwarn="$dontwarn -Waggregate-return"
>
> +    # Gnulib uses '#pragma GCC diagnostic push' to silence some
> +    # warnings, but older gcc doesn't support this.
> +    AC_CACHE_VAL([lv_cv_gcc_pragma_push_works], [
> +      save_CFLAGS=$CFLAGS
> +      CFLAGS=-Wunknown-pragmas
> +      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> +        #pragma GCC diagnostic push
> +        #pragma GCC diagnostic pop
> +      ]])],
> +      [lv_cv_gcc_pragma_push_works=yes],
> +      [lv_cv_gcc_pragma_push_works=no])
> +      CFLAGS=$save_CFLAGS])
> +    if test $lv_cv_gcc_pragma_push_works = no; then
> +      dontwarn="$dontwarn -Wmissing-prototypes"
> +      dontwarn="$dontwarn -Wmissing-declarations"
> +    fi
> +
>       # We might fundamentally need some of these disabled forever, but
>       # ideally we'd turn many of them on
>       dontwarn="$dontwarn -Wfloat-equal"
>

Hi Eric,

I assume this was intended to suppress errors like this here:

   CC     libvirt_driver_storage_la-storage_backend.lo
cc1: warnings being treated as errors
In file included from ../../src/storage/storage_backend.c:59:
../../gnulib/lib/stat-time.h:55: error: no previous prototype for 
'get_stat_atime_ns' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:68: error: no previous prototype for 
'get_stat_ctime_ns' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:81: error: no previous prototype for 
'get_stat_mtime_ns' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:94: error: no previous prototype for 
'get_stat_birthtime_ns' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:109: error: no previous prototype for 
'get_stat_atime' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:123: error: no previous prototype for 
'get_stat_ctime' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:137: error: no previous prototype for 
'get_stat_mtime' [-Wmissing-prototypes]
../../gnulib/lib/stat-time.h:152: error: no previous prototype for 
'get_stat_birthtime' [-Wmissing-prototypes]

unfortunately, even applying the patch above and rerunning bootstrap, 
configure, make didn't help and I'm still getting the errors ... the 
interesting thing is that pragma push seems to work...
I am compiling on RHEL6.2, gcc 4.4.6

grep pragma_push config.log
lv_cv_gcc_pragma_push_works=yes


-- 

Mit freundlichen Grüßen/Kind Regards
    Viktor Mihajlovski

IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294




More information about the libvir-list mailing list