summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid King <amigadave@amigadave.com>2012-07-28 15:19:55 +0100
committerDavid King <amigadave@amigadave.com>2012-11-02 16:27:12 +0000
commite42ca9bec9d83aa53d7f79c480daf4b7c4d95fe1 (patch)
tree4c67197bc18386bb2fc3883e3657f5d9538cab8d
parent0ae892df10c6f671669e197cec1f4ed302584d70 (diff)
downloadgnome-common-e42ca9bec9d83aa53d7f79c480daf4b7c4d95fe1.tar.gz
Add lots of warnings to GNOME_COMPILE_WARNINGS
Following Colin Walters' thread on desktop-devel-list: https://mail.gnome.org/archives/desktop-devel-list/2012-July/msg00100.html Add a selection of more strict warnings to the default level of GNOME_COMPILE_WARNINGS. Check all the warnings by passing them to GCC, and ignore those which fail. Set the severity of some of the warnings to errors, so that particularly bad code is rejected (set the warning level to ‘minimum’ is you wish to avoid this behaviour). Fixes bug 568546 and bug 608953.
-rw-r--r--macros2/gnome-compiler-flags.m454
1 files changed, 28 insertions, 26 deletions
diff --git a/macros2/gnome-compiler-flags.m4 b/macros2/gnome-compiler-flags.m4
index b9db2fd..1dbfa1a 100644
--- a/macros2/gnome-compiler-flags.m4
+++ b/macros2/gnome-compiler-flags.m4
@@ -1,5 +1,6 @@
dnl GNOME_COMPILE_WARNINGS
-dnl Turn on many useful compiler warnings
+dnl Turn on many useful compiler warnings and substitute the result into
+dnl WARN_CFLAGS
dnl For now, only works on GCC
AC_DEFUN([GNOME_COMPILE_WARNINGS],[
dnl ******************************
@@ -11,7 +12,6 @@ AC_DEFUN([GNOME_COMPILE_WARNINGS],[
[Turn on compiler warnings]),,
[enable_compile_warnings="m4_default([$1],[yes])"])
- warnCFLAGS=
if test "x$GCC" != xyes; then
enable_compile_warnings=no
fi
@@ -27,38 +27,40 @@ AC_DEFUN([GNOME_COMPILE_WARNINGS],[
warning_flags="-Wall"
;;
yes)
- warning_flags="-Wall -Wmissing-prototypes"
+ warning_flags="-Wall -Wstrict-prototypes -Waggregate-return -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs"
;;
maximum|error)
- warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
- CFLAGS="$warning_flags $CFLAGS"
- for option in -Wno-sign-compare; do
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $option"
- AC_MSG_CHECKING([whether gcc understands $option])
- AC_TRY_COMPILE([], [],
- has_option=yes,
- has_option=no,)
- CFLAGS="$SAVE_CFLAGS"
- AC_MSG_RESULT($has_option)
- if test $has_option = yes; then
- warning_flags="$warning_flags $option"
- fi
- unset has_option
- unset SAVE_CFLAGS
- done
- unset option
- if test "$enable_compile_warnings" = "error" ; then
- warning_flags="$warning_flags -Werror"
- fi
+ warning_flags="-Wall -Wstrict-prototypes -Waggregate-return -Wdeclaration-after-statement -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -Wnested-externs -Wno-sign-compare"
;;
*)
AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
;;
esac
+
+ if test "$enable_compile_warnings" = "error" ; then
+ warning_flags="$warning_flags -Werror"
+ fi
+
+ dnl Check whether GCC supports the warning options
+ for option in $warning_flags; do
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $option"
+ AC_MSG_CHECKING([whether gcc understands $option])
+ AC_TRY_COMPILE([], [],
+ has_option=yes,
+ has_option=no,)
+ CFLAGS="$save_CFLAGS"
+ AC_MSG_RESULT([$has_option])
+ if test $has_option = yes; then
+ tested_warning_flags="$tested_warning_flags $option"
+ fi
+ unset has_option
+ unset save_CFLAGS
+ done
+ unset option
CFLAGS="$realsave_CFLAGS"
AC_MSG_CHECKING(what warning flags to pass to the C compiler)
- AC_MSG_RESULT($warning_flags)
+ AC_MSG_RESULT($tested_warning_flags)
AC_ARG_ENABLE(iso-c,
AC_HELP_STRING([--enable-iso-c],
@@ -81,7 +83,7 @@ AC_DEFUN([GNOME_COMPILE_WARNINGS],[
fi
AC_MSG_RESULT($complCFLAGS)
- WARN_CFLAGS="$warning_flags $complCFLAGS"
+ WARN_CFLAGS="$tested_warning_flags $complCFLAGS"
AC_SUBST(WARN_CFLAGS)
])