[network-manager-applet/th/bgo739246_clang: 1/10] build/clang: fix detection of valid warning compiler flags



commit d576ab17b64a9f673195988d0a3c3286ed460f3d
Author: Thomas Haller <thaller redhat com>
Date:   Mon Oct 27 14:39:16 2014 +0100

    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 <thaller redhat com>

 m4/compiler_warnings.m4 |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)
---
diff --git a/m4/compiler_warnings.m4 b/m4/compiler_warnings.m4
index 95ad3fb..2c68df5 100644
--- a/m4/compiler_warnings.m4
+++ b/m4/compiler_warnings.m4
@@ -7,24 +7,44 @@ 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 -Wstrict-prototypes \
                      -Wfloat-equal -Wno-unused-parameter -Wno-sign-compare \
                      -fno-strict-aliasing -Wno-unused-but-set-variable; 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]