diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-05-09 18:55:47 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-05-10 12:50:22 +0100 |
commit | 22e8917948e15000373542b30808f6a5873012d2 (patch) | |
tree | c941c162d8185b59756888d2ae626b2f8cf2c500 | |
parent | e579c1a264856ede16a14e64e8437246281be1a4 (diff) |
Import error-control and -Werror options from telepathy-glib
For the moment I've disabled missing-prototypes, sign-compare and
strict-prototypes - they should be re-enabled.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49725
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Mikhail Zabaluev <mikhail.zabaluev@nokia.com>
-rw-r--r-- | configure.ac | 47 | ||||
-rw-r--r-- | m4/Makefile.am | 6 | ||||
-rw-r--r-- | m4/tp-compiler-flag.m4 | 43 | ||||
-rw-r--r-- | m4/tp-compiler-warnings.m4 | 49 | ||||
-rw-r--r-- | m4/tp-linker-flag.m4 | 44 |
5 files changed, 176 insertions, 13 deletions
diff --git a/configure.ac b/configure.ac index 450cc28..aa461e3 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ AC_CONFIG_MACRO_DIR([m4]) AS_VERSION(THIS_PACKAGE, TELEPATHY_SIP_VERSION, VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO, VERSION_NANO, - WERROR="no", WERROR="yes") + IS_RELEASE="yes", IS_RELEASE="no") AM_INIT_AUTOMAKE([1.9 -Wno-portability]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) @@ -34,18 +34,41 @@ AC_PROG_LIBTOOL COMPILER_OPTIMISATIONS COMPILER_COVERAGE -dnl decide on error flags -AS_COMPILER_FLAG(-Wall, WALL="yes", WALL="no") - -if test "x$WALL" = "xyes"; then - ERROR_CFLAGS="-Wall" - - if test "x$WERROR" = "xyes"; then - AS_COMPILER_FLAG(-Werror,ERROR_CFLAGS="$ERROR_CFLAGS -Werror",ERROR_CFLAGS="$ERROR_CFLAGS") - fi -fi +AS_IF([test "x$IS_RELEASE" = xyes], +[ # version x.y.z - "official release", + # disable extra checks by default + AC_ARG_ENABLE([fatal-warnings], + [AC_HELP_STRING([--enable-fatal-warnings], + [make various warnings fatal])], + [], + [enable_fatal_warnings=no]) +], +[ # tp-glib is version x.y.z.1 - development snapshot, + # enable extra checks by default + AC_ARG_ENABLE([fatal-warnings], + [AC_HELP_STRING([--disable-fatal-warnings], + [make various warnings non-fatal])], + [], + [enable_fatal_warnings=yes]) +]) -AC_SUBST(ERROR_CFLAGS) +TP_COMPILER_WARNINGS([ERROR_CFLAGS], [test "x$enable_fatal_warnings" = xyes], + [all \ + extra \ + declaration-after-statement \ + shadow \ + missing-prototypes \ + nested-externs \ + pointer-arith \ + format-security \ + init-self], + dnl missing-prototypes, sign-compare and strict-prototypes are bugs really + [missing-field-initializers \ + missing-prototypes \ + sign-compare \ + strict-prototypes \ + unused-parameter]) +AC_SUBST([ERROR_CFLAGS]) AC_ARG_ENABLE(debug, AS_HELP_STRING([--disable-debug],[omit debug code]), diff --git a/m4/Makefile.am b/m4/Makefile.am index fa6047c..72775cc 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -1,4 +1,8 @@ EXTRA_DIST = \ as-compiler-flag.m4 \ as-version.m4 \ -compiler.m4 +compiler.m4 \ +tp-compiler-flag.m4 \ +tp-compiler-warnings.m4 \ +tp-linker-flag.m4 \ +$(NULL) diff --git a/m4/tp-compiler-flag.m4 b/m4/tp-compiler-flag.m4 new file mode 100644 index 0000000..06deaba --- /dev/null +++ b/m4/tp-compiler-flag.m4 @@ -0,0 +1,43 @@ +dnl A version of AS_COMPILER_FLAG that supports both C and C++. +dnl Based on: + +dnl as-compiler-flag.m4 0.1.0 +dnl autostars m4 macro for detection of compiler flags +dnl David Schleef <ds@schleef.org> +dnl $Id: as-compiler-flag.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $ + +dnl TP_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CFLAGS and CXXFLAGS. +dnl +dnl Runs ACTION-IF-ACCEPTED if the compiler for the currently selected +dnl AC_LANG can compile with the flags, and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([TP_COMPILER_FLAG], +[ + AC_MSG_CHECKING([to see if compiler understands $1]) + + save_CFLAGS="$CFLAGS" + save_CXXFLAGS="$CXXFLAGS" + CFLAGS="$CFLAGS $1" + CXXFLAGS="$CXXFLAGS $1" + + AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) + CFLAGS="$save_CFLAGS" + CXXFLAGS="$save_CXXFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + +dnl TP_ADD_COMPILER_FLAG(VARIABLE, CFLAGS) +dnl Append CFLAGS to VARIABLE if the compiler supports them. +AC_DEFUN([TP_ADD_COMPILER_FLAG], +[ + TP_COMPILER_FLAG([$2], [$1="[$]$1 $2"]) +]) diff --git a/m4/tp-compiler-warnings.m4 b/m4/tp-compiler-warnings.m4 new file mode 100644 index 0000000..ee4af31 --- /dev/null +++ b/m4/tp-compiler-warnings.m4 @@ -0,0 +1,49 @@ +dnl TP_COMPILER_WARNINGS(VARIABLE, WERROR_BY_DEFAULT, DESIRABLE, UNDESIRABLE) +dnl $1 (VARIABLE): the variable to put flags into +dnl $2 (WERROR_BY_DEFAULT): a command returning true if -Werror should be the +dnl default +dnl $3 (DESIRABLE): warning flags we want (e.g. all extra shadow) +dnl $4 (UNDESIRABLE): warning flags we don't want (e.g. +dnl missing-field-initializers unused-parameter) +AC_DEFUN([TP_COMPILER_WARNINGS], +[ + AC_REQUIRE([AC_ARG_ENABLE])dnl + AC_REQUIRE([AC_HELP_STRING])dnl + AC_REQUIRE([TP_COMPILER_FLAG])dnl + + tp_warnings="" + for tp_flag in $3; do + TP_COMPILER_FLAG([-W$tp_flag], [tp_warnings="$tp_warnings -W$tp_flag"]) + done + + tp_error_flags="-Werror" + TP_COMPILER_FLAG([-Werror], [tp_werror=yes], [tp_werror=no]) + + for tp_flag in $4; do + TP_COMPILER_FLAG([-Wno-$tp_flag], + [tp_warnings="$tp_warnings -Wno-$tp_flag"]) +dnl Yes, we do need to use both -Wno-foo and -Wno-error=foo. Simon says: +dnl some warnings we explicitly don't want, like unused-parameter, but +dnl they're in -Wall. when a distro using cdbs compiles us, we have: +dnl -Werror -Wno-unused-parameter -Wall +dnl ^ from us ^ from cdbs +dnl which turns -Wunused-parameter back on, in effect + TP_COMPILER_FLAG([-Wno-error=$tp_flag], + [tp_error_flags="$tp_error_flags -Wno-error=$tp_flag"], [tp_werror=no]) + done + + AC_ARG_ENABLE([Werror], + AC_HELP_STRING([--disable-Werror], + [compile without -Werror (normally enabled in development builds)]), + tp_werror=$enableval, :) + + if test "x$tp_werror" = xyes && $2; then +dnl We put -Wno-error=foo before -Wno-foo because clang interprets -Wall +dnl -Werror -Wno-foo -Wno-error=foo as “make foo a non-fatal warning”, but does +dnl what we want if you reverse them. + $1="$tp_error_flags $tp_warnings" + else + $1="$tp_warnings" + fi + +]) diff --git a/m4/tp-linker-flag.m4 b/m4/tp-linker-flag.m4 new file mode 100644 index 0000000..8fd3506 --- /dev/null +++ b/m4/tp-linker-flag.m4 @@ -0,0 +1,44 @@ +dnl A version of AS_COMPILER_FLAG that supports linker flags +dnl Based on: + +dnl as-compiler-flag.m4 0.1.0 +dnl autostars m4 macro for detection of compiler flags +dnl David Schleef <ds@schleef.org> +dnl $Id: as-compiler-flag.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $ + +dnl TP_LINKER_FLAG(LDFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given LDFLAGS. +dnl +dnl Runs ACTION-IF-ACCEPTED if the compiler/linker for the currently selected +dnl AC_LANG can compile with the flags, and ACTION-IF-NOT-ACCEPTED otherwise. +dnl +dnl Note that LDFLAGS are passed to the linker via the compiler, so you +dnl should check for -Wl,--no-add-needed rather than --no-add-needed. + +AC_DEFUN([TP_LINKER_FLAG], +[ + AC_MSG_CHECKING([to see if compiler/linker understand $1]) + + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $1" + + AC_COMPILE_IFELSE(AC_LANG_SOURCE([]), [flag_ok=yes], [flag_ok=no]) + + LDFLAGS="$save_LDFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + AC_MSG_RESULT([$flag_ok]) +]) + +dnl TP_ADD_LINKER_FLAG(VARIABLE, LDFLAGS) +dnl Append LDFLAGS to VARIABLE if the linker supports them. +AC_DEFUN([TP_ADD_LINKER_FLAG], +[ + TP_LINKER_FLAG([$2], [$1="[$]$1 $2"]) +]) |