Commit 3d2ecf74 authored by Daniel P. Berrange's avatar Daniel P. Berrange

build: turn on all practical compiler warning flags

Reviewed-by: Pavel Hrdina's avatarPavel Hrdina <phrdina@redhat.com>
Signed-off-by: 's avatarDaniel P. Berrange <berrange@redhat.com>
parent 3c9de861
......@@ -20,6 +20,7 @@ vgcore.*
/configure
/libvirt-dbus-*.tar.gz
/libvirt-dbus.spec
/m4/aclocal\.m4
/stamp-h1
/data/session/org.libvirt.service
......
SUBDIRS = data src test
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = \
$(PACKAGE).spec \
$(PACKAGE).spec.in \
......
......@@ -3,6 +3,7 @@ AC_INIT([libvirt-dbus], [0.0.1], [libvir-list@redhat.com], [], [http://libvirt.o
AC_CONFIG_SRCDIR(src/main.c)
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
dnl Make automake keep quiet about wildcards & other GNUmake-isms
AM_INIT_AUTOMAKE([foreign -Wno-portability])
AC_CANONICAL_HOST
......@@ -35,6 +36,8 @@ AM_PROG_CC_C_O
PKG_CHECK_MODULES(LIBVIRT, libvirt >= $LIBVIRT_REQUIRED)
PKG_CHECK_MODULES(SYSTEMD, libsystemd >= $SYSTEMD_REQUIRED)
LIBVIRT_COMPILE_WARNINGS
AC_ARG_WITH(dbus-services,
[AC_HELP_STRING([--with-dbus-services=<dir>],
[where D-BUS session services directory is])])
......
# manywarnings.m4 serial 8
dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Simon Josefsson
# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
# --------------------------------------------------
# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
# Elements separated by whitespace. In set logic terms, the function
# does OUTVAR = LISTVAR \ REMOVEVAR.
AC_DEFUN([gl_MANYWARN_COMPLEMENT],
[
gl_warn_set=
set x $2; shift
for gl_warn_item
do
case " $3 " in
*" $gl_warn_item "*)
;;
*)
gl_warn_set="$gl_warn_set $gl_warn_item"
;;
esac
done
$1=$gl_warn_set
])
# gl_MANYWARN_ALL_GCC(VARIABLE)
# -----------------------------
# Add all documented GCC warning parameters to variable VARIABLE.
# Note that you need to test them using gl_WARN_ADD if you want to
# make sure your gcc understands it.
AC_DEFUN([gl_MANYWARN_ALL_GCC],
[
dnl First, check for some issues that only occur when combining multiple
dnl gcc warning categories.
AC_REQUIRE([AC_PROG_CC])
if test -n "$GCC"; then
dnl Check if -W -Werror -Wno-missing-field-initializers is supported
dnl with the current $CC $CFLAGS $CPPFLAGS.
AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported])
AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [
gl_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[]], [[]])],
[gl_cv_cc_nomfi_supported=yes],
[gl_cv_cc_nomfi_supported=no])
CFLAGS="$gl_save_CFLAGS"])
AC_MSG_RESULT([$gl_cv_cc_nomfi_supported])
if test "$gl_cv_cc_nomfi_supported" = yes; then
dnl Now check whether -Wno-missing-field-initializers is needed
dnl for the { 0, } construct.
AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed])
AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [
gl_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -W -Werror"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[int f (void)
{
typedef struct { int a; int b; } s_t;
s_t s1 = { 0, };
return s1.b;
}
]],
[[]])],
[gl_cv_cc_nomfi_needed=no],
[gl_cv_cc_nomfi_needed=yes])
CFLAGS="$gl_save_CFLAGS"
])
AC_MSG_RESULT([$gl_cv_cc_nomfi_needed])
fi
dnl Next, check if -Werror -Wuninitialized is useful with the
dnl user's choice of $CFLAGS; some versions of gcc warn that it
dnl has no effect if -O is not also used
AC_MSG_CHECKING([whether -Wuninitialized is supported])
AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [
gl_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wuninitialized"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[]], [[]])],
[gl_cv_cc_uninitialized_supported=yes],
[gl_cv_cc_uninitialized_supported=no])
CFLAGS="$gl_save_CFLAGS"])
AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported])
fi
# List all gcc warning categories.
# To compare this list to your installed GCC's, run this Bash command:
#
# comm -3 \
# <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \
# <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort |
# grep -v -x -f <(
# awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec))
gl_manywarn_set=
for gl_manywarn_item in \
-fno-common \
-W \
-Wabi \
-Waddress \
-Waggressive-loop-optimizations \
-Wall \
-Wattributes \
-Wbad-function-cast \
-Wbool-compare \
-Wbuiltin-macro-redefined \
-Wcast-align \
-Wchar-subscripts \
-Wchkp \
-Wclobbered \
-Wcomment \
-Wcomments \
-Wcoverage-mismatch \
-Wcpp \
-Wdate-time \
-Wdeprecated \
-Wdeprecated-declarations \
-Wdesignated-init \
-Wdisabled-optimization \
-Wdiscarded-array-qualifiers \
-Wdiscarded-qualifiers \
-Wdiv-by-zero \
-Wdouble-promotion \
-Wduplicated-cond \
-Wempty-body \
-Wendif-labels \
-Wenum-compare \
-Wextra \
-Wformat-contains-nul \
-Wformat-extra-args \
-Wformat-nonliteral \
-Wformat-security \
-Wformat-signedness \
-Wformat-y2k \
-Wformat-zero-length \
-Wframe-address \
-Wfree-nonheap-object \
-Whsa \
-Wignored-attributes \
-Wignored-qualifiers \
-Wimplicit \
-Wimplicit-function-declaration \
-Wimplicit-int \
-Wincompatible-pointer-types \
-Winit-self \
-Winline \
-Wint-conversion \
-Wint-to-pointer-cast \
-Winvalid-memory-model \
-Winvalid-pch \
-Wjump-misses-init \
-Wlogical-not-parentheses \
-Wlogical-op \
-Wmain \
-Wmaybe-uninitialized \
-Wmemset-transposed-args \
-Wmisleading-indentation \
-Wmissing-braces \
-Wmissing-declarations \
-Wmissing-field-initializers \
-Wmissing-include-dirs \
-Wmissing-parameter-type \
-Wmissing-prototypes \
-Wmultichar \
-Wnarrowing \
-Wnested-externs \
-Wnonnull \
-Wnonnull-compare \
-Wnull-dereference \
-Wodr \
-Wold-style-declaration \
-Wold-style-definition \
-Wopenmp-simd \
-Woverflow \
-Woverlength-strings \
-Woverride-init \
-Wpacked \
-Wpacked-bitfield-compat \
-Wparentheses \
-Wpointer-arith \
-Wpointer-sign \
-Wpointer-to-int-cast \
-Wpragmas \
-Wreturn-local-addr \
-Wreturn-type \
-Wscalar-storage-order \
-Wsequence-point \
-Wshadow \
-Wshift-count-negative \
-Wshift-count-overflow \
-Wshift-negative-value \
-Wsizeof-array-argument \
-Wsizeof-pointer-memaccess \
-Wstack-protector \
-Wstrict-aliasing \
-Wstrict-overflow \
-Wstrict-prototypes \
-Wsuggest-attribute=const \
-Wsuggest-attribute=format \
-Wsuggest-attribute=noreturn \
-Wsuggest-attribute=pure \
-Wsuggest-final-methods \
-Wsuggest-final-types \
-Wswitch \
-Wswitch-bool \
-Wswitch-default \
-Wsync-nand \
-Wsystem-headers \
-Wtautological-compare \
-Wtrampolines \
-Wtrigraphs \
-Wtype-limits \
-Wuninitialized \
-Wunknown-pragmas \
-Wunsafe-loop-optimizations \
-Wunused \
-Wunused-but-set-parameter \
-Wunused-but-set-variable \
-Wunused-function \
-Wunused-label \
-Wunused-local-typedefs \
-Wunused-macros \
-Wunused-parameter \
-Wunused-result \
-Wunused-value \
-Wunused-variable \
-Wvarargs \
-Wvariadic-macros \
-Wvector-operation-performance \
-Wvla \
-Wvolatile-register-var \
-Wwrite-strings \
\
; do
gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
done
# gcc --help=warnings outputs an unusual form for these options; list
# them here so that the above 'comm' command doesn't report a false match.
gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2"
gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2"
gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2"
# These are needed for older GCC versions.
if test -n "$GCC"; then
case `($CC --version) 2>/dev/null` in
'gcc (GCC) '[[0-3]].* | \
'gcc (GCC) '4.[[0-7]].*)
gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
;;
esac
fi
# Disable specific options as needed.
if test "$gl_cv_cc_nomfi_needed" = yes; then
gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
fi
if test "$gl_cv_cc_uninitialized_supported" = no; then
gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
fi
$1=$gl_manywarn_set
])
dnl
dnl virt-arg.m4: Helper macros for adding configure arguments
dnl
dnl Copyright (C) 2012-2014 Red Hat, Inc.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
dnl
dnl To be used instead of AC_ARG_WITH
dnl
dnl See LIBVIRT_ARG_WITH_FEATURE if the argument you're adding is going to
dnl be used for switching a feature on and off.
dnl
dnl LIBVIRT_ARG_WITH([CHECK_NAME], [HELP_DESC], [DEFAULT_ACTION])
dnl
dnl CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase.
dnl HELP_DESC: Description that will appear in configure --help
dnl DEFAULT_ACTION: Default configure action
dnl
dnl LIBVIRT_ARG_WITH([PACKAGER], [Extra packager name], [no])
dnl LIBVIRT_ARG_WITH([HTML_DIR], [path to base html directory], [$(datadir)/doc])
dnl
AC_DEFUN([LIBVIRT_ARG_WITH], [
m4_pushdef([check_name], [$1])
m4_pushdef([help_desc], [[$2]])
m4_pushdef([default_action], [$3])
m4_pushdef([check_name_lc], m4_tolower(check_name))
m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-]))
m4_pushdef([arg_var], [with-]check_name_dash)
m4_pushdef([with_var], [with_]check_name_lc)
m4_divert_text([DEFAULTS], [with_var][[=]][default_action])
AC_ARG_WITH([check_name_lc],
[AS_HELP_STRING([[--]arg_var],
]m4_dquote(help_desc)[[ @<:@default=]]m4_dquote(default_action)[[@:>@])])
m4_popdef([with_var])
m4_popdef([arg_var])
m4_popdef([check_name_dash])
m4_popdef([check_name_lc])
m4_popdef([default_action])
m4_popdef([help_desc])
m4_popdef([check_name])
])
dnl
dnl To be used instead of AC_ARG_WITH
dnl
dnl The difference between LIBVIRT_ARG_WITH and this macro is that the former
dnl is mostly an enhanced drop-in replacement for AC_ARG_WITH, whereas the
dnl latter is tailored for adding an argument that is going to be used to
dnl switch a feature on and off: as a consequence, it optionally supports
dnl specifying the minimum version for libraries the feature depends on and
dnl automatically builds a suitable description from the feature name.
dnl
dnl LIBVIRT_ARG_WITH_FEATURE([CHECK_NAME], [HELP_NAME], [DEFAULT_ACTION], [MIN_VERSION])
dnl
dnl CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase.
dnl HELP_NAME: Name that will appear in configure --help
dnl DEFAULT_ACTION: Default configure action
dnl MIN_VERSION: Specify minimal version that will be added to
dnl configure --help (optional)
dnl
dnl LIBVIRT_ARG_WITH_FEATURE([SELINUX], [SeLinux], [check])
dnl LIBVIRT_ARG_WITH_FEATURE([GLUSTERFS], [glusterfs], [check], [3.4.1])
dnl
AC_DEFUN([LIBVIRT_ARG_WITH_FEATURE], [
m4_pushdef([check_name], [$1])
m4_pushdef([help_name], [[$2]])
m4_pushdef([default_action], [$3])
m4_pushdef([min_version], [$4])
m4_pushdef([check_name_lc], m4_tolower(check_name))
m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-]))
m4_pushdef([arg_var], [with-]check_name_dash)
m4_pushdef([with_var], [with_]check_name_lc)
m4_pushdef([version_text], m4_ifnblank(min_version, [[ (>= ]]min_version[[)]]))
m4_divert_text([DEFAULTS], [with_var][[=]][default_action])
AC_ARG_WITH([check_name_lc],
[AS_HELP_STRING([[--]arg_var],
[with ]]m4_dquote(help_name)m4_dquote(version_text)[[ support @<:@default=]]m4_dquote(default_action)[[@:>@])])
m4_popdef([version_text])
m4_popdef([with_var])
m4_popdef([arg_var])
m4_popdef([check_name_dash])
m4_popdef([check_name_lc])
m4_popdef([min_version])
m4_popdef([default_action])
m4_popdef([help_name])
m4_popdef([check_name])
])
dnl
dnl To be used instead of AC_ARG_ENABLE
dnl
dnl LIBVIRT_ARG_ENABLE([CHECK_NAME], [HELP_DESC], [DEFAULT_ACTION])
dnl
dnl CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase.
dnl HELP_DESC: Description that will appear in configure --help
dnl DEFAULT_ACTION: Default configure action
dnl
dnl LIBVIRT_ARG_ENABLE([DEBUG], [enable debugging output], [yes])
dnl
AC_DEFUN([LIBVIRT_ARG_ENABLE], [
m4_pushdef([check_name], [$1])
m4_pushdef([help_desc], [[$2]])
m4_pushdef([default_action], [$3])
m4_pushdef([check_name_lc], m4_tolower(check_name))
m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-]))
m4_pushdef([arg_var], [enable-]check_name_dash)
m4_pushdef([enable_var], [enable_]check_name_lc)
m4_divert_text([DEFAULTS], [enable_var][[=]][default_action])
AC_ARG_ENABLE([check_name_lc],
[AS_HELP_STRING([[--]arg_var],
]m4_dquote(help_desc)[[ @<:@default=]]m4_dquote(default_action)[[@:>@])])
m4_popdef([enable_var])
m4_popdef([arg_var])
m4_popdef([check_name_dash])
m4_popdef([check_name_lc])
m4_popdef([default_action])
m4_popdef([help_desc])
m4_popdef([check_name])
])
dnl
dnl Enable all known GCC compiler warnings, except for those
dnl we can't yet cope with
dnl
AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
dnl ******************************
dnl More compiler warnings
dnl ******************************
LIBVIRT_ARG_ENABLE([WERROR], [Use -Werror (if supported)], [check])
if test "$enable_werror" = "check"; then
if test -d $srcdir/.git; then
is_git_version=true
enable_werror=yes
else
enable_werror=no
fi
fi
# List of warnings that are not relevant / wanted
# Don't care about C++ compiler compat
dontwarn="$dontwarn -Wc++-compat"
dontwarn="$dontwarn -Wabi"
dontwarn="$dontwarn -Wdeprecated"
# 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"
# Gnulib's stat-time.h violates this
dontwarn="$dontwarn -Waggregate-return"
# gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -Wall
dontwarn="$dontwarn -Wenum-compare"
# gcc 5.1 -Wformat-signedness mishandles enums, not ready for prime time
dontwarn="$dontwarn -Wformat-signedness"
# Several conditionals expand the same on both branches
# depending on the particular platform/architecture
dontwarn="$dontwarn -Wduplicated-branches"
# > This warning does not generally indicate that there is anything wrong
# > with your code; it merely indicates that GCC's optimizers are unable
# > to handle the code effectively.
# Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
dontwarn="$dontwarn -Wdisabled-optimization"
# gcc 4.2 treats attribute(format) as an implicit attribute(nonnull),
# which triggers spurious warnings for our usage
AC_CACHE_CHECK([whether the C compiler's -Wformat allows NULL strings],
[lv_cv_gcc_wformat_null_works], [
save_CFLAGS=$CFLAGS
CFLAGS='-Wunknown-pragmas -Werror -Wformat'
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <stddef.h>
static __attribute__ ((__format__ (__printf__, 1, 2))) int
foo (const char *fmt, ...) { return !fmt; }
]], [[
return foo(NULL);
]])],
[lv_cv_gcc_wformat_null_works=yes],
[lv_cv_gcc_wformat_null_works=no])
CFLAGS=$save_CFLAGS])
AC_CACHE_CHECK([whether gcc gives bogus warnings for -Wlogical-op],
[lv_cv_gcc_wlogical_op_equal_expr_broken], [
save_CFLAGS="$CFLAGS"
CFLAGS="-O2 -Wlogical-op -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#define TEST1 1
#define TEST2 TEST1
]], [[
int test = 0;
return test == TEST1 || test == TEST2;]])],
[lv_cv_gcc_wlogical_op_equal_expr_broken=no],
[lv_cv_gcc_wlogical_op_equal_expr_broken=yes])
CFLAGS="$save_CFLAGS"])
AC_CACHE_CHECK([whether clang gives bogus warnings for -Wdouble-promotion],
[lv_cv_clang_double_promotion_broken], [
save_CFLAGS="$CFLAGS"
CFLAGS="-O2 -Wdouble-promotion -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <math.h>
]], [[
float f = 0.0;
return isnan(f);]])],
[lv_cv_clang_double_promotion_broken=no],
[lv_cv_clang_double_promotion_broken=yes])
CFLAGS="$save_CFLAGS"])
if test "$lv_cv_clang_double_promotion_broken" = "yes";
then
dontwarn="$dontwarn -Wdouble-promotion"
fi
# 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])
# 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...
wantwarn="$wantwarn -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
wantwarn="$wantwarn -Wjump-misses-init"
# GNULIB turns on -Wformat=2 which implies -Wformat-nonliteral,
# so we need to manually re-exclude it. Also, older gcc 4.2
# added an implied ATTRIBUTE_NONNULL on any parameter marked
# ATTRIBUTE_FMT_PRINT, which causes -Wformat failure on our
# intentional use of virReportError(code, NULL).
wantwarn="$wantwarn -Wno-format-nonliteral"
if test $lv_cv_gcc_wformat_null_works = no; then
wantwarn="$wantwarn -Wno-format"
fi
# -Wformat enables this by default, and we should keep it,
# but need to rewrite various areas of code first
wantwarn="$wantwarn -Wno-format-truncation"
# This should be < 256 really. Currently we're down to 4096,
# but using 1024 bytes sized buffers (mostly for virStrerror)
# stops us from going down further
gl_WARN_ADD([-Wframe-larger-than=4096], [STRICT_FRAME_LIMIT_CFLAGS])
gl_WARN_ADD([-Wframe-larger-than=25600], [RELAXED_FRAME_LIMIT_CFLAGS])
# Extra special flags
dnl -fstack-protector stuff passes gl_WARN_ADD with gcc
dnl on Mingw32, but fails when actually used
case $host in
aarch64-*-*)
dnl "error: -fstack-protector not supported for this target [-Werror]"
;;
*-*-linux*)
dnl Prefer -fstack-protector-strong if it's available.
dnl There doesn't seem to be great overhead in adding
dnl -fstack-protector-all instead of -fstack-protector.
dnl
dnl We also don't need ssp-buffer-size with -all or -strong,
dnl since functions are protected regardless of buffer size.
dnl wantwarn="$wantwarn --param=ssp-buffer-size=4"
wantwarn="$wantwarn -fstack-protector-strong"
;;
*-*-freebsd*)
dnl FreeBSD ships old gcc 4.2.1 which doesn't handle
dnl -fstack-protector-all well
wantwarn="$wantwarn -fstack-protector"
wantwarn="$wantwarn -Wno-unused-command-line-argument"
;;
esac
wantwarn="$wantwarn -fexceptions"
wantwarn="$wantwarn -fasynchronous-unwind-tables"
# Need -fipa-pure-const in order to make -Wsuggest-attribute=pure
# fire even without -O.
wantwarn="$wantwarn -fipa-pure-const"
if test "$enable_werror" = "yes"
then
wantwarn="$wantwarn -Werror"
fi
# Check for $CC support of each warning
for w in $wantwarn; do
gl_WARN_ADD([$w])
done
case $host in
*-*-linux*)
dnl Fall back to -fstack-protector-all if -strong is not available
case $WARN_CFLAGS in
*-fstack-protector-strong*)
;;
*)
gl_WARN_ADD([-fstack-protector-all])
;;
esac
;;
esac
case $WARN_CFLAGS in
*-Wsuggest-attribute=format*)
AC_DEFINE([HAVE_SUGGEST_ATTRIBUTE_FORMAT], [1], [Whether -Wsuggest-attribute=format works])
;;
esac
# Silence certain warnings in gnulib, and use improved glibc headers
AH_VERBATIM([FORTIFY_SOURCE],
[/* Enable compile-time and run-time bounds-checking, and some warnings,
without upsetting newer glibc. */
#if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
# define _FORTIFY_SOURCE 2
#endif
])
])
# warnings.m4 serial 11
dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Simon Josefsson
# gl_AS_VAR_APPEND(VAR, VALUE)
# ----------------------------
# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
m4_ifdef([AS_VAR_APPEND],
[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
[m4_define([gl_AS_VAR_APPEND],
[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
# [PROGRAM = AC_LANG_PROGRAM()])
# -----------------------------------------------------------------
# Check if the compiler supports OPTION when compiling PROGRAM.
#
# FIXME: gl_Warn must be used unquoted until we can assume Autoconf
# 2.64 or newer.
AC_DEFUN([gl_COMPILER_OPTION_IF],
[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
AS_LITERAL_IF([$1],
[m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
[gl_positive="$1"
case $gl_positive in
-Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
esac
m4_pushdef([gl_Positive], [$gl_positive])])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [
gl_save_compiler_FLAGS="$gl_Flags"
gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
[" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
[AS_VAR_SET(gl_Warn, [yes])],
[AS_VAR_SET(gl_Warn, [no])])
gl_Flags="$gl_save_compiler_FLAGS"
])
AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
m4_popdef([gl_Positive])dnl
AS_VAR_POPDEF([gl_Flags])dnl
AS_VAR_POPDEF([gl_Warn])dnl
])
# gl_UNKNOWN_WARNINGS_ARE_ERRORS
# ------------------------------
# Clang doesn't complain about unknown warning options unless one also
# specifies -Wunknown-warning-option -Werror. Detect this.
AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
[gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
[gl_unknown_warnings_are_errors=])])
# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS],
# [PROGRAM = AC_LANG_PROGRAM()])
# ---------------------------------------------
# Adds parameter to WARN_CFLAGS if the compiler supports it when
# compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]).
#
# If VARIABLE is a variable name, AC_SUBST it.
AC_DEFUN([gl_WARN_ADD],
[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS])
gl_COMPILER_OPTION_IF([$1],
[gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])],
[],
[$3])
m4_ifval([$2],
[AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
[AC_SUBST([WARN_CFLAGS])])dnl
])
# Local Variables:
# mode: autoconf
# End:
......@@ -18,7 +18,9 @@ libvirt_dbus_SOURCES = $(DAEMON_SOURCES)
libvirt_dbus_CFLAGS = \
$(SYSTEMD_CFLAGS) \
$(LIBVIRT_CFLAGS)
$(LIBVIRT_CFLAGS) \
$(WARN_CFLAGS) \
$(NULL)
libvirt_dbus_LDFLAGS = \
$(SYSTEMD_LDFLAGS) \
......