summaryrefslogtreecommitdiff
path: root/common/m4/gst-error.m4
diff options
context:
space:
mode:
Diffstat (limited to 'common/m4/gst-error.m4')
-rw-r--r--common/m4/gst-error.m4104
1 files changed, 89 insertions, 15 deletions
diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
index 4c3f12c4..f97f9a6f 100644
--- a/common/m4/gst-error.m4
+++ b/common/m4/gst-error.m4
@@ -1,10 +1,12 @@
-dnl handle various error-related things
+Dnl handle various error-related things
dnl Thomas Vander Stichele <thomas@apestaart.org>
+dnl Tim-Philipp Müller <tim centricular net>
-dnl Last modification: 2005-10-16
+dnl Last modification: 2008-02-18
dnl AG_GST_SET_ERROR_CFLAGS([ADD-WERROR])
+dnl AG_GST_SET_ERROR_CXXFLAGS([ADD-WERROR])
dnl AG_GST_SET_LEVEL_DEFAULT([IS-CVS-VERSION])
@@ -32,21 +34,28 @@ AC_DEFUN([AG_GST_SET_ERROR_CFLAGS],
then
AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror")
- dnl if -Werror isn't suported
+ dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case)
if test "x$ERROR_CFLAGS" == "x"
then
- dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,no%E_STATEMENT_NOT_REACHED (Sun Forte case)
- dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
- dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
- AS_COMPILER_FLAG([-errwarn=%all,no%E_EMPTY_DECLARATION,no%E_STATEMENT_NOT_REACHED],
- [ERROR_CFLAGS="-errwarn=%all,no%E_EMPTY_DECLARATION,no%E_STATEMENT_NOT_REACHED"])
-
- dnl if this also isn't suported, try only for -errwarn=%all
- if test "x$ERROR_CFLAGS" == "x"
- then
- AS_COMPILER_FLAG(-errwarn=%all,
- ERROR_CFLAGS="-errwarn=%all")
- fi
+ AS_COMPILER_FLAG([-errwarn=%all], [
+ ERROR_CFLAGS="-errwarn=%all"
+ dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
+ dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
+ dnl no%E_MACRO_REDEFINED (Sun Forte case)
+ dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
+ dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
+ dnl "macro redefined" because of gst/gettext.h
+ dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
+ for f in 'no%E_EMPTY_DECLARATION' \
+ 'no%E_STATEMENT_NOT_REACHED' \
+ 'no%E_ARGUEMENT_MISMATCH' \
+ 'no%E_MACRO_REDEFINED'
+ do
+ AS_COMPILER_FLAG([-errwarn=%all,$f], [
+ ERROR_CFLAGS="$ERROR_CFLAGS,$f"
+ ])
+ done
+ ])
fi
fi
@@ -54,6 +63,71 @@ AC_DEFUN([AG_GST_SET_ERROR_CFLAGS],
AC_MSG_NOTICE([set ERROR_CFLAGS to $ERROR_CFLAGS])
])
+dnl Sets ERROR_CXXFLAGS to something the compiler will accept.
+dnl AC_SUBST them so they are available in Makefile
+
+dnl -Wall is added if it is supported
+dnl -Werror is added if ADD-WERROR is not "no"
+
+dnl These flags can be overridden at make time:
+dnl make ERROR_CXXFLAGS=
+AC_DEFUN([AG_GST_SET_ERROR_CXXFLAGS],
+[
+ AC_REQUIRE([AC_PROG_CXX])
+ AC_REQUIRE([AS_CXX_COMPILER_FLAG])
+
+
+ dnl if we support -Wall, set it unconditionally
+ AS_CXX_COMPILER_FLAG(-Wall, [
+ ERROR_CXXFLAGS="-Wall"
+ ], [
+ ERROR_CXXFLAGS=""
+ ])
+
+ dnl if asked for, add -Werror if supported
+ if test "x$1" != "xno"
+ then
+ AS_CXX_COMPILER_FLAG(-Werror, werror_supported=yes, werror_supported=no)
+
+ if test "x$werror_supported" = "xyes"; then
+ ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror"
+
+ dnl add exceptions
+ for f in '-Wno-non-virtual-dtor'
+ do
+ AS_CXX_COMPILER_FLAG([$f], ERROR_CXXFLAGS="$ERROR_CXXFLAGS $f")
+ done
+ else
+ dnl if -Werror isn't suported, try -errwarn=%all
+ AS_CXX_COMPILER_FLAG([-errwarn=%all], errwarnall=yes, errwarnall=no)
+ if test "x$errwarnall" = "xyes"; then
+ ERROR_CXXFLAGS="-errwarn=%all"
+ dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
+ dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
+ dnl no%E_MACRO_REDEFINED (Sun Forte case)
+ dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
+ dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
+ dnl "macro redefined" because of gst/gettext.h
+ dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
+ dnl FIXME: do any of these work with the c++ compiler? if not, why
+ dnl do we check at all?
+ for f in 'no%E_EMPTY_DECLARATION' \
+ 'no%E_STATEMENT_NOT_REACHED' \
+ 'no%E_ARGUEMENT_MISMATCH' \
+ 'no%E_MACRO_REDEFINED'
+ do
+ AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], [
+ ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f"
+ ])
+ done
+ fi
+ fi
+ fi
+
+ AC_SUBST(ERROR_CXXFLAGS)
+ AC_MSG_NOTICE([set ERROR_CXXFLAGS to $ERROR_CXXFLAGS])
+])
+
dnl Sets the default error level for debugging messages
AC_DEFUN([AG_GST_SET_LEVEL_DEFAULT],
[