Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
0f371b40
Commit
0f371b40
authored
Jan 05, 2015
by
Raphael Isemann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CMake and coverage report
parent
3bef1a50
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
174 additions
and
0 deletions
+174
-0
CMakeLists.txt
CMakeLists.txt
+58
-0
CMakeModules/CodeCoverage.cmake
CMakeModules/CodeCoverage.cmake
+116
-0
No files found.
CMakeLists.txt
0 → 100644
View file @
0f371b40
cmake_minimum_required
(
VERSION 2.8.4
)
project
(
json
)
# Enable C++11 and set flags for coverage testing
SET
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-std=c++11 -g -O0 --coverage -fprofile-arcs -ftest-coverage"
)
# If not specified, use Debug as build type (necessary for coverage testing)
if
(
NOT CMAKE_BUILD_TYPE
)
set
(
CMAKE_BUILD_TYPE Debug CACHE STRING
""
FORCE
)
endif
()
# CMake addons for lcov
# Only possible with g++ at the moment. We run otherwise just the test
if
(
CMAKE_COMPILER_IS_GNUCXX
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-g -O0 --coverage -fprofile-arcs -ftest-coverage"
)
set
(
CMAKE_MODULE_PATH
${
PROJECT_SOURCE_DIR
}
/CMakeModules
)
include
(
CodeCoverage
)
setup_coverage
(
coverage
)
endif
()
# Normal sources
include_directories
(
src/
)
aux_source_directory
(
src/ json_list
)
add_library
(
json
${
json_list
}
)
# Testing
enable_testing
()
# Search all test files in the test directory with a .cc suffix
file
(
GLOB TEST_FILES
"test/*.cc"
)
foreach
(
TEST_FILE
${
TEST_FILES
}
)
# We use the basename to identify the test. E.g "json_unit" for "json_unit.cc"
get_filename_component
(
BASENAME
${
TEST_FILE
}
NAME_WE
)
# Create a test executable
add_executable
(
${
BASENAME
}
${
TEST_FILE
}
)
# Link it with our main json file
target_link_libraries
(
${
BASENAME
}
json
)
# Add test if people want to use ctest
add_test
(
${
BASENAME
}
${
BASENAME
}
)
# If we are using g++, we also need to setup the commands for coverage
# testing
if
(
CMAKE_COMPILER_IS_GNUCXX
)
# Add a run_XXX target that runs the executable and produces the
# coverage data automatically
add_custom_target
(
run_
${
BASENAME
}
COMMAND ./
${
BASENAME
}
)
# Make sure that running requires the executable to be build
add_dependencies
(
run_
${
BASENAME
}
${
BASENAME
}
)
# To create a valid coverage report, the executable has to be
# executed first
add_dependencies
(
coverage run_
${
BASENAME
}
)
endif
()
endforeach
()
CMakeModules/CodeCoverage.cmake
0 → 100644
View file @
0f371b40
#
#
# 2012-01-31, Lars Bilke
# - Enable Code Coverage
#
# 2013-09-17, Joakim Söderberg
# - Added support for Clang.
# - Some additional usage instructions.
#
# USAGE:
# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here:
# http://stackoverflow.com/a/22404544/80480
#
# 1. Copy this file into your cmake modules path.
#
# 2. Add the following line to your CMakeLists.txt:
# INCLUDE(CodeCoverage)
#
# 3. Set compiler flags to turn off optimization and enable coverage:
# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
#
# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target
# which runs your test executable and produces a lcov code coverage report:
# Example:
# SETUP_TARGET_FOR_COVERAGE(
# my_coverage_target # Name for custom target.
# test_driver # Name of the test driver executable that runs the tests.
# # NOTE! This should always have a ZERO as exit code
# # otherwise the coverage generation will not complete.
# coverage # Name of output directory.
# )
#
# 4. Build a Debug build:
# cmake -DCMAKE_BUILD_TYPE=Debug ..
# make
# make my_coverage_target
#
#
# Check prereqs
FIND_PROGRAM
(
GCOV_PATH gcov
)
FIND_PROGRAM
(
LCOV_PATH lcov
)
FIND_PROGRAM
(
GENHTML_PATH genhtml
)
FIND_PROGRAM
(
GCOVR_PATH gcovr PATHS
${
CMAKE_SOURCE_DIR
}
/tests
)
IF
(
NOT GCOV_PATH
)
MESSAGE
(
FATAL_ERROR
"gcov not found! Aborting..."
)
ENDIF
()
# NOT GCOV_PATH
IF
(
NOT CMAKE_COMPILER_IS_GNUCXX
)
# Clang version 3.0.0 and greater now supports gcov as well.
MESSAGE
(
WARNING
"Compiler is not GNU gcc! Clang Version 3.0.0 and greater supports gcov as well, but older versions don't."
)
IF
(
NOT
"
${
CMAKE_CXX_COMPILER_ID
}
"
STREQUAL
"Clang"
)
MESSAGE
(
FATAL_ERROR
"Compiler is not GNU gcc! Aborting..."
)
ENDIF
()
ENDIF
()
# NOT CMAKE_COMPILER_IS_GNUCXX
SET
(
CMAKE_CXX_FLAGS_COVERAGE
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
CACHE STRING
"Flags used by the C++ compiler during coverage builds."
FORCE
)
SET
(
CMAKE_C_FLAGS_COVERAGE
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
CACHE STRING
"Flags used by the C compiler during coverage builds."
FORCE
)
SET
(
CMAKE_EXE_LINKER_FLAGS_COVERAGE
""
CACHE STRING
"Flags used for linking binaries during coverage builds."
FORCE
)
SET
(
CMAKE_SHARED_LINKER_FLAGS_COVERAGE
""
CACHE STRING
"Flags used by the shared libraries linker during coverage builds."
FORCE
)
MARK_AS_ADVANCED
(
CMAKE_CXX_FLAGS_COVERAGE
CMAKE_C_FLAGS_COVERAGE
CMAKE_EXE_LINKER_FLAGS_COVERAGE
CMAKE_SHARED_LINKER_FLAGS_COVERAGE
)
IF
(
NOT
(
CMAKE_BUILD_TYPE STREQUAL
"Debug"
OR CMAKE_BUILD_TYPE STREQUAL
"Coverage"
))
MESSAGE
(
WARNING
"Code coverage results with an optimized (non-Debug) build may be misleading"
)
ENDIF
()
# NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
# Param _outputname lcov output is generated as _outputname.info
# HTML report is generated in _outputname/index.html
FUNCTION
(
SETUP_COVERAGE _outputname
)
IF
(
NOT LCOV_PATH
)
MESSAGE
(
FATAL_ERROR
"lcov not found! Aborting..."
)
ENDIF
()
# NOT LCOV_PATH
IF
(
NOT GENHTML_PATH
)
MESSAGE
(
FATAL_ERROR
"genhtml not found! Aborting..."
)
ENDIF
()
# NOT GENHTML_PATH
# Setup target
ADD_CUSTOM_TARGET
(
coverage
# Capturing lcov counters and generating report
COMMAND
${
LCOV_PATH
}
--rc lcov_branch_coverage=1 --directory . --capture --output-file
${
_outputname
}
.info
COMMAND
${
LCOV_PATH
}
--rc lcov_branch_coverage=1 --remove
${
_outputname
}
.info 'tests/*' '/usr/*' --output-file
${
_outputname
}
.info.cleaned
COMMAND
${
GENHTML_PATH
}
--branch-coverage --rc lcov_branch_coverage=1 -o
${
_outputname
}
${
_outputname
}
.info.cleaned
COMMAND
${
CMAKE_COMMAND
}
-E remove
${
_outputname
}
.info
${
_outputname
}
.info.cleaned
WORKING_DIRECTORY
${
CMAKE_BINARY_DIR
}
COMMENT
"Resetting code coverage counters to zero.
\n
Processing code coverage counters and generating report."
# Cleanup lcov
${
LCOV_PATH
}
--directory . --zerocounters
)
ENDFUNCTION
()
# SETUP_TARGET_FOR_COVERAGE
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment