diff options
author | Tor Lillqvist <tml@iki.fi> | 2012-04-24 22:25:20 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2012-04-24 23:56:50 +0300 |
commit | f024b6804d216c4eee2ebd09074eff2ca1984997 (patch) | |
tree | f55a2f52fef2fa2ededbf6f08fc3672a69125d1f /configure.in | |
parent | 98e12520b104ff3b7d2d35a4ba9bd96ee7fa4e72 (diff) |
Work around Clang 3.1's "argument unused during compilation" non-warning
For unrecognized options, Clang 3.1 (and ealier?) prints out a
warning, but it isn't a real warning as it doesn't cause a compilation
error with -Werror, so it is impossible to find out reliably if an
option is supported or not. So hardcode the information we know.
Diffstat (limited to 'configure.in')
-rw-r--r-- | configure.in | 105 |
1 files changed, 72 insertions, 33 deletions
diff --git a/configure.in b/configure.in index de31aecf3526..5618f1e46e3e 100644 --- a/configure.in +++ b/configure.in @@ -2512,7 +2512,7 @@ dnl =================================================================== dnl Test the gcc version dnl =================================================================== if test "$GCC" = "yes"; then - AC_MSG_CHECKING([the GNU C compiler version]) + AC_MSG_CHECKING([the GCC version]) _gcc_version=`$CC -dumpversion` _gcc_major=`echo $_gcc_version | $AWK -F. '{ print \$1 }'` GCCVER=`echo $_gcc_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'` @@ -2537,13 +2537,10 @@ if test "$GCC" = "yes"; then fi dnl =================================================================== -dnl Is it actually Clang? +dnl Is GCC actually Clang? dnl =================================================================== COM_GCC_IS_CLANG= -HAVE_GCC_GGDB2= -HAVE_GCC_FINLINE_LIMIT= -HAVE_GCC_FNO_INLINE= if test "$GCC" = "yes"; then AC_MSG_CHECKING([whether GCC is actually Clang]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ @@ -2556,15 +2553,37 @@ if test "$GCC" = "yes"; then COM_GCC_IS_CLANG=TRUE], [AC_MSG_RESULT([no])]) - # check various GCC options that Clang does not support now but maybe - # will somewhen in the future, check them even for GCC, so that the flags - # are set + if test "$COM_GCC_IS_CLANG" = TRUE; then + AC_MSG_CHECKING([the Clang version]) + clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC -E -P -` + CLANG_FULL_VERSION=`echo __clang_version__ | $CC -E -P -` + CLANGVER=`echo $clang_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'` + AC_MSG_RESULT([Clang $CLANG_FULL_VERSION, $CLANGVER]) + fi +fi +AC_SUBST(COM_GCC_IS_CLANG) + +# =================================================================== +# check various GCC options that Clang does not support now but maybe +# will somewhen in the future, check them even for GCC, so that the +# flags are set +# =================================================================== +HAVE_GCC_GGDB2= +HAVE_GCC_FINLINE_LIMIT= +HAVE_GCC_FNO_INLINE= +if test "$GCC" = "yes"; then AC_MSG_CHECKING([whether $CC supports -ggdb2]) - save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -Werror -ggdb2" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[]) - CFLAGS=$save_CFLAGS + if test -n "$CLANGVER" -a "$CLANGVER" -le 30100; then + # Option just ignored and silly warning that isn't a real + # warning printed + : + else + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -ggdb2" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[]) + CFLAGS=$save_CFLAGS + fi if test "$HAVE_GCC_GGDB2" = "TRUE"; then AC_MSG_RESULT([yes]) else @@ -2572,10 +2591,15 @@ if test "$GCC" = "yes"; then fi AC_MSG_CHECKING([whether $CC supports -finline-limit=0]) - save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -Werror -finline-limit=0" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FINLINE_LIMIT=TRUE ],[]) - CFLAGS=$save_CFLAGS + if test -n "$CLANGVER" -a "$CLANGVER" -le 30100; then + # As above + : + else + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -finline-limit=0" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FINLINE_LIMIT=TRUE ],[]) + CFLAGS=$save_CFLAGS + fi if test "$HAVE_GCC_FINLINE_LIMIT" = "TRUE"; then AC_MSG_RESULT([yes]) else @@ -2583,17 +2607,21 @@ if test "$GCC" = "yes"; then fi AC_MSG_CHECKING([whether $CC supports -fno-inline]) - save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -Werror -fno-inline" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_INLINE=TRUE ],[]) - CFLAGS=$save_CFLAGS + if test -n "$CLANGVER" -a "$CLANGVER" -le 30100; then + # Ditto + : + else + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -fno-inline" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_INLINE=TRUE ],[]) + CFLAGS=$save_CFLAGS + fi if test "$HAVE_GCC_FNO_INLINE" = "TRUE"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi -AC_SUBST(COM_GCC_IS_CLANG) AC_SUBST(HAVE_GCC_GGDB2) AC_SUBST(HAVE_GCC_FINLINE_LIMIT) AC_SUBST(HAVE_GCC_FNO_INLINE) @@ -4747,12 +4775,18 @@ HAVE_GCC_FNO_DEFAULT_INLINE= HAVE_GCC_FNO_ENFORCE_EH_SPECS= if test "$GCC" = "yes"; then AC_MSG_CHECKING([whether $CXX supports -fno-default-inline]) - AC_LANG_PUSH([C++]) - save_CXXFLAGS=$CXXFLAGS - CXXFLAGS="$CFLAGS -Werror -fno-default-inline" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_DEFAULT_INLINE=TRUE ],[]) - CXXFLAGS=$save_CXXFLAGS - AC_LANG_POP([C++]) + if test -n "$CLANGVER" -a "$CLANGVER" -le 30100; then + # Option just ignored and silly warning that isn't a real + # warning printed + : + else + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CFLAGS -Werror -fno-default-inline" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_DEFAULT_INLINE=TRUE ],[]) + CXXFLAGS=$save_CXXFLAGS + AC_LANG_POP([C++]) + fi if test "$HAVE_GCC_FNO_DEFAULT_INLINE" = "TRUE"; then AC_MSG_RESULT([yes]) else @@ -4760,12 +4794,17 @@ if test "$GCC" = "yes"; then fi AC_MSG_CHECKING([whether $CXX supports -fno-enforce-eh-specs]) - AC_LANG_PUSH([C++]) - save_CXXFLAGS=$CXXFLAGS - CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[]) - CXXFLAGS=$save_CXXFLAGS - AC_LANG_POP([C++]) + if test -n "$CLANGVER" -a "$CLANGVER" -le 30100; then + # As above + : + else + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[]) + CXXFLAGS=$save_CXXFLAGS + AC_LANG_POP([C++]) + fi if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then AC_MSG_RESULT([yes]) else |