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()