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:
Justin M. Keyes
2022-06-13 00:08:01 +02:00
committed by GitHub
parent 429c40cce3
commit f90174c98c
5 changed files with 72 additions and 43 deletions

27
cmake/DefCmdTarget.cmake Normal file
View 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()

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

View File

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