| 1 |
dnl GNOME_COMPILE_WARNINGS |
| 2 |
dnl Turn on many useful compiler warnings |
| 3 |
dnl For now, only works on GCC |
| 4 |
AC_DEFUN([GNOME_COMPILE_WARNINGS],[ |
| 5 |
dnl ****************************** |
| 6 |
dnl More compiler warnings |
| 7 |
dnl ****************************** |
| 8 |
|
| 9 |
AC_ARG_ENABLE(compile-warnings, |
| 10 |
AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@], |
| 11 |
[Turn on compiler warnings]),, |
| 12 |
[enable_compile_warnings="m4_default([$1],[yes])"]) |
| 13 |
|
| 14 |
warnCFLAGS= |
| 15 |
if test "x$GCC" != xyes; then |
| 16 |
enable_compile_warnings=no |
| 17 |
fi |
| 18 |
|
| 19 |
warning_flags= |
| 20 |
realsave_CFLAGS="$CFLAGS" |
| 21 |
|
| 22 |
case "$enable_compile_warnings" in |
| 23 |
no) |
| 24 |
warning_flags= |
| 25 |
;; |
| 26 |
minimum) |
| 27 |
warning_flags="-Wall" |
| 28 |
;; |
| 29 |
yes) |
| 30 |
warning_flags="-Wall -Wmissing-prototypes" |
| 31 |
;; |
| 32 |
maximum|error) |
| 33 |
warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith" |
| 34 |
CFLAGS="$warning_flags $CFLAGS" |
| 35 |
for option in -Wno-sign-compare; do |
| 36 |
SAVE_CFLAGS="$CFLAGS" |
| 37 |
CFLAGS="$CFLAGS $option" |
| 38 |
AC_MSG_CHECKING([whether gcc understands $option]) |
| 39 |
AC_TRY_COMPILE([], [], |
| 40 |
has_option=yes, |
| 41 |
has_option=no,) |
| 42 |
CFLAGS="$SAVE_CFLAGS" |
| 43 |
AC_MSG_RESULT($has_option) |
| 44 |
if test $has_option = yes; then |
| 45 |
warning_flags="$warning_flags $option" |
| 46 |
fi |
| 47 |
unset has_option |
| 48 |
unset SAVE_CFLAGS |
| 49 |
done |
| 50 |
unset option |
| 51 |
if test "$enable_compile_warnings" = "error" ; then |
| 52 |
warning_flags="$warning_flags -Werror" |
| 53 |
fi |
| 54 |
;; |
| 55 |
*) |
| 56 |
AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings) |
| 57 |
;; |
| 58 |
esac |
| 59 |
CFLAGS="$realsave_CFLAGS" |
| 60 |
AC_MSG_CHECKING(what warning flags to pass to the C compiler) |
| 61 |
AC_MSG_RESULT($warning_flags) |
| 62 |
|
| 63 |
AC_ARG_ENABLE(iso-c, |
| 64 |
AC_HELP_STRING([--enable-iso-c], |
| 65 |
[Try to warn if code is not ISO C ]),, |
| 66 |
[enable_iso_c=no]) |
| 67 |
|
| 68 |
AC_MSG_CHECKING(what language compliance flags to pass to the C compiler) |
| 69 |
complCFLAGS= |
| 70 |
if test "x$enable_iso_c" != "xno"; then |
| 71 |
if test "x$GCC" = "xyes"; then |
| 72 |
case " $CFLAGS " in |
| 73 |
*[\ \ ]-ansi[\ \ ]*) ;; |
| 74 |
*) complCFLAGS="$complCFLAGS -ansi" ;; |
| 75 |
esac |
| 76 |
case " $CFLAGS " in |
| 77 |
*[\ \ ]-pedantic[\ \ ]*) ;; |
| 78 |
*) complCFLAGS="$complCFLAGS -pedantic" ;; |
| 79 |
esac |
| 80 |
fi |
| 81 |
fi |
| 82 |
AC_MSG_RESULT($complCFLAGS) |
| 83 |
|
| 84 |
WARN_CFLAGS="$warning_flags $complCFLAGS" |
| 85 |
AC_SUBST(WARN_CFLAGS) |
| 86 |
]) |
| 87 |
|
| 88 |
dnl For C++, do basically the same thing. |
| 89 |
|
| 90 |
AC_DEFUN([GNOME_CXX_WARNINGS],[ |
| 91 |
AC_ARG_ENABLE(cxx-warnings, |
| 92 |
AC_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@] |
| 93 |
[Turn on compiler warnings.]),, |
| 94 |
[enable_cxx_warnings="m4_default([$1],[minimum])"]) |
| 95 |
|
| 96 |
AC_MSG_CHECKING(what warning flags to pass to the C++ compiler) |
| 97 |
warnCXXFLAGS= |
| 98 |
if test "x$GXX" != xyes; then |
| 99 |
enable_cxx_warnings=no |
| 100 |
fi |
| 101 |
if test "x$enable_cxx_warnings" != "xno"; then |
| 102 |
if test "x$GXX" = "xyes"; then |
| 103 |
case " $CXXFLAGS " in |
| 104 |
*[\ \ ]-Wall[\ \ ]*) ;; |
| 105 |
*) warnCXXFLAGS="-Wall -Wno-unused" ;; |
| 106 |
esac |
| 107 |
|
| 108 |
## -W is not all that useful. And it cannot be controlled |
| 109 |
## with individual -Wno-xxx flags, unlike -Wall |
| 110 |
if test "x$enable_cxx_warnings" = "xyes"; then |
| 111 |
warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual" |
| 112 |
fi |
| 113 |
fi |
| 114 |
fi |
| 115 |
AC_MSG_RESULT($warnCXXFLAGS) |
| 116 |
|
| 117 |
AC_ARG_ENABLE(iso-cxx, |
| 118 |
AC_HELP_STRING([--enable-iso-cxx], |
| 119 |
[Try to warn if code is not ISO C++ ]),, |
| 120 |
[enable_iso_cxx=no]) |
| 121 |
|
| 122 |
AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler) |
| 123 |
complCXXFLAGS= |
| 124 |
if test "x$enable_iso_cxx" != "xno"; then |
| 125 |
if test "x$GXX" = "xyes"; then |
| 126 |
case " $CXXFLAGS " in |
| 127 |
*[\ \ ]-ansi[\ \ ]*) ;; |
| 128 |
*) complCXXFLAGS="$complCXXFLAGS -ansi" ;; |
| 129 |
esac |
| 130 |
|
| 131 |
case " $CXXFLAGS " in |
| 132 |
*[\ \ ]-pedantic[\ \ ]*) ;; |
| 133 |
*) complCXXFLAGS="$complCXXFLAGS -pedantic" ;; |
| 134 |
esac |
| 135 |
fi |
| 136 |
fi |
| 137 |
AC_MSG_RESULT($complCXXFLAGS) |
| 138 |
|
| 139 |
WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS" |
| 140 |
AC_SUBST(WARN_CXXFLAGS) |
| 141 |
]) |