diff options
author | Luboš Luňák <l.lunak@suse.cz> | 2013-08-09 18:09:38 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@suse.cz> | 2013-08-09 18:28:32 +0200 |
commit | 63a1212a42bb0c5fa8f1d3d847a5e0fb6126d1c4 (patch) | |
tree | ab66d043ee65aca03197a4589350670071e82016 /configure.ac | |
parent | c3140e23ff7a22e3b4126a2d12ee90dfdcd19ce2 (diff) |
try to ensure not testing GCC version when using Clang
Clang reports itself as GCC 4.2.1 when asked the GCC way, which is about
as good an answer as any, since there's no good mapping between them.
So when testing GCC version, Clang would be usually considered too old,
and therefore the proper way is to do a configure check if possible.
GCC version should be only used for GCC-specific things such as avoiding
a bug in a specific GCC version, and such testing should first check
the compiler is not Clang.
Rename GCCVER to GCC_VERSION and use it throughout the build system
where needed. As it's empty for anything that's not GCC, this should
lead to errors when used incorrectly.
Change-Id: Iea96bbaf5d8ceabefa25be88576eeb4115384937
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/configure.ac b/configure.ac index 8fc59dc5fb9c..199456b77934 100644 --- a/configure.ac +++ b/configure.ac @@ -2925,20 +2925,6 @@ fi AC_SUBST(CROSS_COMPILING) dnl =================================================================== -dnl Test the gcc version -dnl =================================================================== -if test "$GCC" = "yes"; then - AC_MSG_CHECKING([the GCC version]) - _gcc_version=`$CC -dumpversion` - GCCVER=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'` - - AC_MSG_RESULT([gcc $_gcc_version]) - if test "$GCCVER" -lt 0400; then - AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 4.0.0]) - fi -fi - -dnl =================================================================== dnl Is GCC actually Clang? dnl =================================================================== @@ -2973,6 +2959,27 @@ if test "$CCACHE" != "" -a "$COM_GCC_IS_CLANG" = TRUE; then fi fi +dnl =================================================================== +dnl Test the gcc version +dnl =================================================================== +if test "$GCC" = "yes" -a -z "$COM_GCC_IS_CLANG"; then + AC_MSG_CHECKING([the GCC version]) + _gcc_version=`$CC -dumpversion` + GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'` + + AC_MSG_RESULT([gcc $_gcc_version]) + if test "$GCC_VERSION" -lt 0400; then + AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 4.0.0]) + fi +else + # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses. + # GCC version should generally be checked only when handling GCC-specific bugs, for testing + # things like features configure checks should be used, otherwise they may e.g. fail with Clang + # (which reports itself as GCC 4.2.1). + GCC_VERSION= +fi +AC_SUBST(GCC_VERSION) + # =================================================================== # 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 @@ -5596,10 +5603,10 @@ if test "$GCC" = "yes"; then dnl libstdc++-v3/libsupc++/guard.cc for what #ifdefs actually make a dnl difference there. Conservative advice from Jakub Jelinek is to assume dnl it working in GCC >= 4.3, so conservative way to check here is to use - dnl GCCVER for GCC but resort to __GLIBCXX__ corresponding to libstdc++ + dnl GCC_VERSION for GCC but resort to __GLIBCXX__ corresponding to libstdc++ dnl shipped with GCC 4.3.0 (cf. <http://gcc.gnu.org/onlinedocs/libstdc++/ dnl manual/abi.html#abi.versioning.history>; 4.3.0 is 20080306, 4.2.4 is - dnl 20080519, 4.3.1 is 20080606) for Clang (for which GCCVER is notoriously + dnl 20080519, 4.3.1 is 20080606) for Clang (for which GCC_VERSION is notoriously dnl "too old"): if test "$_os" != Darwin -a "$_os" != Android; then if test "$COM_GCC_IS_CLANG" = TRUE; then @@ -5611,7 +5618,7 @@ if test "$GCC" = "yes"; then #endif ]])],[HAVE_THREADSAFE_STATICS=TRUE],[]) AC_LANG_POP([C++]) - elif test "${GCCVER?}" -ge 0403; then + elif test "${GCC_VERSION?}" -ge 0403; then HAVE_THREADSAFE_STATICS=TRUE fi fi |