diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 0000000..c1c3711 --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,3 @@ +ignore: + - catch.hpp + - catch_main.hpp diff --git a/.travis.yml b/.travis.yml index 2cf3b94..ef64ab0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,6 +54,8 @@ matrix: - os: osx osx_image: xcode10 compiler: clang + addons: { homebrew: { packages: ["lcov"] } } + after_success: ./scripts/upload_coverage.sh before_install: - eval "${MATRIX_EVAL}" script: diff --git a/CMakeLists.txt b/CMakeLists.txt index ced404f..ac9384b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,36 @@ cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(kari) +# +# coverage mode +# + +option(KARI_BUILD_WITH_COVERAGE "Build with coverage" OFF) +if(KARI_BUILD_WITH_COVERAGE AND (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")) + add_definitions(-DKARI_BUILD_WITH_COVERAGE) + set(KARI_COVERAGE_FLAGS "--coverage") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${KARI_COVERAGE_FLAGS}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${KARI_COVERAGE_FLAGS}") + set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} ${KARI_COVERAGE_FLAGS}") +endif() + +# +# sanitizer mode +# + +option(KARI_BUILD_WITH_SANITIZER "Build with sanitizer" OFF) +if(KARI_BUILD_WITH_SANITIZER AND (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")) + add_definitions(-DKARI_BUILD_WITH_SANITIZER) + set(KARI_SANITIZER_FLAGS "-fno-omit-frame-pointer -fsanitize=address") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${KARI_SANITIZER_FLAGS}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${KARI_SANITIZER_FLAGS}") + set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} ${KARI_SANITIZER_FLAGS}") +endif() + +# +# tests executable +# + file(GLOB test_sources "*.cpp" "*.hpp") add_executable(${PROJECT_NAME} ${test_sources}) diff --git a/README.md b/README.md index 7ba63cf..5b7af27 100644 --- a/README.md +++ b/README.md @@ -4,22 +4,25 @@ [![travis][badge.travis]][travis] [![appveyor][badge.appveyor]][appveyor] +[![codecov][badge.codecov]][codecov] [![language][badge.language]][language] [![license][badge.license]][license] [![godbolt][badge.godbolt]][godbolt] [![wandbox][badge.wandbox]][wandbox] [![paypal][badge.paypal]][paypal] -[badge.travis]: https://img.shields.io/travis/BlackMATov/kari.hpp/master.svg?logo=travis&style=shield -[badge.appveyor]: https://img.shields.io/appveyor/ci/BlackMATov/kari-hpp/master.svg?logo=appveyor&style=shield -[badge.language]: https://img.shields.io/badge/language-C%2B%2B14-red.svg?style=shield -[badge.license]: https://img.shields.io/badge/license-MIT-blue.svg?style=shield -[badge.godbolt]: https://img.shields.io/badge/try%20it-on%20godbolt-orange.svg?style=shield -[badge.wandbox]: https://img.shields.io/badge/try%20it-on%20wandbox-5cb85c.svg?style=shield -[badge.paypal]: https://img.shields.io/badge/donate-PayPal-orange.svg?logo=paypal&colorA=00457C&style=shield +[badge.travis]: https://img.shields.io/travis/BlackMATov/kari.hpp/master.svg?logo=travis +[badge.appveyor]: https://img.shields.io/appveyor/ci/BlackMATov/kari-hpp/master.svg?logo=appveyor +[badge.codecov]: https://img.shields.io/codecov/c/github/BlackMATov/kari.hpp/master.svg?logo=codecov +[badge.language]: https://img.shields.io/badge/language-C%2B%2B14-red.svg +[badge.license]: https://img.shields.io/badge/license-MIT-blue.svg +[badge.godbolt]: https://img.shields.io/badge/try%20it-on%20godbolt-orange.svg +[badge.wandbox]: https://img.shields.io/badge/try%20it-on%20wandbox-5cb85c.svg +[badge.paypal]: https://img.shields.io/badge/donate-PayPal-orange.svg?logo=paypal&colorA=00457C [travis]: https://travis-ci.org/BlackMATov/kari.hpp [appveyor]: https://ci.appveyor.com/project/BlackMATov/kari-hpp +[codecov]: https://codecov.io/gh/BlackMATov/kari.hpp [language]: https://en.wikipedia.org/wiki/C%2B%2B14 [license]: https://github.com/BlackMATov/kari.hpp/blob/master/LICENSE.md [godbolt]: https://godbolt.org/g/XPBgjY diff --git a/scripts/upload_coverage.sh b/scripts/upload_coverage.sh new file mode 100755 index 0000000..d13a427 --- /dev/null +++ b/scripts/upload_coverage.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +BUILD_DIR=`dirname "$BASH_SOURCE"`/../build +mkdir -p $BUILD_DIR/coverage +cd $BUILD_DIR/coverage +cmake -DCMAKE_BUILD_TYPE=Debug -DECS_BUILD_WITH_COVERAGE=ON ../.. +cmake --build . -- -j8 + +lcov -d . -z +ctest --verbose + +lcov -d . -c -o "coverage.info" +lcov -r "coverage.info" "*/usr/*" "*/catch.hpp" "*/catch_main.cpp" -o "coverage.info" +lcov -l "coverage.info" + +bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"