diff --git a/CMakeLists.txt b/CMakeLists.txt index 82de25bc1..91d8b211f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,35 @@ set (PROJECT_VERSION "2.4.2") OPTION(USE_GNUTLS "Build gnutls support." ON) message ("CMAKE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +include (CheckCXXCompilerFlag) + +# NOTE: If we are to actually use C++11 features, we should either require +# a compiler that supports the -std=c++11 flag or check for the +# features used. +# Relying on -std=c++0x or even -std=gnu++0x is highly volatile. + +CHECK_CXX_COMPILER_FLAG("-std=c++11" _HAS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" _HAS_CXX0X) +CHECK_CXX_COMPILER_FLAG("-std=gnu++0x" _HAS_GNU0X) + +if (_HAS_CXX11) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif (_HAS_CXX0X) + message (WARNING "Enabling -std=c++0x draft compile flag. Please try using an up to date compiler if you run into any problems!") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +elseif (_HAS_GNU0X) + message (WARNING "Enabling -std=gnu++0x draft compile flag. You're probably in for a bad time, please try using an up to date compiler!") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") +else (_HAS_CXX11) + message (FATAL_ERROR "C++11 support missing. Try upgrading your C++ compiler! If you have a good reason for using an outdated compiler, please let us know at support@taskwarrior.org!") +endif (_HAS_CXX11) + if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set (LINUX true) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set (DARWIN true) - set (CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") + set (CMAKE_CXX_FLAGS "-stdlib=libc++") elseif (${CMAKE_SYSTEM_NAME} MATCHES "kFreeBSD") set (KFREEBSD true) elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") @@ -35,7 +58,6 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "GNU") set (GNUHURD true) elseif (${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN") set (CYGWIN true) - set (CMAKE_CXX_FLAGS "-std=gnu++0x") else (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set (UNKNOWN true) endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")