From 2a65d7b55b0a2a9ece51d0d60044169ea8f12083 Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Wed, 9 Sep 2015 17:13:12 +0200 Subject: [PATCH] cmake: add coveralls support --- .travis.yml | 24 ++++++++++++++++++------ CMakeLists.txt | 13 ++++++++----- src/CMakeLists.txt | 7 +++++++ tests/CMakeLists.txt | 7 +++++++ 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index c019434..764bdaf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,12 +10,20 @@ compiler: env: matrix: - - TRAVIS_BUILD_TYPE=Debug TRAVIS_SHARED_LIBS=OFF TRAVIS_STRICT_C90=OFF TRAVIS_MAKE_CHECK=ON - - TRAVIS_BUILD_TYPE=Debug TRAVIS_SHARED_LIBS=ON TRAVIS_STRICT_C90=ON TRAVIS_MAKE_CHECK=ON - - TRAVIS_BUILD_TYPE=Release TRAVIS_SHARED_LIBS=OFF TRAVIS_STRICT_C90=OFF TRAVIS_MAKE_CHECK=OFF + - TRAVIS_BUILD_TYPE=Debug TRAVIS_SHARED_LIBS=OFF TRAVIS_STRICT_C90=OFF TRAVIS_MAKE_CHECK=ON TRAVIS_COVERALLS=ON + - TRAVIS_BUILD_TYPE=Debug TRAVIS_SHARED_LIBS=ON TRAVIS_STRICT_C90=ON TRAVIS_MAKE_CHECK=ON TRAVIS_COVERALLS=OFF + - TRAVIS_BUILD_TYPE=Release TRAVIS_SHARED_LIBS=OFF TRAVIS_STRICT_C90=OFF TRAVIS_MAKE_CHECK=OFF TRAVIS_COVERALLS=OFF script: - cmake --version + - if [ "${TRAVIS_COVERALLS}" = "ON" ] \ + && [ "${TRAVIS_OS_NAME}" = "linux" ] \ + && [ "${CC}" = "gcc" ]; + then + pip install cpp-coveralls; + else + export TRAVIS_COVERALLS=OFF; + fi - mkdir build && cd build - cmake .. -G "Unix Makefiles" -DCMAKE_DEBUG_POSTFIX=_d @@ -23,10 +31,14 @@ script: -DGMIO_BUILD_SHARED_LIBS=$TRAVIS_SHARED_LIBS -DGMIO_BUILD_STRICT_C90=$TRAVIS_STRICT_C90 -DGMIO_BUILD_TESTS_FAKE_SUPPORT=ON + -DGMIO_BUILD_TESTS_COVERALLS=ON -DCMAKE_INSTALL_PREFIX=../install - make -j4 - - if [ "${TRAVIS_MAKE_CHECK}" = "ON" ]; then - make VERBOSE=1 check; - fi + - if [ "${TRAVIS_MAKE_CHECK}" = "ON" ]; then + make check; + fi - make install + - if [ "${TRAVIS_COVERALLS}" = "ON" ]; then + coveralls --gcov-options '\-lp'; + fi diff --git a/CMakeLists.txt b/CMakeLists.txt index b798143..b358bb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,11 @@ set(GMIO_VERSION_PATCH 0) set(GMIO_VERSION ${GMIO_VERSION_MAJOR}.${GMIO_VERSION_MINOR}.${GMIO_VERSION_PATCH}) +# Detect Clang +if (CMAKE_C_COMPILER MATCHES ".*clang") + set(CMAKE_COMPILER_IS_CLANG 1) +endif () + # Options option(GMIO_BUILD_STRICT_C90 "Build gmio library(and tests) with strict conformance to C90 standard" OFF) option(GMIO_BUILD_SHARED_LIBS "Build gmio as a shared library (DLL)" OFF) @@ -39,11 +44,9 @@ cmake_dependent_option( GMIO_BUILD_BENCHMARK_OPENCASCADE "Build benchmark for OpenCascade" ON "GMIO_BUILD_BENCHMARKS" OFF) option(GMIO_BUILD_TESTS_FAKE_SUPPORT "Build tests/fake_support target" OFF) - -# Detect Clang -if (CMAKE_C_COMPILER MATCHES ".*clang") - set(CMAKE_COMPILER_IS_CLANG 1) -endif () +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) + option(GMIO_BUILD_TESTS_COVERAGE "Instrument testing code with code coverage" OFF) +endif() # Find bit size of the target architecture math(EXPR GMIO_TARGET_ARCH_BIT_SIZE "8 * ${CMAKE_SIZEOF_VOID_P}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a311ef6..7a222b0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,6 +13,13 @@ ## "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html". ############################################################################# +if(GMIO_BUILD_TESTS_COVERAGE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -Wall -W -fprofile-arcs -ftest-coverage") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -Wall -W -fprofile-arcs -ftest-coverage") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage") + link_libraries(gcov) +endif() + # Add core source files file(GLOB GMIO_SRC_FILES gmio_core/* gmio_core/internal/*) set(GMIO_SRC_FILES ${GMIO_SRC_FILES}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dad4486..dc62a3a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -23,6 +23,13 @@ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) include_directories(${CMAKE_BINARY_DIR}/src/gmio_core) # For generated cmake headers +if(GMIO_BUILD_TESTS_COVERAGE) + set(CMAKE_CXX_FLAGS "-g -O0 -Wall -W -fprofile-arcs -ftest-coverage") + set(CMAKE_C_FLAGS "-g -O0 -Wall -W -fprofile-arcs -ftest-coverage") + set(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage") + link_libraries(gcov) +endif() + # test_internal add_executable( test_internal