Skip to content

Commit 50872d0

Browse files
committed
Review and extend to examples
1 parent 34d605f commit 50872d0

File tree

9 files changed

+109
-68
lines changed

9 files changed

+109
-68
lines changed

CMakeLists.txt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ if (${CMAKE_VERSION} VERSION_GREATER "3.2")
3131
endif()
3232

3333
# Include custom cmake modules
34+
include(cmake/Coverage.cmake)
35+
include(cmake/GenerateTemplateExportHeader.cmake)
3436
include(cmake/GetGitRevisionDescription.cmake)
3537
include(cmake/HealthCheck.cmake)
36-
include(cmake/GenerateTemplateExportHeader.cmake)
37-
include(cmake/Coverage.cmake)
3838

3939

4040
#
@@ -71,11 +71,12 @@ string(TOUPPER ${META_PROJECT_ID} META_PROJECT_ID)
7171
#
7272

7373
# Project options
74-
option(BUILD_SHARED_LIBS "Build shared instead of static libraries." ON)
75-
option(OPTION_SELF_CONTAINED "Create a self-contained install with all dependencies." OFF)
76-
option(OPTION_BUILD_TESTS "Build tests." ON)
77-
option(OPTION_BUILD_DOCS "Build documentation." OFF)
78-
option(OPTION_BUILD_EXAMPLES "Build examples." OFF)
74+
option(BUILD_SHARED_LIBS "Build shared instead of static libraries." ON)
75+
option(OPTION_SELF_CONTAINED "Create a self-contained install with all dependencies." OFF)
76+
option(OPTION_BUILD_TESTS "Build tests." ON)
77+
option(OPTION_BUILD_DOCS "Build documentation." OFF)
78+
option(OPTION_BUILD_EXAMPLES "Build examples." OFF)
79+
option(OPTION_ENABLE_COVERAGE "Add coverage information." OFF)
7980

8081

8182
#
@@ -98,13 +99,6 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
9899
file(WRITE "${PROJECT_BINARY_DIR}/VERSION" "${META_NAME_VERSION}")
99100

100101

101-
#
102-
# Compiler settings and options
103-
#
104-
105-
include(cmake/CompileOptions.cmake)
106-
107-
108102
#
109103
# Project Health Check Setup
110104
#
@@ -115,7 +109,14 @@ add_check_template_target(${META_CMAKE_INIT_SHA})
115109
# Configure health check tools
116110
enable_cppcheck(ON)
117111
enable_clang_tidy(ON)
118-
enable_coverage(ON)
112+
enable_coverage(${OPTION_ENABLE_COVERAGE})
113+
114+
115+
#
116+
# Compiler settings and options
117+
#
118+
119+
include(cmake/CompileOptions.cmake)
119120

120121

121122
#

cmake/CompileOptions.cmake

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCH
131131
$<$<VERSION_LESS:${CMAKE_VERSION},3.1>:
132132
-std=c++11
133133
>
134+
135+
$<$<BOOL:${OPTION_COVERAGE_ENABLED}>:
136+
-fprofile-arcs
137+
-ftest-coverage
138+
>
134139
)
135140
endif ()
136141

@@ -144,6 +149,15 @@ set(DEFAULT_LINKER_OPTIONS)
144149
# Use pthreads on mingw and linux
145150
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
146151
set(DEFAULT_LINKER_OPTIONS
152+
${DEFAULT_LINKER_OPTIONS}
147153
-pthread
148154
)
155+
156+
if (${OPTION_COVERAGE_ENABLED})
157+
set(DEFAULT_LINKER_OPTIONS
158+
${DEFAULT_LINKER_OPTIONS}
159+
-fprofile-arcs
160+
-ftest-coverage
161+
)
162+
endif ()
149163
endif()

cmake/Coverage.cmake

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ include(${CMAKE_CURRENT_LIST_DIR}/Gcov.cmake)
33

44
set(OPTION_COVERAGE_ENABLED OFF)
55

6-
set(EXCLUDE_COVERAGE
6+
set(LCOV_EXCLUDE_COVERAGE
7+
${LCOV_EXCLUDE_COVERAGE}
78
"\"*/googletest/*\""
89
"\"*v1*\""
10+
"\"/usr/*\""
911
)
1012

1113
# Function to register a target for enabled coverage report
@@ -20,16 +22,17 @@ function(generate_coverage_report target)
2022
)
2123
endif()
2224

23-
if (OPTION_COVERAGE_ENABLED)
25+
if (${OPTION_COVERAGE_ENABLED})
2426
generate_lcov_report(coverage-${target} ${target} ${ARGN})
27+
add_dependencies(coverage coverage-${target})
2528
endif()
2629
endfunction()
2730

