1# Coverage
2CONFIG(coverage) {
3    LIBS += -lgcov
4    QMAKE_CXXFLAGS += --coverage
5    QMAKE_LDFLAGS += --coverage
6
7    QMAKE_EXTRA_TARGETS += coverage cov
8    QMAKE_EXTRA_TARGETS += clean-gcno clean-gcda coverage-html \
9        generate-coverage-html clean-coverage-html coverage-gcovr \
10        generate-gcovr generate-coverage-gcovr clean-coverage-gcovr
11
12    clean-gcno.commands = \
13        "@echo Removing old coverage instrumentation"; \
14        "find -name '*.gcno' -print | xargs -r rm"
15
16    clean-gcda.commands = \
17        "@echo Removing old coverage results"; \
18        "find -name '*.gcda' -print | xargs -r rm"
19
20    coverage-html.depends = clean-gcda check generate-coverage-html
21
22    generate-coverage-html.commands = \
23        "@echo Collecting coverage data"; \
24        "lcov --directory $${TOP_SRC_DIR} --capture --output-file coverage.info --no-checksum --compat-libtool"; \
25        "lcov --extract coverage.info \"*/src/*.cpp\" -o coverage.info"; \
26        "lcov --remove coverage.info \"moc_*.cpp\" -o coverage.info"; \
27        "LANG=C genhtml --prefix $${TOP_SRC_DIR} --output-directory coverage-html --title \"Code Coverage\" --legend --show-details coverage.info"
28
29    clean-coverage-html.depends = clean-gcda
30    clean-coverage-html.commands = \
31        "lcov --directory $${TOP_SRC_DIR} -z"; \
32        "rm -rf coverage.info coverage-html"
33
34    coverage-gcovr.depends = clean-gcda check generate-coverage-gcovr
35
36    generate-coverage-gcovr.commands = \
37        "@echo Generating coverage GCOVR report"; \
38        "gcovr -x -r $${TOP_SRC_DIR} -o $${TOP_SRC_DIR}/coverage.xml -e \".*/moc_.*\" -e \"tests/.*\" -e \".*\\.h\""
39
40    clean-coverage-gcovr.depends = clean-gcda
41    clean-coverage-gcovr.commands = \
42        "rm -rf $${TOP_SRC_DIR}/coverage.xml"
43
44    QMAKE_CLEAN += *.gcda *.gcno coverage.info coverage.xml
45}
46