For that example, I'll use one of my GitHub project arduino-toolbox, Travis-CI and Coveralls but the commands lines will be exactly the same for any other setup.
Since the project is using Cmake, the following commands could go inside an add_custom_target rule in CMakeLists.txt
Adding C++ coverage flag
Add --coverage to your CFLAGS or CXXFLAGS.
With CMake for C++, it gives you:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") # debug, no optimisation
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") # enabling coverage
Replace CMAKE_CXX_FLAGS by CMAKE_C_FLAGS for a C project.
Nothing more is needed. From the GNU GCC man:
--coverage
This option is used to compile and link code instrumented for coverage analysis. The option is a synonym for -fprofile-arcs -ftest-coverage (when compiling) and -lgcov (when linking).
The Travis-CI configuration
At the root of your git repository, in .travis.yml :
install:
- cd ${TRAVIS_BUILD_DIR}
# install latest LCOV (1.9 was failing for me) [1]
- wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz
- tar xf lcov_1.11.orig.tar.gz
- sudo make -C lcov-1.11/ install
# install lcov to coveralls conversion + upload tool
- gem install coveralls-lcov
before_script: (optional: for paranoiacs only)
- cd ${TRAVIS_BUILD_DIR}
- lcov --directory . --zerocounters
script:
- cd ${TRAVIS_BUILD_DIR}
- <your command that compiles> # will generate *.gcno files
- <your command that runs> # will generate *.gcda files
after_success:
- cd ${TRAVIS_BUILD_DIR}
- lcov --directory . --capture --output-file coverage.info # capture coverage info
- lcov --remove coverage.info 'tests/*' '/usr/*' --output-file coverage.info # filter out system and test code
- lcov --list coverage.info # debug before upload
- coveralls-lcov --repo-token ${COVERALLS_TOKEN} coverage.info # uploads to coveralls
My full .travis.yml with support for GTest/GMock and GCC C++11 enable compiler is here.
The value of the environment variable ${COVERALLS_TOKEN} is set in the settings page of your Travis project (https://travis-ci.org/<github-user>/<project-name>/settings) under the 'Environment Variables' section.
Notes
[1]: this should be not needed when travis VM image will update to Ubuntu Utopia.
Update: 13/01/2016
As mentioned in the comment and here, you SHOULD not specify your repo-token on the command line.
coveralls-lcov --repo-token coverage.info
You must NOT specify a repo-token if you're uploading from a public repository using travis-ci.org
Indeed, that's something I fixed but didn't updated the post. Thanks !
https://github.com/ticapix/arduino-toolbox/issues/1
Thank mate, this article helps me a lot!!