1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
|
dnl handle various error-related things
dnl Thomas Vander Stichele <thomas@apestaart.org>
dnl Tim-Philipp Müller <tim centricular net>
dnl Last modification: 2008-02-18
dnl AG_GST_SET_ERROR_CFLAGS([ADD-WERROR], [MORE_FLAGS])
dnl AG_GST_SET_ERROR_CXXFLAGS([ADD-WERROR], [MORE_FLAGS])
dnl AG_GST_SET_LEVEL_DEFAULT([IS-GIT-VERSION])
dnl Sets WARNING_CFLAGS and ERROR_CFLAGS to something the compiler
dnl will accept and AC_SUBST them so they are available in Makefile
dnl
dnl WARNING_CFLAGS will contain flags to make the compiler emit more
dnl warnings.
dnl ERROR_CFLAGS will contain flags to make those warnings fatal,
dnl unless ADD-WERROR is set to "no"
dnl
dnl If MORE_FLAGS is set, tries to add each of the given flags
dnl to WARNING_CFLAGS if the compiler supports them. Each flag is
dnl tested separately.
dnl
dnl These flags can be overridden at make time:
dnl make ERROR_CFLAGS=
AC_DEFUN([AG_GST_SET_ERROR_CFLAGS],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AS_COMPILER_FLAG])
WARNING_CFLAGS=""
ERROR_CFLAGS=""
dnl if we support -Wall, set it unconditionally
AS_COMPILER_FLAG(-Wall,
WARNING_CFLAGS="$WARNING_CFLAGS -Wall")
dnl Warn if declarations after statements are used (C99 extension)
AS_COMPILER_FLAG(-Wdeclaration-after-statement,
WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement")
dnl Warn if variable length arrays are used (C99 extension)
AS_COMPILER_FLAG(-Wvla,
WARNING_CFLAGS="$WARNING_CFLAGS -Wvla")
dnl Warn for invalid pointer arithmetic
AS_COMPILER_FLAG(-Wpointer-arith,
WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith")
dnl if asked for, add -Werror if supported
if test "x$1" != "xno"
then
AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror")
dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case)
if test "x$ERROR_CFLAGS" = "x"
then
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' \
'no%E_LOOP_NOT_ENTERED_AT_TOP'
do
AS_COMPILER_FLAG([-errwarn=%all,$f], [
ERROR_CFLAGS="$ERROR_CFLAGS,$f"
])
done
])
else
dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
dnl as before G_LOCK and friends caused strict aliasing compiler
dnl warnings.
PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
AS_COMPILER_FLAG(-fno-strict-aliasing,
ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing")
])
fi
fi
if test "x$2" != "x"
then
UNSUPPORTED=""
list="$2"
for each in $list
do
AS_COMPILER_FLAG($each,
WARNING_CFLAGS="$WARNING_CFLAGS $each",
UNSUPPORTED="$UNSUPPORTED $each")
done
if test "X$UNSUPPORTED" != X ; then
AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED])
fi
fi
AC_SUBST(WARNING_CFLAGS)
AC_SUBST(ERROR_CFLAGS)
AC_MSG_NOTICE([set WARNING_CFLAGS to $WARNING_CFLAGS])
AC_MSG_NOTICE([set ERROR_CFLAGS to $ERROR_CFLAGS])
])
dnl Sets WARNING_CXXFLAGS and ERROR_CXXFLAGS to something the compiler
dnl will accept and AC_SUBST them so they are available in Makefile
dnl
dnl WARNING_CXXFLAGS will contain flags to make the compiler emit more
dnl warnings.
dnl ERROR_CXXFLAGS will contain flags to make those warnings fatal,
dnl unless ADD-WERROR is set to "no"
dnl
dnl If MORE_FLAGS is set, tries to add each of the given flags
dnl to WARNING_CFLAGS if the compiler supports them. Each flag is
dnl tested separately.
dnl
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])
ERROR_CXXFLAGS=""
WARNING_CXXFLAGS=""
dnl if we support -Wall, set it unconditionally
AS_CXX_COMPILER_FLAG(-Wall, WARNING_CXXFLAGS="$WARNING_CXXFLAGS -Wall")
dnl if asked for, add -Werror if supported
if test "x$1" != "xno"
then
AS_CXX_COMPILER_FLAG(-Werror, ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror")
if test "x$ERROR_CXXFLAGS" != "x"
then
dnl add exceptions
AS_CXX_COMPILER_FLAG([-Wno-non-virtual-dtor], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Wno-non-virtual-dtor")
dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
dnl as before G_LOCK and friends caused strict aliasing compiler
dnl warnings.
PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
AS_CXX_COMPILER_FLAG([-fno-strict-aliasing],
ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing")
])
else
dnl if -Werror isn't suported, try -errwarn=%all
AS_CXX_COMPILER_FLAG([-errwarn=%all], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all")
if test "x$ERROR_CXXFLAGS" != "x"; then
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' \
'no%E_LOOP_NOT_ENTERED_AT_TOP'
do
AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f")
done
fi
fi
fi
if test "x$2" != "x"
then
UNSUPPORTED=""
list="$2"
for each in $list
do
AS_CXX_COMPILER_FLAG($each,
WARNING_CXXFLAGS="$WARNING_CXXFLAGS $each",
UNSUPPORTED="$UNSUPPORTED $each")
done
if test "X$UNSUPPORTED" != X ; then
AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED])
fi
fi
AC_SUBST(WARNING_CXXFLAGS)
AC_SUBST(ERROR_CXXFLAGS)
AC_MSG_NOTICE([set WARNING_CXXFLAGS to $WARNING_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],
[
dnl define correct errorlevel for debugging messages. We want to have
dnl GST_ERROR messages printed when running cvs builds
if test "x[$1]" = "xyes"; then
GST_LEVEL_DEFAULT=GST_LEVEL_ERROR
else
GST_LEVEL_DEFAULT=GST_LEVEL_NONE
fi
AC_DEFINE_UNQUOTED(GST_LEVEL_DEFAULT, $GST_LEVEL_DEFAULT,
[Default errorlevel to use])
dnl AC_SUBST so we can use it for win32/common/config.h
AC_SUBST(GST_LEVEL_DEFAULT)
])
|