Merge #932 'Check lua dependencies for all lua interpreters'

This commit is contained in:
John Szakmeister 2014-07-11 19:29:26 -04:00
commit 77db0b2bba
2 changed files with 58 additions and 24 deletions

View File

@ -91,36 +91,32 @@ find_package(Threads REQUIRED)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
find_program(LUA_PRG luajit)
# Find Lua interpreter
include(LuaHelpers)
set(LUA_DEPENDENCIES lpeg cmsgpack)
if(NOT LUA_PRG)
foreach(CURRENT_LUA_PRG luajit lua)
# If LUA_PRG is set find_program() will not search
unset(LUA_PRG CACHE)
unset(LUA_PRG_WORKS)
find_program(LUA_PRG ${CURRENT_LUA_PRG})
# Need a lua interpreter for running the msgapck metadata/dispatch generator
if(NOT EXISTS ${LUA_PRG})
find_program(LUA_PRG lua)
if(LUA_PRG)
check_lua_deps(${LUA_PRG} "${LUA_DEPENDENCIES}" LUA_PRG_WORKS)
if(LUA_PRG_WORKS)
break()
endif()
if(EXISTS ${LUA_PRG})
message(STATUS "Using the lua interpreter ${LUA_PRG}")
endif()
endforeach()
else()
message(FATAL_ERROR "A lua interpreter is required for building the Neovim")
check_lua_deps(${LUA_PRG} "${LUA_DEPENDENCIES}" LUA_PRG_WORKS)
endif()
execute_process(COMMAND ${LUA_PRG} -e "require('lpeg')"
RESULT_VARIABLE LUA_LPEG_MISSING
ERROR_QUIET)
if(${LUA_LPEG_MISSING})
message(FATAL_ERROR
"The 'lpeg' lua package is required for building Neovim")
if(NOT LUA_PRG_WORKS)
message(FATAL_ERROR "A suitable Lua interpreter was not found")
endif()
execute_process(COMMAND ${LUA_PRG} -e "require('cmsgpack')"
RESULT_VARIABLE LUA_MSGPACK_MISSING
ERROR_QUIET)
if(${LUA_MSGPACK_MISSING})
message(FATAL_ERROR
"The 'cmsgpack' lua package is required for building Neovim")
endif()
message(STATUS "Using the Lua interpreter ${LUA_PRG}")
add_subdirectory(config)
add_subdirectory(src/nvim)

38
cmake/LuaHelpers.cmake Normal file
View File

@ -0,0 +1,38 @@
#
# Functions to help checking for a Lua interpreter
#
# Check if a module is available in Lua
function(check_lua_module LUA_PRG_PATH MODULE RESULT_VAR)
execute_process(COMMAND ${LUA_PRG_PATH} -e "require('${MODULE}')"
RESULT_VARIABLE module_missing
ERROR_QUIET)
if(module_missing)
message(STATUS
"[${LUA_PRG_PATH}] The '${MODULE}' lua package is required for building Neovim")
set(${RESULT_VAR} False PARENT_SCOPE)
else()
set(${RESULT_VAR} True PARENT_SCOPE)
endif()
endfunction()
# Check Lua interpreter for dependencies
function(check_lua_deps LUA_PRG_PATH MODULES RESULT_VAR)
# Check if the lua interpreter at the given path
# satisfies all Neovim dependencies
message(STATUS "Checking Lua interpreter ${LUA_PRG_PATH}")
if(NOT EXISTS ${LUA_PRG_PATH})
message(STATUS
"[${LUA_PRG_PATH}] file not found")
endif()
foreach(module ${MODULES})
check_lua_module(${LUA_PRG_PATH} ${module} has_module)
if(NOT has_module)
set(${RESULT_VAR} False PARENT_SCOPE)
return()
endif()
endforeach()
set(${RESULT_VAR} True PARENT_SCOPE)
endfunction()