diff --git a/configure.ac b/configure.ac index 20caa92d04aceedb0d284ea776fdb83f05c3b2d1..3c97e4fed0daf0a303a9b57dd1af38b0cf71ebe1 100644 --- a/configure.ac +++ b/configure.ac @@ -255,29 +255,6 @@ AC_CHECK_TYPE([struct ifreq], #include ]]) -dnl Check whether strchr(s, char variable) causes a bogus compile warning -dnl which is the case with a certain range of GCC versions -AC_MSG_CHECKING([whether GCC -Wlogical-op is broken]) - -save_CFLAGS="$CFLAGS" -CFLAGS="-O2 -Wlogical-op -Werror" - -AC_TRY_COMPILE([#include ], - [const char *haystack; - char needle; - return strchr(haystack, needle) == haystack;], - [gcc_false_strchr_warning=no], - [gcc_false_strchr_warning=yes]) - -CFLAGS="$save_CFLAGS" - -if test "x$gcc_false_strchr_warning" = xyes; then - AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP], 1, - [GCC -Wlogical-op is reporting false positive on strchr]) -fi - -AC_MSG_RESULT([$gcc_false_strchr_warning]) - dnl Our only use of libtasn1.h is in the testsuite, and can be skipped dnl if the header is not present. Assume -ltasn1 is present if the dnl header could be found. diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4 index 4a0f28929804d22d48067a98b1d13ef7d101b495..a08fcac9f767b8e885019196cf050b6aff435cb1 100644 --- a/m4/virt-compile-warnings.m4 +++ b/m4/virt-compile-warnings.m4 @@ -95,6 +95,22 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[ dontwarn="$dontwarn -Wmissing-declarations" fi + dnl Check whether strchr(s, char variable) causes a bogus compile + dnl warning, which is the case with GCC < 4.6 on some glibc + AC_CACHE_CHECK([whether GCC -Wlogical-op gives bogus warnings], + [lv_cv_gcc_wlogical_op_broken], [ + save_CFLAGS="$CFLAGS" + CFLAGS="-O2 -Wlogical-op -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + const char *haystack; + char needle; + return strchr(haystack, needle) == haystack;]])], + [lv_cv_gcc_wlogical_op_broken=no], + [lv_cv_gcc_wlogical_op_broken=yes]) + CFLAGS="$save_CFLAGS"]) + # We might fundamentally need some of these disabled forever, but # ideally we'd turn many of them on dontwarn="$dontwarn -Wfloat-equal" @@ -196,4 +212,10 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[ WARN_PYTHON_CFLAGS=$WARN_CFLAGS AC_SUBST(WARN_PYTHON_CFLAGS) WARN_CFLAGS=$save_WARN_CFLAGS + + if test "$gl_cv_warn_c__Wlogical_op" = yes && + test "$lv_cv_gcc_wlogical_op_broken" = yes; then + AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP], 1, + [Define to 1 if gcc -Wlogical-op reports false positives on strchr]) + fi ])