2831
# Enable or disable coverage
2932
function(enable_coverage status)
3033
if(NOT ${status})
3134
set(OPTION_COVERAGE_ENABLED ${status} PARENT_SCOPE)
32-
message(STATUS "Coverage report skipped: Manually disabled")
35+
message(STATUS "Coverage lcov skipped: Manually disabled")
3336

3437
return()
3538
endif()
@@ -38,7 +41,7 @@ function(enable_coverage status)
3841

3942
if(NOT lcov_FOUND)
4043
set(OPTION_COVERAGE_ENABLED OFF PARENT_SCOPE)
41-
message(STATUS "Coverage report skipped: lcov not found")
44+
message(STATUS "Coverage lcov skipped: lcov not found")
4245

4346
return()
4447
endif()
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

2-
# FindGcov results:
3-
# GCOV_FOUND
4-
# GCOV_EXECUTABLE
2+
# Findgcov results:
3+
# gcov_FOUND
4+
# gcov_EXECUTABLE
55

66
include(FindPackageHandleStandardArgs)
77

88
# work around CMP0053, see http://public.kitware.com/pipermail/cmake/2014-November/059117.html
99
set(PROGRAMFILES_x86_ENV "PROGRAMFILES(x86)")
1010

11-
find_program(GCOV_EXECUTABLE
11+
find_program(gcov_EXECUTABLE
1212
NAMES
1313
gcov
1414
PATHS
@@ -18,11 +18,11 @@ find_program(GCOV_EXECUTABLE
1818
"$ENV{${PROGRAMFILES_x86_ENV}}/gcov"
1919
)
2020

21-
find_package_handle_standard_args(Gcov
21+
find_package_handle_standard_args(gcov
2222
FOUND_VAR
23-
Gcov_FOUND
23+
gcov_FOUND
2424
REQUIRED_VARS
25-
GCOV_EXECUTABLE
25+
gcov_EXECUTABLE
2626
)
2727

28-
mark_as_advanced(GCOV_EXECUTABLE)
28+
mark_as_advanced(gcov_EXECUTABLE)

cmake/Findlcov.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
# FindGcovr results:
2+
# Findlcov results:
33
# lcov_FOUND
44
# lcov_EXECUTABLE
55

@@ -36,6 +36,7 @@ find_package_handle_standard_args(lcov
3636
genhtml_EXECUTABLE
3737
)
3838

39-
mark_as_advanced(lcov_EXECUTABLE
39+
mark_as_advanced(
40+
lcov_EXECUTABLE
4041
genhtml_EXECUTABLE
4142
)

cmake/Gcov.cmake

Lines changed: 59 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,66 +3,102 @@
33
#lcov -d build/source/tests/fiblib-test/CMakeFiles/fiblib-test.dir -c -o build/coverage/fiblib-test.info
44
#genhtml -o build/coverage/html build/coverage/fiblib-test.info
55

6+
set(LCOV_EXCLUDE_COVERAGE)
67

78
# Function to register a target for coverage
89
function(generate_lcov_report coverage_target target)
910
if(NOT TARGET coverage-init)
1011
add_custom_target(
11-
coverage-init
12+
coverage-zero
1213
COMMAND
1314
${lcov_EXECUTABLE}
14-
--directory ${CMAKE_CURRENT_BINARY_DIR}
1515
--zerocounters
16+
--base-directory ${CMAKE_BINARY_DIR}
17+
--directory ${CMAKE_SOURCE_DIR}
18+
-q
19+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
20+
)
21+
22+
add_custom_target(
23+
coverage-init
24+
COMMAND
25+
${lcov_EXECUTABLE}
26+
--no-external
27+
--capture
28+
--initial
29+
--base-directory ${CMAKE_BINARY_DIR}
30+
--directory ${CMAKE_SOURCE_DIR}
31+
--output-file ${CMAKE_BINARY_DIR}/coverage-base.info
1632
-q
17-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
33+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
34+
BYPRODUCTS ${CMAKE_BINARY_DIR}/coverage-base.info
1835
)
1936

2037
add_custom_target(
2138
coverage-info
2239
COMMAND
2340
${lcov_EXECUTABLE}
24-
--directory ${CMAKE_CURRENT_BINARY_DIR}
2541
--capture
26-
--output-file ${CMAKE_CURRENT_BINARY_DIR}/coverage.info
42+
--no-external
43+
--base-directory ${CMAKE_BINARY_DIR}
44+
--directory ${CMAKE_SOURCE_DIR}
45+
--output-file ${CMAKE_BINARY_DIR}/coverage-captured.info
2746
-q
28-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
29-
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/coverage.info
47+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
48+
BYPRODUCTS ${CMAKE_BINARY_DIR}/coverage-captured.info
3049
)
3150

3251
add_custom_target(
33-
coverage-clean
52+
coverage-merge
3453
COMMAND
3554
${lcov_EXECUTABLE}
36-
--directory ${CMAKE_CURRENT_BINARY_DIR}
37-
--remove ${CMAKE_CURRENT_BINARY_DIR}/coverage.info
38-
${EXCLUDE_COVERAGE}
39-
--output-file ${CMAKE_CURRENT_BINARY_DIR}/coverage-clean.info
55+
--add-tracefile ${CMAKE_BINARY_DIR}/coverage-base.info
56+
--add-tracefile ${CMAKE_BINARY_DIR}/coverage-captured.info
57+
--output-file ${CMAKE_BINARY_DIR}/coverage-merged.info
4058
-q
41-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
42-
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/coverage.info
43-
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/coverage-clean.info
59+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
60+
BYPRODUCTS ${CMAKE_BINARY_DIR}/coverage-merged.info
61+
)
62+
63+
add_custom_target(
64+
coverage-filter
65+
COMMAND
66+
${lcov_EXECUTABLE}
67+
--base-directory ${CMAKE_BINARY_DIR}
68+
--directory ${CMAKE_SOURCE_DIR}
69+
--remove ${CMAKE_BINARY_DIR}/coverage-merged.info
70+
${LCOV_EXCLUDE_COVERAGE}
71+
--output-file ${CMAKE_BINARY_DIR}/coverage-filtered.info
72+
-q
73+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
74+
BYPRODUCTS ${CMAKE_BINARY_DIR}/coverage-filtered.info
4475
)
4576

4677
add_custom_target(
4778
coverage-report
4879
COMMAND
4980
${genhtml_EXECUTABLE}
50-
--output-directory ${CMAKE_CURRENT_BINARY_DIR}/coverage
51-
--title "cmake-init test coverage"
81+
--output-directory ${CMAKE_BINARY_DIR}/coverage
82+
--title "${META_PROJECT_NAME} Test Coverage"
5283
--num-spaces 4
53-
${CMAKE_CURRENT_BINARY_DIR}/coverage-clean.info
54-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
55-
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/coverage-clean.info
84+
${CMAKE_BINARY_DIR}/coverage-filtered.info
85+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
86+
DEPENDS ${CMAKE_BINARY_DIR}/coverage-filtered.info
5687
)
5788

89+
add_dependencies(coverage-init coverage-zero)
90+
#add_dependencies(coverage-info coverage-init)
91+
add_dependencies(coverage-merge coverage-info)
92+
add_dependencies(coverage-filter coverage-merge)
93+
add_dependencies(coverage-report coverage-filter)
5894
add_dependencies(coverage coverage-report)
5995
endif()
6096

6197
add_custom_target(${coverage_target}
62-
COMMAND $<TARGET_FILE:${target}> --gtest_output=xml:gtests-${target}.xml
63-
DEPENDS ${target}
98+
COMMAND $<TARGET_FILE:${target}>
6499
)
65-
add_dependencies(${coverage_target} coverage-init)
100+
66101
add_dependencies(coverage-info ${coverage_target})
102+
add_dependencies(${coverage_target} coverage-init)
67103

68104
endfunction()

source/examples/fibcmd/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ perform_health_checks(
113113
${sources}
114114
)
115115

116+
generate_coverage_report(${target})
117+
116118

117119
#
118120
# Deployment

source/tests/CMakeLists.txt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,20 +70,6 @@ target_link_libraries(gmock-dev
7070
gmock
7171
)
7272

73-
set(DEFAULT_COMPILE_TEST_OPTIONS)
74-
set(DEFAULT_LINKER_TEST_OPTIONS)
75-
76-
if(OPTION_COVERAGE_ENABLED)
77-
set(DEFAULT_COMPILE_TEST_OPTIONS ${DEFAULT_COMPILE_TEST_OPTIONS}
78-
-fprofile-arcs
79-
-ftest-coverage
80-
)
81-
set(DEFAULT_LINKER_TEST_OPTIONS
82-
-fprofile-arcs
83-
-ftest-coverage
84-
)
85-
endif()
86-
8773

8874
#
8975
# Target 'test'

source/tests/fiblib-test/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ target_compile_definitions(${target}
8888
target_compile_options(${target}
8989
PRIVATE
9090
${DEFAULT_COMPILE_OPTIONS}
91-
${DEFAULT_COMPILE_TEST_OPTIONS}
9291
)
9392

9493

@@ -99,5 +98,4 @@ target_compile_options(${target}
9998
target_link_libraries(${target}
10099
PRIVATE
101100
${DEFAULT_LINKER_OPTIONS}
102-
${DEFAULT_LINKER_TEST_OPTIONS}
103101
)

0 commit comments

Comments
 (0)