diff --git a/modules/find/FindCPPCHECK.cmake b/modules/find/FindCPPCHECK.cmake new file mode 100644 index 0000000000000000000000000000000000000000..0a97a8bb7afd190305e200bc46e00a0cceb94fe6 --- /dev/null +++ b/modules/find/FindCPPCHECK.cmake @@ -0,0 +1,82 @@ +### +# +# @copyright (c) 2017 Inria. All rights reserved. +# +### +# +# - Find CPPCHECK bin directory +# Use this module by invoking find_package with the form: +# find_package(CPPCHECK +# [REQUIRED]) # Fail with error if cppcheck is not found +# +# This module finds headers and cppcheck library. +# Results are reported in variables: +# CPPCHECK_FOUND - True if cppcheck executable is found +# CPPCHECK_EXECUTABLE - cppcheck executable directory found +# +# The user can give specific paths where to find the libraries adding cmake +# options at configure (ex: cmake path/to/project -DCPPCHECK_DIR=path/to/cppcheck): +# CPPCHECK_DIR - Where to find the base directory of cppcheck +# CPPCHECK_BINDIR - Where to find the executable cppcheck +# The module can also look for the following environment variables if paths +# are not given as cmake variable: CPPCHECK_DIR, CPPCHECK_BINDIR + +if (NOT CPPCHECK_FOUND) + set(CPPCHECK_DIR "" CACHE PATH "Installation directory of CPPCHECK library") + mark_as_advanced(CPPCHECK_DIR) + if (NOT CPPCHECK_FIND_QUIETLY) + message(STATUS "A cache variable, namely CPPCHECK_DIR, has been set to specify the install directory of CPPCHECK") + endif() +endif() + +set(ENV_CPPCHECK_DIR "$ENV{CPPCHECK_DIR}") +set(ENV_CPPCHECK_BINDIR "$ENV{CPPCHECK_BINDIR}") +set(CPPCHECK_GIVEN_BY_USER "FALSE") +if ( CPPCHECK_DIR OR CPPCHECK_BINDIR OR ENV_CPPCHECK_DIR OR ENV_CPPCHECK_BINDIR ) + set(CPPCHECK_GIVEN_BY_USER "TRUE") +endif() + + +if (NOT CPPCHECK_FIND_QUIETLY) + message(STATUS "Looking for CPPCHECK") +endif() + +# Looking for executable +# ---------------------- + +# Add system include paths to search include +# ------------------------------------------ +unset(where_to_look) +if(CPPCHECK_BINDIR) + list(APPEND where_to_look "${CPPCHECK_BINDIR}") +elseif(CPPCHECK_DIR) + list(APPEND where_to_look "${CPPCHECK_DIR}") +elseif(ENV_CPPCHECK_BINDIR) + list(APPEND where_to_look "${ENV_CPPCHECK_BINDIR}") +elseif(ENV_CPPCHECK_DIR) + list(APPEND where_to_look "${ENV_CPPCHECK_DIR}/bin") +else() + string(REPLACE ":" ";" _path_env "$ENV{PATH}") + list(APPEND where_to_look "${_path_env}") +endif() +list(APPEND where_to_look "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}") +list(APPEND where_to_look "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}") +list(REMOVE_DUPLICATES where_to_look) + +find_program(CPPCHECK_EXECUTABLE + NAMES cppcheck + HINTS ${where_to_look} +) +mark_as_advanced(CPPCHECK_EXECUTABLE) + +if(CPPCHECK_EXECUTABLE) + execute_process(COMMAND ${CPPCHECK_EXECUTABLE} "--version" OUTPUT_VARIABLE CPPCHECK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "Cppcheck " "" CPPCHECK_VERSION "${CPPCHECK_VERSION}") +endif() + +# check that CPPCHECK has been found +# ---------------------------------- +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CPPCHECK DEFAULT_MSG + CPPCHECK_EXECUTABLE + CPPCHECK_VERSION)