telepathy-rakia: Import error-control and -Werror options from telepathy-glib

Simon McVittie smcv at kemper.freedesktop.org
Thu May 10 04:50:47 PDT 2012


Module: telepathy-rakia
Branch: master
Commit: 22e8917948e15000373542b30808f6a5873012d2
URL:    http://cgit.freedesktop.org/telepathy/telepathy-rakia/commit/?id=22e8917948e15000373542b30808f6a5873012d2

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Wed May  9 18:55:47 2012 +0100

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 at collabora.co.uk>
Reviewed-by: Mikhail Zabaluev <mikhail.zabaluev at nokia.com>

---

 configure.ac               |   49 ++++++++++++++++++++++++++++++++-----------
 m4/Makefile.am             |    6 ++++-
 m4/tp-compiler-flag.m4     |   43 ++++++++++++++++++++++++++++++++++++++
 m4/tp-compiler-warnings.m4 |   49 ++++++++++++++++++++++++++++++++++++++++++++
 m4/tp-linker-flag.m4       |   44 +++++++++++++++++++++++++++++++++++++++
 5 files changed, 177 insertions(+), 14 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 at 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 at 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"])
+])



More information about the telepathy-commits mailing list