##// END OF EJS Templates
Added ability to relocate gcda and gcno files and added gcovr wrapper...
Added ability to relocate gcda and gcno files and added gcovr wrapper This allows to run tests separatly and merge coverage at the end.

File last commit:

r309:add3c3641139 R3_plus
r398:57611985e772 R3++
Show More
cppcheck.cmake
116 lines | 3.6 KiB | text/x-cmake | CMakeLexer
# - Run cppcheck on c++ source files as a custom target and a test
#
# add_test_cppcheck(<target-name> [UNUSED_FUNCTIONS] [STYLE] [POSSIBLE_ERROR] [FAIL_ON_WARNINGS]) -
# Create a target to check a target's sources with cppcheck and the indicated options
#
# Requires these CMake modules:
# Findcppcheck
#
# Requires CMake 2.8 or newer
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
IF(__add_cppcheck)
RETURN()
ENDIF()
SET(__add_cppcheck YES)
FIND_PACKAGE(cppcheck)
IF(NOT TARGET all_cppcheck)
ADD_CUSTOM_TARGET(all_cppcheck)
ENDIF()
FUNCTION(add_test_cppcheck _target_name)
IF(NOT TARGET ${_target_name})
MESSAGE(FATAL_ERROR "add_test_cppcheck given a target name that does not exist: '${_target_name}' !")
ENDIF()
SET(cppcheck_args)
LIST(FIND ARGN UNUSED_FUNCTIONS index)
IF("${index}" GREATER "-1")
LIST(APPEND cppcheck_args ${CPPCHECK_UNUSEDFUNC_ARG})
ENDIF()
LIST(FIND ARGN STYLE index)
IF("${index}" GREATER "-1")
LIST(APPEND cppcheck_args ${CPPCHECK_STYLE_ARG})
ENDIF()
LIST(FIND ARGN POSSIBLE_ERROR index)
IF("${index}" GREATER "-1")
LIST(APPEND cppcheck_args ${CPPCHECK_POSSIBLEERROR_ARG})
ENDIF()
LIST(FIND ARGN MISSING_INCLUDE index)
IF("${index}" GREATER "-1")
LIST(APPEND cppcheck_args ${CPPCHECK_MISSINGINCLUDE_ARG})
ENDIF()
LIST(FIND _input FAIL_ON_WARNINGS index)
IF("${index}" GREATER "-1")
LIST(APPEND CPPCHECK_FAIL_REGULAR_EXPRESSION ${CPPCHECK_WARN_REGULAR_EXPRESSION})
LIST(REMOVE_AT _input ${_unused_func})
ENDIF()
GET_TARGET_PROPERTY(target_sources "${_target_name}" SOURCES)
SET(cppcheck_sources)
FOREACH(source ${target_sources})
GET_SOURCE_FILE_PROPERTY(path "${source}" LOCATION)
GET_SOURCE_FILE_PROPERTY(lang "${source}" LANGUAGE)
IF("${lang}" MATCHES "CXX")
LIST(APPEND cppcheck_sources "${path}")
ENDIF()
IF("${lang}" MATCHES "C")
LIST(APPEND cppcheck_sources "${path}")
ENDIF()
ENDFOREACH()
GET_TARGET_PROPERTY(target_definitions "${_target_name}" SOURCES)
GET_TARGET_PROPERTY(target_source_location "${_target_name}" SOURCES)
SET(test_target_name "${_target_name}_cppcheck_test")
GET_TARGET_PROPERTY(include_folders "${_target_name}" INCLUDE_DIRECTORIES)
SET(include_args)
FOREACH(folder ${include_folders})
LIST(APPEND include_args "-I${folder}")
ENDFOREACH()
ADD_TEST(NAME "${test_target_name}"
COMMAND "${CPPCHECK_EXECUTABLE}"
${CPPCHECK_TEMPLATE_ARG}
${cppcheck_args}
${include_args}
${cppcheck_sources})
SET_TESTS_PROPERTIES("${test_target_name}"
PROPERTIES
FAIL_REGULAR_EXPRESSION "${CPPCHECK_FAIL_REGULAR_EXPRESSION}")
ADD_CUSTOM_COMMAND(TARGET all_cppcheck
PRE_BUILD
COMMAND "${CPPCHECK_EXECUTABLE}"
${CPPCHECK_QUIET_ARG}
${CPPCHECK_TEMPLATE_ARG}
${cppcheck_args}
${include_args}
${cppcheck_sources}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "${test_target_name}: Running cppcheck on target ${_target_name}..."
VERBATIM)
ENDFUNCTION()