include(CheckIncludeFile)
include(CheckCSourceCompiles)
include(CheckCSourceRuns)
+include(CheckCCompilerFlag)
include(CMakeDependentOption)
include(FeatureSummary)
# Set code coverage compiler flags
if(WITH_CODE_COVERAGE)
- if(CMAKE_C_COMPILER_ID MATCHES "Clang")
+ set(CMAKE_REQUIRED_LINK_OPTIONS -coverage)
+ check_c_compiler_flag(-coverage HAVE_COVERAGE)
+ set(CMAKE_REQUIRED_LINK_OPTIONS)
+ if(HAVE_COVERAGE)
set(CMAKE_C_FLAGS "-O0 ${CMAKE_C_FLAGS} -coverage")
- elseif(__GNUC__)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -coverage")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -coverage")
+ else()
# Some versions of GCC don't support -coverage shorthand
- set(CMAKE_C_FLAGS "-O0 ${CMAKE_C_FLAGS} -ftest-coverage -fprofile-arcs -fprofile-values")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov -fprofile-arcs")
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lgcov -fprofile-arcs")
+ set(CMAKE_REQUIRED_LINK_OPTIONS -lgcov -fprofile-arcs)
+ check_c_compiler_flag("-ftest-coverage -fprofile-arcs -fprofile-values" HAVE_TEST_COVERAGE)
+ if(HAVE_TEST_COVERAGE)
+ set(CMAKE_C_FLAGS "-O0 ${CMAKE_C_FLAGS} -ftest-coverage -fprofile-arcs -fprofile-values")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov -fprofile-arcs")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lgcov -fprofile-arcs")
+ else()
+ message(WARNING "Compiler does not support code coverage")
+ endif()
+ set(CMAKE_REQUIRED_LINK_OPTIONS)
endif()
endif()