On Fri, Jun 21, 2013 at 10:03:21AM -0400, Ed Maste wrote: > In clang's attempt to be GCC compatible it ignores, but does not fail > on, unknown -W options. Configure then ends up added the option to > WARNING_FLAGS, and the warning is then emitted for every file > compiled. > > From config.log: > > configure:7388: checking whether clang accepts -Wno-override-init > configure:7406: clang -c -g -O2 -Wno-override-init conftest.c >&5 > clang: warning: unknown warning option '-Wno-override-init'; did you > mean '-Wno-over-aligned'? > warning: unknown warning option '-Wno-override-init'; did you mean > '-Wno-over-aligned'? [-Wunknown-warning-option] > 1 warning generated. > configure:7406: $? = 0 > > With a quick search I didn't find a canonical way to test this in > autoconf, although adding -Werror does change the return value to 1 in > this case.
Here's an attempt. It works with my local clang, which is: blp@blp:~/nicira/ovs/_build(0)$ clang --version Debian clang version 3.0-6.2 (tags/RELEASE_30/final) (based on LLVM 3.0) Target: i386-pc-linux-gnu Thread model: posix blp@blp:~/nicira/ovs/_build(0)$ --8<--------------------------cut here-------------------------->8-- From: Ben Pfaff <b...@nicira.com> Date: Fri, 21 Jun 2013 09:03:44 -0700 Subject: [PATCH] acinclude: Improve detection of not-understood compiler options with clang. By default, clang warns about but does not fail on unknown -W options. This made configure add the option to WARNING_FLAGS, which caused the warning about not-understood warnings to be emitted for every file compiled. In combination with -Werror, clang does fail on unknown -W options. This commit adds -Werror during configure's warning tests, which should cause the not-understood warnings to be detected that way. Reported-by: Ed Maste <ema...@freebsd.org> Signed-off-by: Ben Pfaff <b...@nicira.com> --- acinclude.m4 | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index eadc9a7..717c681 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -362,15 +362,15 @@ dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. -dnl OVS_CHECK_CC_OPTION([OPTION], [ACTION-IF-ACCEPTED], [ACTION-IF-REJECTED]) -dnl Check whether the given C compiler OPTION is accepted. -dnl If so, execute ACTION-IF-ACCEPTED, otherwise ACTION-IF-REJECTED. -AC_DEFUN([OVS_CHECK_CC_OPTION], -[ +AC_DEFUN([_OVS_CHECK_CC_OPTION], [dnl m4_define([ovs_cv_name], [ovs_cv_[]m4_translit([$1], [-], [_])])dnl AC_CACHE_CHECK([whether $CC accepts $1], [ovs_cv_name], [ovs_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $1" + dnl Include -Werror in the compiler options, because without -Werror + dnl clang's GCC-compatible compiler driver does not return a failure + dnl exit status even though it complains about options it does not + dnl understand. + CFLAGS="$CFLAGS $WERROR $1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,)], [ovs_cv_name[]=yes], [ovs_cv_name[]=no]) CFLAGS="$ovs_save_CFLAGS"]) if test $ovs_cv_name = yes; then @@ -380,6 +380,21 @@ AC_DEFUN([OVS_CHECK_CC_OPTION], fi ]) +dnl OVS_CHECK_WERROR +dnl +dnl Check whether the C compiler accepts -Werror. +dnl Sets $WERROR to "-Werror", if so, and otherwise to the empty string. +AC_DEFUN([OVS_CHECK_WERROR], + [WERROR= + _OVS_CHECK_CC_OPTION([-Werror], [WERROR=-Werror])]) + +dnl OVS_CHECK_CC_OPTION([OPTION], [ACTION-IF-ACCEPTED], [ACTION-IF-REJECTED]) +dnl Check whether the given C compiler OPTION is accepted. +dnl If so, execute ACTION-IF-ACCEPTED, otherwise ACTION-IF-REJECTED. +AC_DEFUN([OVS_CHECK_CC_OPTION], + [AC_REQUIRE([OVS_CHECK_WERROR]) + _OVS_CHECK_CC_OPTION([$1], [$2], [$3])]) + dnl OVS_ENABLE_OPTION([OPTION]) dnl Check whether the given C compiler OPTION is accepted. dnl If so, add it to WARNING_FLAGS. -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev