diff options
author | Luboš Luňák <l.lunak@suse.cz> | 2013-06-19 09:38:38 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@suse.cz> | 2013-06-19 09:38:38 +0200 |
commit | b7e1aeee11d1405babce1855a4bc67d8c9e4ade4 (patch) | |
tree | 1ec25ce2daea502224a21c62e1d14cbd4b669cb4 /configure.ac | |
parent | 5b14a9bef9a8589524baa7405a569c899b368d65 (diff) |
use C++11 also with MSVC
MSVC supports (a subset of) C++11 without any special switch, so always
"enable" support for it and use whatever features are detected by configure
checks
Change-Id: Ic03be5a1aabe7d20cf763bae6d26a7043a51f287
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 122 |
1 files changed, 64 insertions, 58 deletions
diff --git a/configure.ac b/configure.ac index 55467f35c849..3f36bcae67c8 100644 --- a/configure.ac +++ b/configure.ac @@ -5596,7 +5596,13 @@ dnl =================================================================== CXXFLAGS_CXX11= HAVE_CXX11= -if test "$GCC" = "yes"; then +if test "$COM" = MSC; then + AC_MSG_CHECKING([whether $CXX supports C++11]) + AC_MSG_RESULT(yes) + # MSVC supports (a subset of) CXX11 without any switch + HAVE_CXX11=TRUE + CXXFLAGS_CXX11= +elif test "$GCC" = "yes"; then CXXFLAGS_CXX11= AC_MSG_CHECKING([whether $CXX supports C++11]) if test "$CPP_LIBRARY" = LIBCPP -a $_os = Darwin; then @@ -5622,11 +5628,12 @@ if test "$GCC" = "yes"; then AC_MSG_RESULT(no) fi fi +fi - if test "$HAVE_CXX11" = TRUE; then - AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage]) - AC_LANG_PUSH([C++]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +if test "$HAVE_CXX11" = TRUE; then + AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage]) + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <list> #if !defined(__GLIBCXX__) /* ok */ @@ -5637,19 +5644,19 @@ if test "$GCC" = "yes"; then #else abi broken #endif - ]])], [AC_MSG_RESULT(no, ok)], - [AC_MSG_RESULT(yes, disabling C++11) - HAVE_CXX11=]) - AC_LANG_POP([C++]) - fi + ]])], [AC_MSG_RESULT(no, ok)], + [AC_MSG_RESULT(yes, disabling C++11) + HAVE_CXX11=]) + AC_LANG_POP([C++]) +fi - if test "$HAVE_CXX11" = TRUE; then - AC_MSG_CHECKING([whether $CXX supports C++11 without Language Defect 757]) - save_CXXFLAGS=$CXXFLAGS - CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11" - AC_LANG_PUSH([C++]) +if test "$HAVE_CXX11" = TRUE; then + AC_MSG_CHECKING([whether $CXX supports C++11 without Language Defect 757]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11" + AC_LANG_PUSH([C++]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stddef.h> template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S]; @@ -5678,61 +5685,60 @@ return !(i != 0 && j != 0); [ AC_MSG_RESULT(no) HAVE_CXX11= ]) - AC_LANG_POP([C++]) - CXXFLAGS=$save_CXXFLAGS - fi + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS +fi - if test "$HAVE_CXX11" = TRUE; then - AC_MSG_CHECKING([whether $CXX supports C++11 without __float128 compile error]) - save_CXXFLAGS=$CXXFLAGS - CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11" - AC_LANG_PUSH([C++]) +if test "$HAVE_CXX11" = TRUE; then + AC_MSG_CHECKING([whether $CXX supports C++11 without __float128 compile error]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11" + AC_LANG_PUSH([C++]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <vector> // some Clang fail when compiling against libstdc++ headers with -std=gnu++0x // (__float128) ]]) - ],[ AC_MSG_RESULT(yes) ], - [ - AC_MSG_RESULT(no) - # The only reason why libstdc++ headers fail with Clang in C++11 mode is because - # they use the __float128 type that Clang doesn't know (libstdc++ checks whether - # __float128 is available during its build, but it's usually built using GCC, - # and so c++config.h hardcodes __float128 being supported). As the only place - # where __float128 is actually used is in a template specialization, - # -D__float128=void will avoid the problem there while still causing a problem - # if somebody actually uses the type. - AC_MSG_CHECKING([whether -D__float128=void workaround helps]) - CXXFLAGS="$CXXFLAGS -D__float128=void" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + ],[ AC_MSG_RESULT(yes) ], + [ + AC_MSG_RESULT(no) + # The only reason why libstdc++ headers fail with Clang in C++11 mode is because + # they use the __float128 type that Clang doesn't know (libstdc++ checks whether + # __float128 is available during its build, but it's usually built using GCC, + # and so c++config.h hardcodes __float128 being supported). As the only place + # where __float128 is actually used is in a template specialization, + # -D__float128=void will avoid the problem there while still causing a problem + # if somebody actually uses the type. + AC_MSG_CHECKING([whether -D__float128=void workaround helps]) + CXXFLAGS="$CXXFLAGS -D__float128=void" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <vector> // some Clang fail when compiling against libstdc++ headers with -std=gnu++0x // (__float128) ]]) - ], - [ - AC_MSG_RESULT(yes) - CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -D__float128=void" - ], - [ - AC_MSG_RESULT(no) - HAVE_CXX11= - ]) + ], + [ + AC_MSG_RESULT(yes) + CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -D__float128=void" + ], + [ + AC_MSG_RESULT(no) + HAVE_CXX11= ]) + ]) - AC_LANG_POP([C++]) - CXXFLAGS=$save_CXXFLAGS - fi + AC_LANG_POP([C++]) + CXXFLAGS=$save_CXXFLAGS +fi - if test "$HAVE_CXX11" = "TRUE"; then - AC_DEFINE(HAVE_CXX11) - elif test -n "$CXXFLAGS_CXX11"; then - AC_MSG_NOTICE([Disabling C++11 support]) - CXXFLAGS_CXX11= - elif test "$CPP_LIBRARY" = LIBCPP -a $_os = Darwin; then - AC_MSG_ERROR([Selected libc++ but C++11 support broken]) - fi +if test "$HAVE_CXX11" = "TRUE"; then + AC_DEFINE(HAVE_CXX11) +elif test -n "$CXXFLAGS_CXX11"; then + AC_MSG_NOTICE([Disabling C++11 support]) + CXXFLAGS_CXX11= +elif test "$CPP_LIBRARY" = LIBCPP -a $_os = Darwin; then + AC_MSG_ERROR([Selected libc++ but C++11 support broken]) fi AC_SUBST(CXXFLAGS_CXX11) |