From 5009f2c7a3dc4ba6d197cbe62029fd2a0c78ab8a Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Sat, 26 Jul 2014 20:11:31 +0200 Subject: [PATCH] build/clang: fix detection of valid warning compiler flags clang does not exit with error when it is called with an unrecognized (warning) option. Instead it just prints a warning that makes the configure script believe the warning is supported. Later, during build we might pass -Werror, which causes clang to fail due to unrecognized arguments. Fix the script to detect compiler warnings by passing '-Werror=unknown-warning-option', which lets clang fail too. Signed-off-by: Thomas Haller --- m4/compiler_warnings.m4 | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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