diff options
author | Michael Dickens <michael.dickens@ettus.com> | 2017-08-16 14:01:37 -0400 |
---|---|---|
committer | Michael Dickens <michael.dickens@ettus.com> | 2017-08-16 14:01:37 -0400 |
commit | e286742f64981636019cc2cfbead2e510e5ce585 (patch) | |
tree | 6662ad1b1e00aa9e821c4ba70d061ed3612cf3df | |
parent | efcfde0e92e8fae886754436e6ad82d58831d194 (diff) | |
parent | 296be93db3396bef243c4a6dd54061de07f36079 (diff) |
cmake: Fix for CppUnit and C++11
If CppUnit version >= 1.14.0, try to switch to C++11. Otherwise, use C++98 as before. Requires that FindCppUnit return the CppUnit version if found.
-rw-r--r-- | CMakeLists.txt | 60 | ||||
-rw-r--r-- | cmake/Modules/FindCppUnit.cmake | 7 |
2 files changed, 45 insertions, 22 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4de54d674a..b1f35f5b77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,30 +131,33 @@ ELSE() MESSAGE(status "Skipping compiler version check.") ENDIF() -# Configure C++ and C standards -IF(CMAKE_VERSION VERSION_LESS "3.1") - IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") - ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") - ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") - ELSE() - MESSAGE(warning "C++ standard could not be set because compiler is not GNU, Clang or MSVC.") - ENDIF() +# Configure C++ standard if not externally specified (will actually be +# set after CppUnit check below). Use the variable CMAKE_CXX_STANDARD +# since it will actually be used for this purposes starting in CMake 3.1. - IF(CMAKE_C_COMPILER_ID STREQUAL "GNU") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") - ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "Clang") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") - ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") - ELSE() - MESSAGE(warning "C standard could not be set because compiler is not GNU, Clang or MSVC.") - ENDIF() -ELSE() - SET(CMAKE_C_STANDARD 90) +IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") SET(CMAKE_CXX_STANDARD 98) +ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + SET(CMAKE_CXX_STANDARD 98) +ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + SET(CMAKE_CXX_STANDARD 98) +ELSE() + message(warning "C++ standard could not be set because compiler is not GNU, Clang or MSVC.") +ENDIF() + +IF(CMAKE_C_COMPILER_ID STREQUAL "GNU") + SET(CMAKE_C_STANDARD 99) +ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "Clang") + SET(CMAKE_C_STANDARD 99) +ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC") + SET(CMAKE_C_STANDARD 11) +ELSE() + message(warning "C standard could not be set because compiler is not GNU, Clang or MSVC.") +ENDIF() + +# if cmake version is < 3.1, explicitly set C standard to use. +IF(${CMAKE_VERSION} VERSION_LESS "3.1") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c${CMAKE_C_STANDARD}") ENDIF() ######################################################################## @@ -369,6 +372,19 @@ GR_REGISTER_COMPONENT("testing-support" ENABLE_TESTING CPPUNIT_FOUND ) +# check if CppUnit version is 1.14.0 or greater; requires c++11 ... + +if(CPPUNIT_FOUND AND NOT "${CPPUNIT_VERSION}" VERSION_LESS "1.14.0") + message(WARNING "\nWarning: CppUnit version is ${CPPUNIT_VERSION} which requires C++11 for building. Trying to set CMake internally to use C++11 ...") + SET(CMAKE_CXX_STANDARD 11) +endif() + +# if cmake version is < 3.1, explicitly set C++ standard to use. + +if(${CMAKE_VERSION} VERSION_LESS "3.1") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++${CMAKE_CXX_STANDARD}") +endif() + ######################################################################## # Add optional dlls specified in DLL_PATHS ######################################################################## diff --git a/cmake/Modules/FindCppUnit.cmake b/cmake/Modules/FindCppUnit.cmake index f93ade3412..4e9469f9f6 100644 --- a/cmake/Modules/FindCppUnit.cmake +++ b/cmake/Modules/FindCppUnit.cmake @@ -37,3 +37,10 @@ LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS) MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS) + + +# set version to be useable by calling script + +IF(CPPUNIT_FOUND) + set(CPPUNIT_VERSION ${PC_CPPUNIT_VERSION} CACHE INTERNAL "CppUnit Version" FORCE) +ENDIF() |