diff --git a/m4/compiler_warnings.m4 b/m4/compiler_warnings.m4 index 357ff0e7e0..0512ba1e0a 100644 --- a/m4/compiler_warnings.m4 +++ b/m4/compiler_warnings.m4 @@ -7,6 +7,23 @@ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then AC_MSG_RESULT(yes) CFLAGS="-Wall -std=gnu89 $CFLAGS" + dnl clang only warns about unknown warnings, unless + dnl called with "-Werror=unknown-warning-option" + dnl Test if the compiler supports that, and if it does + dnl attach it to the CFLAGS. + SAVE_CFLAGS="$CFLAGS" + EXTRA_CFLAGS="-Werror=unknown-warning-option" + CFLAGS="$SAVE_CFLAGS $EXTRA_CFLAGS" + AC_TRY_COMPILE([], [], + has_option=yes, + has_option=no,) + if test $has_option = no; then + EXTRA_CFLAGS= + fi + CFLAGS="$SAVE_CFLAGS" + unset has_option + unset SAVE_CFLAGS + for option in -Wshadow -Wmissing-declarations -Wmissing-prototypes \ -Wdeclaration-after-statement -Wformat-security \ -Wfloat-equal -Wno-unused-parameter -Wno-sign-compare \ @@ -15,19 +32,22 @@ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then -Wpointer-arith -Winit-self \ -Wmissing-include-dirs -Waggregate-return; do SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $option" + CFLAGS="$CFLAGS $EXTRA_CFLAGS $option" AC_MSG_CHECKING([whether gcc understands $option]) AC_TRY_COMPILE([], [], has_option=yes, has_option=no,) if test $has_option = no; then CFLAGS="$SAVE_CFLAGS" + else + CFLAGS="$SAVE_CFLAGS $option" fi AC_MSG_RESULT($has_option) unset has_option unset SAVE_CFLAGS done unset option + unset EXTRA_CFLAGS if test "x$set_more_warnings" = xerror; then CFLAGS="$CFLAGS -Werror" fi