118 lines
3.5 KiB
Plaintext
118 lines
3.5 KiB
Plaintext
find_package(PythonInterp REQUIRED)
|
|
find_package(Perl REQUIRED)
|
|
|
|
set(CPP_STYLE_FILTER)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-build/namespaces,)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-build/include,)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-build/include_order,)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-whitespace/tab,)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-legal/copyright,)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-runtime/string,)
|
|
set(CPP_STYLE_FILTER ${CPP_STYLE_FILTER}-build/c++11,)
|
|
|
|
function(add_lint_target DUMMY)
|
|
message(WARNING "The add_lint_target function is obsolete, use enable_linting()")
|
|
enable_linting()
|
|
endfunction()
|
|
|
|
function(enable_linting)
|
|
file(GLOB_RECURSE SOURCES_LIST
|
|
${PROJECT_SOURCE_DIR}/src/*.c
|
|
${PROJECT_SOURCE_DIR}/src/*.cpp
|
|
${PROJECT_SOURCE_DIR}/include/*.h)
|
|
|
|
list(REMOVE_DUPLICATES SOURCES_LIST)
|
|
list(SORT SOURCES_LIST)
|
|
|
|
foreach(sourcefile ${SOURCES_LIST})
|
|
set (lintstampdir "${CMAKE_CURRENT_BINARY_DIR}/lint-stamp")
|
|
set (lintname "${sourcefile}")
|
|
string(REPLACE "${PROJECT_SOURCE_DIR}/" "" lintname ${lintname})
|
|
string(REPLACE "/" "_" lintname ${lintname})
|
|
string(TOLOWER ${lintname} lintname)
|
|
set (lintname "${lintstampdir}/${lintname}")
|
|
file(MAKE_DIRECTORY "${lintstampdir}")
|
|
|
|
if (${lintname} MATCHES "_di_types_h")
|
|
continue()
|
|
endif()
|
|
|
|
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" filenamedisplay ${sourcefile})
|
|
get_filename_component(sourcefilename ${sourcefile} NAME)
|
|
|
|
if ("${sourcefilename}" MATCHES "^.*.cpp$" OR
|
|
"${sourcefilename}" MATCHES "^[A-Z].*.h$")
|
|
add_custom_command(OUTPUT ${lintname}
|
|
COMMAND "${CMAKE_COMMAND}" -E chdir
|
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${PYTHON_EXECUTABLE}"
|
|
"${CMAKE_SOURCE_DIR}/common/styleguide/cpplint/cpplint.py"
|
|
"--filter=${CPP_STYLE_FILTER}"
|
|
"--counting=detailed"
|
|
"--extensions=cpp,hpp,h"
|
|
"--linelength=120"
|
|
${sourcefile}
|
|
"&&"
|
|
"${CMAKE_COMMAND}" -E chdir
|
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${PERL_EXECUTABLE}"
|
|
"${CMAKE_SOURCE_DIR}/common/cmake/scripts/checkpatch.pl"
|
|
"--no-tree"
|
|
"--terse"
|
|
"--strict"
|
|
"--showfile"
|
|
"--summary-file"
|
|
"--max-line-length=120"
|
|
"--types=CODE_INDENT,SPACE_BEFORE_TAB,LOGICAL_CONTINUATIONS,MISSING_EOF_NEWLINE,LONG_LINE,INVALID_UTF8,TYPO_SPELLING"
|
|
|
|
"-f"
|
|
${sourcefile}
|
|
"&&"
|
|
"touch"
|
|
"${lintname}"
|
|
DEPENDS ${sourcefile}
|
|
COMMENT "CppLint ${filenamedisplay}"
|
|
VERBATIM)
|
|
elseif (${sourcefilename} MATCHES "^.*.c$" OR
|
|
${sourcefilename} MATCHES "^.*.h$")
|
|
add_custom_command(OUTPUT ${lintname}
|
|
COMMAND "${CMAKE_COMMAND}" -E chdir
|
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${PERL_EXECUTABLE}"
|
|
"${CMAKE_SOURCE_DIR}/common/cmake/scripts/checkpatch.pl"
|
|
"--no-tree"
|
|
"--terse"
|
|
"--strict"
|
|
"--showfile"
|
|
"--summary-file"
|
|
"--max-line-length=120"
|
|
"--ignore=COMPARISON_TO_NULL"
|
|
"--ignore=GLOBAL_INITIALISERS"
|
|
"--ignore=INITIALISED_STATIC"
|
|
"--ignore=PREFER_KERNEL_TYPES"
|
|
"--ignore=COMPLEX_MACRO"
|
|
"--ignore=CAMELCASE"
|
|
"--ignore=NEW_TYPEDEFS"
|
|
"--ignore=MULTISTATEMENT_MACRO_USE_DO_WHILE"
|
|
"--ignore=TRAILING_SEMICOLON"
|
|
"--ignore=AVOID_EXTERNS"
|
|
"--ignore=BIT_MACRO"
|
|
"--ignore=PREFER_IS_ENABLED"
|
|
"-f"
|
|
${sourcefile}
|
|
"&&"
|
|
"touch"
|
|
"${lintname}"
|
|
DEPENDS ${sourcefile}
|
|
COMMENT "Checkpatch ${filenamedisplay}"
|
|
VERBATIM)
|
|
endif()
|
|
list (APPEND LINT_SOURCES_LIST ${lintname})
|
|
endforeach(sourcefile)
|
|
|
|
add_custom_target(lint
|
|
DEPENDS ${LINT_SOURCES_LIST}
|
|
COMMENT "Linting project ${PROJECT_NAME}"
|
|
VERBATIM)
|
|
endfunction()
|