2007-03-01 19:18:55 +03:00
dnl
2010-07-16 19:04:05 +04:00
dnl Enable all known GCC compiler warnings, except for those
dnl we can't yet cope with
2007-03-01 19:18:55 +03:00
dnl
AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
dnl ******************************
dnl More compiler warnings
dnl ******************************
AC_ARG_ENABLE(compile-warnings,
2010-07-16 19:04:05 +04:00
[AC_HELP_STRING([--enable-compile-warnings=@<:@no/yes/error@:>@],
2010-03-30 20:09:21 +04:00
[Turn on compiler warnings])],,
2010-07-16 19:04:05 +04:00
[enable_compile_warnings="m4_default([$1],[yes])"])
2007-03-01 19:18:55 +03:00
case "$enable_compile_warnings" in
no)
2007-09-22 00:01:43 +04:00
try_compiler_flags=""
2011-04-05 23:06:31 +04:00
;;
2010-07-16 19:04:05 +04:00
yes|minimum|maximum|error)
# List of warnings that are not relevant / wanted
# Don't care about C++ compiler compat
dontwarn="$dontwarn -Wc++-compat"
# Don't care about ancient C standard compat
dontwarn="$dontwarn -Wtraditional"
# Don't care about ancient C standard compat
dontwarn="$dontwarn -Wtraditional-conversion"
# Ignore warnings in /usr/include
dontwarn="$dontwarn -Wsystem-headers"
# Happy for compiler to add struct padding
dontwarn="$dontwarn -Wpadded"
# GCC very confused with -O2
dontwarn="$dontwarn -Wunreachable-code"
# Too many to deal with
dontwarn="$dontwarn -Wconversion"
# Too many to deal with
dontwarn="$dontwarn -Wsign-conversion"
# GNULIB gettext.h violates
dontwarn="$dontwarn -Wvla"
# Many GNULIB header violations
dontwarn="$dontwarn -Wundef"
# Need to allow bad cast for execve()
dontwarn="$dontwarn -Wcast-qual"
# We need to use long long in many places
dontwarn="$dontwarn -Wlong-long"
# We allow manual list of all enum cases without default:
dontwarn="$dontwarn -Wswitch-default"
# We allow optional default: instead of listing all enum values
dontwarn="$dontwarn -Wswitch-enum"
# Not a problem since we don't use -fstrict-overflow
dontwarn="$dontwarn -Wstrict-overflow"
# Not a problem since we don't use -funsafe-loop-optimizations
dontwarn="$dontwarn -Wunsafe-loop-optimizations"
# Things like virAsprintf mean we can't use this
dontwarn="$dontwarn -Wformat-nonliteral"
# We might fundamentally need some of these disabled forever, but ideally
# we'd turn many of them on
dontwarn="$dontwarn -Wfloat-equal"
dontwarn="$dontwarn -Wdeclaration-after-statement"
dontwarn="$dontwarn -Wcast-qual"
dontwarn="$dontwarn -Wconversion"
dontwarn="$dontwarn -Wsign-conversion"
dontwarn="$dontwarn -Wpacked"
dontwarn="$dontwarn -Wunused-macros"
dontwarn="$dontwarn -Woverlength-strings"
dontwarn="$dontwarn -Wstack-protector"
# Get all possible GCC warnings
gl_MANYWARN_ALL_GCC([maybewarn])
# Remove the ones we don't want, blacklisted earlier
gl_MANYWARN_COMPLEMENT([wantwarn], [$maybewarn], [$dontwarn])
# Check for $CC support of each warning
for w in $wantwarn; do
gl_WARN_ADD([$w])
done
# GNULIB uses '-W' (aka -Wextra) which includes a bunch of stuff.
# Unfortunately, this means you can't simply use '-Wsign-compare'
# with gl_MANYWARN_COMPLEMENT
# So we have -W enabled, and then have to explicitly turn off...
gl_WARN_ADD([-Wno-sign-compare])
# GNULIB expects this to be part of -Wc++-compat, but we turn
# that one off, so we need to manually enable this again
gl_WARN_ADD([-Wjump-misses-init])
# This should be < 256 really, but with PATH_MAX everywhere
# we have doom, even with 4096. In fact we have some functions
# with several PATH_MAX sized variables :-( We should kill off
# all PATH_MAX usage and then lower this limit
gl_WARN_ADD([-Wframe-larger-than=65700])
dnl gl_WARN_ADD([-Wframe-larger-than=4096])
dnl gl_WARN_ADD([-Wframe-larger-than=256])
# Extra special flags
gl_WARN_ADD([-Wp,-D_FORTIFY_SOURCE=2])
2011-04-05 19:00:58 +04:00
dnl -fstack-protector stuff passes gl_WARN_ADD with gcc
dnl on Mingw32, but fails when actually used
case $host in
*-*-linux*)
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])
;;
esac
2010-07-16 19:04:05 +04:00
gl_WARN_ADD([-fexceptions])
gl_WARN_ADD([-fasynchronous-unwind-tables])
gl_WARN_ADD([-fdiagnostics-show-option])
2011-04-07 01:05:45 +04:00
gl_WARN_ADD([-funit-at-a-time])
2010-07-16 19:04:05 +04:00
if test "$enable_compile_warnings" = "error"
then
gl_WARN_ADD([-Werror])
fi
2011-04-05 23:06:31 +04:00
;;
2007-03-01 19:18:55 +03:00
*)
2011-04-05 23:06:31 +04:00
AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
;;
2007-03-01 19:18:55 +03:00
esac
2007-03-21 17:52:12 +03:00
2010-05-15 02:45:52 +04:00
WARN_LDFLAGS=$WARN_CFLAGS
AC_SUBST([WARN_CFLAGS])
AC_SUBST([WARN_LDFLAGS])
2008-12-18 15:20:00 +03:00
dnl Needed to keep compile quiet on python 2.4
2010-07-16 19:04:05 +04:00
save_WARN_CFLAGS=$WARN_CFLAGS
WARN_CFLAGS=
gl_WARN_ADD([-Wno-redundant-decls])
WARN_PYTHON_CFLAGS=$WARN_CFLAGS
2008-12-18 15:20:00 +03:00
AC_SUBST(WARN_PYTHON_CFLAGS)
2010-07-16 19:04:05 +04:00
WARN_CFLAGS=$save_WARN_CFLAGS
2007-03-01 19:18:55 +03:00
])