diff --git a/modules/code_coverage.cmake b/modules/code_coverage.cmake index 0493a8e..90406e2 100644 --- a/modules/code_coverage.cmake +++ b/modules/code_coverage.cmake @@ -13,30 +13,54 @@ # # autocmake.yml configuration:: # -# docopt: "--coverage Enable code coverage [default: False]." +# docopt: "--coverage Enable code coverage [default: OFF]." # define: "'-DENABLE_CODE_COVERAGE={0}'.format(arguments['--coverage'])" option(ENABLE_CODE_COVERAGE "Enable code coverage" OFF) if(ENABLE_CODE_COVERAGE) - if(DEFINED CMAKE_Fortran_COMPILER_ID) - if(CMAKE_Fortran_COMPILER_ID MATCHES GNU) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fprofile-arcs -ftest-coverage") - endif() - endif() + if(NOT CMAKE_BUILD_TYPE STREQUAL "debug") + message(WARNING "Code coverage analysis results with an optimized (non-Debug) build may be misleading") + endif() - if(DEFINED CMAKE_C_COMPILER_ID) - if(CMAKE_C_COMPILER_ID MATCHES GNU) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") - endif() - endif() + find_program(GCOV_PATH gcov) + if(NOT GCOV_PATH) + message(FATAL_ERROR "Code coverage analysis requires gcov!") + endif() - if(DEFINED CMAKE_CXX_COMPILER_ID) - if(CMAKE_CXX_COMPILER_ID MATCHES GNU) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") - endif() - if(CMAKE_CXX_COMPILER_ID MATCHES Clang) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") - endif() + if(DEFINED CMAKE_Fortran_COMPILER_ID) + if(CMAKE_Fortran_COMPILER_ID MATCHES GNU) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fprofile-arcs -ftest-coverage") + else() + message(FATAL_ERROR "Code coverage analysis requires the GNU Fortran compiler!") endif() + endif() + + if(DEFINED CMAKE_C_COMPILER_ID) + if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + if(CMAKE_C_COMPILER_VERSION VERSION_LESS 3) + message(FATAL_ERROR "Code coverage analysis on Mac OS X requires Clang version 3.0.0 or greater!") + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") + endif() + elseif(CMAKE_C_COMPILER_ID MATCHES GNU) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") + else() + message(FATAL_ERROR "Code coverage analysis requires the GNU C compiler!") + endif() + endif() + + if(DEFINED CMAKE_CXX_COMPILER_ID) + if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3) + message(FATAL_ERROR "Code coverage analysis on Mac OS X requires Clang version 3.0.0 or greater!") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") + endif() + elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") + else() + message(FATAL_ERROR "Code coverage analysis requires the GNU C++ compiler!") + endif() + endif() endif()