mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
build(lint): fix luacheck not found #18940
Problem:
Since 6d57bb89c1
#18543, luacheck is not found on some systems when
running the "lintlua" target.
Solution:
- Move the find_program() to the top-level CMakeLists.txt
- Define a def_cmd_target() function with fewer assumptions than the old
lint() function.
- Move "lintuncrustify" to src/nvim/CMakeLists.txt so it can reuse the
$LINT_NVIM_SOURCES already defined there.
- Make the lint targets _fatal_ by default. There is little reason for
the "lint" umbrella target defined in Makefile to exist if it's going
to ignore the absence of the actual linters.
- For now, keep the uncrustify call in a separate cmake script so that
it can be silenced (too noisy).
This commit is contained in:
parent
429c40cce3
commit
f90174c98c
@ -612,6 +612,33 @@ if(NOT BUSTED_OUTPUT_TYPE)
|
|||||||
set(BUSTED_OUTPUT_TYPE "nvim")
|
set(BUSTED_OUTPUT_TYPE "nvim")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Lint
|
||||||
|
#
|
||||||
|
find_program(LUACHECK_PRG luacheck)
|
||||||
|
find_program(STYLUA_PRG stylua)
|
||||||
|
find_program(FLAKE8_PRG flake8)
|
||||||
|
find_program(UNCRUSTIFY_PRG uncrustify)
|
||||||
|
find_program(SHELLCHECK_PRG shellcheck)
|
||||||
|
include(DefCmdTarget)
|
||||||
|
def_cmd_target(lintlua ${LUACHECK_PRG} LUACHECK_PRG true)
|
||||||
|
if(LUACHECK_PRG)
|
||||||
|
add_custom_command(OUTPUT lintlua-cmd APPEND COMMAND ${LUACHECK_PRG} -q runtime/ scripts/ src/ test/)
|
||||||
|
endif()
|
||||||
|
if(STYLUA_PRG)
|
||||||
|
add_custom_command(OUTPUT lintlua-cmd APPEND COMMAND ${STYLUA_PRG} --color=always --check runtime/)
|
||||||
|
else()
|
||||||
|
add_custom_command(OUTPUT lintlua-cmd APPEND COMMAND ${CMAKE_COMMAND} -E echo "STYLUA_PRG not found")
|
||||||
|
endif()
|
||||||
|
def_cmd_target(lintpy ${FLAKE8_PRG} FLAKE8_PRG true)
|
||||||
|
if(FLAKE8_PRG)
|
||||||
|
add_custom_command(OUTPUT lintpy-cmd APPEND COMMAND ${FLAKE8_PRG} contrib/ scripts/ src/ test/)
|
||||||
|
endif()
|
||||||
|
def_cmd_target(lintsh ${SHELLCHECK_PRG} SHELLCHECK_PRG true)
|
||||||
|
if(SHELLCHECK_PRG)
|
||||||
|
add_custom_command(OUTPUT lintsh-cmd APPEND COMMAND ${SHELLCHECK_PRG} scripts/vim-patch.sh)
|
||||||
|
endif()
|
||||||
|
|
||||||
include(InstallHelpers)
|
include(InstallHelpers)
|
||||||
|
|
||||||
file(GLOB MANPAGES
|
file(GLOB MANPAGES
|
||||||
@ -745,14 +772,6 @@ if(BUSTED_LUA_PRG)
|
|||||||
set_target_properties(functionaltest-lua PROPERTIES FOLDER test)
|
set_target_properties(functionaltest-lua PROPERTIES FOLDER test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(TARGET IN ITEMS lintlua lintsh lintpy lintuncrustify)
|
|
||||||
add_custom_target(${TARGET}
|
|
||||||
COMMAND ${CMAKE_COMMAND}
|
|
||||||
-DPROJECT_ROOT=${PROJECT_SOURCE_DIR}
|
|
||||||
-DTARGET=${TARGET}
|
|
||||||
-P ${PROJECT_SOURCE_DIR}/cmake/lint.cmake)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
#add uninstall target
|
#add uninstall target
|
||||||
if(NOT TARGET uninstall)
|
if(NOT TARGET uninstall)
|
||||||
configure_file(
|
configure_file(
|
||||||
|
27
cmake/DefCmdTarget.cmake
Normal file
27
cmake/DefCmdTarget.cmake
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Defines a target named ${target} and a command with (symbolic) output
|
||||||
|
# ${target}-cmd. If ${prg} is undefined the target prints "not found".
|
||||||
|
#
|
||||||
|
# - Use add_custom_command(…APPEND) to build the command after this.
|
||||||
|
# - Use add_custom_target(…DEPENDS) to run the command from a target.
|
||||||
|
function(def_cmd_target target prg prg_name prg_fatal)
|
||||||
|
# Define a mostly-empty command, which can be appended-to.
|
||||||
|
add_custom_command(OUTPUT ${target}-cmd
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "${target}"
|
||||||
|
)
|
||||||
|
# Symbolic (does not generate an artifact).
|
||||||
|
set_source_files_properties(${target}-cmd PROPERTIES SYMBOLIC "true")
|
||||||
|
|
||||||
|
if(prg OR NOT prg_fatal)
|
||||||
|
add_custom_target(${target}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
DEPENDS ${target}-cmd)
|
||||||
|
if(NOT prg)
|
||||||
|
add_custom_command(OUTPUT ${target}-cmd APPEND
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "${target}: SKIP: ${prg_name} not found")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_custom_target(${target} false
|
||||||
|
COMMENT "${target}: ${prg_name} not found")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
5
cmake/RunUncrustify.cmake
Normal file
5
cmake/RunUncrustify.cmake
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# HACK: This script is invoked with "cmake -P …" as a workaround to silence uncrustify.
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${UNCRUSTIFY_PRG} -c "${PROJECT_SOURCE_DIR}/src/uncrustify.cfg" -q --check ${LINT_NVIM_SOURCES}
|
||||||
|
OUTPUT_QUIET)
|
@ -1,34 +0,0 @@
|
|||||||
function(lint)
|
|
||||||
cmake_parse_arguments(LINT "QUIET" "PROGRAM" "FLAGS;FILES" ${ARGN})
|
|
||||||
|
|
||||||
if(LINT_QUIET)
|
|
||||||
set(OUTPUT_QUIET OUTPUT_QUIET)
|
|
||||||
elseif()
|
|
||||||
set(OUTPUT_QUIET "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_program(PROGRAM_EXISTS ${LINT_PROGRAM})
|
|
||||||
if(PROGRAM_EXISTS)
|
|
||||||
execute_process(COMMAND ${LINT_PROGRAM} ${LINT_FLAGS} ${LINT_FILES}
|
|
||||||
WORKING_DIRECTORY ${PROJECT_ROOT}
|
|
||||||
RESULT_VARIABLE ret
|
|
||||||
${OUTPUT_QUIET})
|
|
||||||
if(ret AND NOT ret EQUAL 0)
|
|
||||||
message(FATAL_ERROR "FAILED: ${TARGET}")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(STATUS "${TARGET}: ${LINT_PROGRAM} not found. SKIP.")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if(${TARGET} STREQUAL "lintuncrustify")
|
|
||||||
file(GLOB_RECURSE FILES ${PROJECT_ROOT}/src/nvim/*.[c,h])
|
|
||||||
lint(PROGRAM uncrustify FLAGS -c src/uncrustify.cfg -q --check FILES ${FILES} QUIET)
|
|
||||||
elseif(${TARGET} STREQUAL "lintpy")
|
|
||||||
lint(PROGRAM flake8 FILES contrib/ scripts/ src/ test/)
|
|
||||||
elseif(${TARGET} STREQUAL "lintsh")
|
|
||||||
lint(PROGRAM shellcheck FILES scripts/vim-patch.sh)
|
|
||||||
elseif(${TARGET} STREQUAL "lintlua")
|
|
||||||
lint(PROGRAM luacheck FLAGS -q FILES runtime/ scripts/ src/ test/)
|
|
||||||
lint(PROGRAM stylua FLAGS --color=always --check FILES runtime/)
|
|
||||||
endif()
|
|
@ -1,5 +1,7 @@
|
|||||||
option(USE_GCOV "Enable gcov support" OFF)
|
option(USE_GCOV "Enable gcov support" OFF)
|
||||||
|
|
||||||
|
include(DefCmdTarget)
|
||||||
|
|
||||||
if(USE_GCOV)
|
if(USE_GCOV)
|
||||||
if(CLANG_TSAN)
|
if(CLANG_TSAN)
|
||||||
# GCOV and TSAN results in false data race reports
|
# GCOV and TSAN results in false data race reports
|
||||||
@ -802,12 +804,22 @@ foreach(sfile ${LINT_NVIM_SOURCES})
|
|||||||
endforeach()
|
endforeach()
|
||||||
add_custom_target(lintc DEPENDS ${LINT_TARGETS})
|
add_custom_target(lintc DEPENDS ${LINT_TARGETS})
|
||||||
|
|
||||||
|
def_cmd_target(lintuncrustify ${UNCRUSTIFY_PRG} UNCRUSTIFY_PRG false) # Non-fatal so that "lintc" target can depend on it.
|
||||||
|
if(UNCRUSTIFY_PRG)
|
||||||
|
add_custom_command(OUTPUT lintuncrustify-cmd APPEND
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
-DUNCRUSTIFY_PRG=${UNCRUSTIFY_PRG}
|
||||||
|
-DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
|
||||||
|
-DLINT_NVIM_SOURCES=${LINT_NVIM_SOURCES}
|
||||||
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunUncrustify.cmake)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
lintcfull
|
lintcfull
|
||||||
COMMAND
|
COMMAND
|
||||||
${LINT_PRG} --suppress-errors=${LINT_SUPPRESS_FILE} ${LINT_NVIM_REL_SOURCES}
|
${LINT_PRG} --suppress-errors=${LINT_SUPPRESS_FILE} ${LINT_NVIM_REL_SOURCES}
|
||||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||||
DEPENDS ${LINT_PRG} ${LINT_NVIM_SOURCES} ${LINT_SUPPRESS_FILE}
|
DEPENDS ${LINT_PRG} ${LINT_NVIM_SOURCES} ${LINT_SUPPRESS_FILE} lintuncrustify
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(generated-sources DEPENDS
|
add_custom_target(generated-sources DEPENDS
|
||||||
|
Loading…
Reference in New Issue
Block a user