[ovs-dev] autoconf test OVS_ENABLE_OPTION fails to detect options unsupported by clang

Ben Pfaff blp at nicira.com
Fri Jun 21 16:05:11 UTC 2013


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 at 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 at blp:~/nicira/ovs/_build(0)$ 

--8<--------------------------cut here-------------------------->8--

From: Ben Pfaff <blp at 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 <emaste at freebsd.org>
Signed-off-by: Ben Pfaff <blp at 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




More information about the dev mailing list