Skip to content

Commit

Permalink
Add a cppcheck target.
Browse files Browse the repository at this point in the history
  • Loading branch information
nemequ committed Jul 11, 2016
1 parent 1deb3b5 commit 8f13630
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 2 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ include (AddCompilerFlags)

set(THREADS_PREFER_PTHREAD_FLAG)
find_package (Threads REQUIRED)
find_package (CppCheck)

enable_testing ()

Expand Down
87 changes: 87 additions & 0 deletions cmake/FindCppCheck.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
cmake_minimum_required(VERSION 2.8)

find_program(CppCheck_EXECUTABLE cppcheck DOC "path to the ccppcheck executable")
mark_as_advanced(CppCheck_EXECUTABLE)

if(CppCheck_EXECUTABLE)
execute_process(COMMAND ${CppCheck_EXECUTABLE} --version
OUTPUT_VARIABLE CppCheck_version_output
ERROR_VARIABLE CppCheck_version_error
RESULT_VARIABLE CppCheck_version_result
OUTPUT_STRIP_TRAILING_WHITESPACE)

if("${CppCheck_version_result}" EQUAL 0)
string(REGEX REPLACE "^Cppcheck ([^ ]+)"
"\\1"
CppCheck_VERSION "${CppCheck_version_output}")
endif()
endif(CppCheck_EXECUTABLE)

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(CppCheck
REQUIRED_VARS CppCheck_EXECUTABLE
VERSION_VAR CppCheck_VERSION)

if(CppCheck_FOUND)
add_custom_target(cppcheck)
endif(CppCheck_FOUND)

function(cppcheck)
if(CppCheck_FOUND)
set (options FORCE FATAL)
set (oneValueArgs)
set (multiValueArgs TARGET DEFINE INCLUDE_DIRECTORIES ENABLE)
cmake_parse_arguments(CPPCHECK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

foreach(tgt ${CPPCHECK_TARGET})
set(cppcheck_cmd "${CppCheck_EXECUTABLE}" "-q")

get_property(SOURCES TARGET "${tgt}" PROPERTY SOURCES)
get_property(SOURCE_DIR TARGET "${tgt}" PROPERTY SOURCE_DIR)
get_property(COMPILE_DEFINITIONS TARGET "${tgt}" PROPERTY COMPILE_DEFINITIONS)
get_property(DIR_COMPILE_DEFINITIONS DIRECTORY "${SOURCE_DIR}" PROPERTY COMPILE_DEFINITIONS)
get_property(INCLUDE_DIRECTORIES TARGET "${tgt}" PROPERTY INCLUDE_DIRECTORIES)
get_property(DIR_INCLUDE_DIRECTORIES DIRECTORY "${SOURCE_DIR}" PROPERTY INCLUDE_DIRECTORIES)
get_property(C_STANDARD TARGET "${tgt}" PROPERTY C_STANDARD)

if(CPPCHECK_FORCE)
list(APPEND cppcheck_cmd "-f")
endif()

if(CPPCHECK_FATAL)
list(APPEND cppcheck_cmd "--error-exitcode=1")
endif()

if(C_STANDARD)
list(APPEND cppcheck_cmd "--std=c${C_STANDARD}")
endif(C_STANDARD)

foreach(enable ${CPPCHECK_ENABLE})
list(APPEND cppcheck_cmd "--enable=${enable}")
endforeach()

foreach(def ${COMPILE_DEFINITIONS} ${DIR_COMPILE_DEFINITIONS} ${CPPCHECK_DEFINE})
list(APPEND cppcheck_cmd "-D${def}")
endforeach()

foreach(inc ${INCLUDE_DIRECTORIES} ${DIR_INCLUDE_DIRECTORIES} ${CPPCHECK_INCLUDE_DIRECTORIES})
if(NOT "${inc}" STREQUAL "/usr/include")
list(APPEND cppcheck_cmd "-I${inc}")
endif()
endforeach()

if(WIN32)
list(APPEND cppcheck_cmd "--platform=win64")
else()
list(APPEND cppcheck_cmd "--platform=unix64")
endif()

add_custom_target("${tgt}-cppcheck" COMMAND
${cppcheck_cmd} ${SOURCES}
WORKING_DIRECTORY "${SOURCE_DIR}")

add_dependencies(cppcheck "${tgt}-cppcheck")
endforeach(tgt)
endif()
endfunction(cppcheck)
4 changes: 2 additions & 2 deletions cmake/SquashPlugin.cmake
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
include (AddCompilerFlags)
include (RequireStandard)

# set (SQUASH_ENABLED_PLUGINS "" CACHE INTERNAL "enabled plugins")

function (SQUASH_PLUGIN)
set (options EXTRA_WARNINGS DEFAULT_DISABLED)
set (oneValueArgs NAME EXTERNAL_PKG EXTERNAL_PKG_PREFIX C_STANDARD CXX_STANDARD EMBED_TARGET)
Expand Down Expand Up @@ -115,6 +113,8 @@ function (SQUASH_PLUGIN)
LIBRARY DESTINATION "${SQUASH_PLUGIN_DIRECTORY}/${SQUASH_PLUGIN_NAME}"
ARCHIVE DESTINATION "${SQUASH_PLUGIN_DIRECTORY}/${SQUASH_PLUGIN_NAME}")

cppcheck(FORCE TARGET "${PLUGIN_TARGET}" ENABLE warning performance portability)

list (FIND SQUASH_ENABLED_PLUGINS "${SQUASH_PLUGIN_NAME}" PLUGIN_ALREADY_ENABLED)
if (PLUGIN_ALREADY_ENABLED EQUAL -1)
set (ENABLED_PLUGINS_TMP ${SQUASH_ENABLED_PLUGINS})
Expand Down
2 changes: 2 additions & 0 deletions squash/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ if (NOT WIN32)
APPEND PROPERTY INCLUDE_DIRECTORIES ${ICONV_INCLUDE_DIR})
endif ()

cppcheck(FORCE TARGET squash${SQUASH_VERSION_API} ENABLE warning style performance portability)

install (TARGETS squash${SQUASH_VERSION_API}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
Expand Down

0 comments on commit 8f13630

Please sign in to comment.