neovim/cmake/LuaHelpers.cmake

38 lines
1.1 KiB
CMake
Raw Normal View History

#
# 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} -l "${MODULE}" -e ""
cmake/LuaHelpers.cmake: check_lua_module: display errors This helps to figure out what the problem is, e.g. in my case I have lua51-mpack installed to be used with luajit, but it is broken (missing libmpack). With this patch you get: -- Checking Lua interpreter /usr/bin/luajit /usr/bin/luajit: error loading module 'mpack' from file '/usr/lib/lua/5.1/mpack.so': libmpack.so.0: cannot open shared object file: No such file or directory stack traceback: [C]: at 0x55fcf0166fb0 [C]: in function 'require' (command line):1: in main chunk [C]: at 0x55fcf01188a0 -- [/usr/bin/luajit] The 'mpack' lua package is required for building Neovim -- Checking Lua interpreter /usr/bin/lua5.1 /usr/bin/lua5.1: error loading module 'mpack' from file '/usr/lib/lua/5.1/mpack.so': libmpack.so.0: cannot open shared object file: No such file or directory stack traceback: [C]: ? [C]: in function 'require' (command line):1: in main chunk [C]: ? -- [/usr/bin/lua5.1] The 'mpack' lua package is required for building Neovim -- Checking Lua interpreter /usr/bin/lua5.2 /usr/bin/lua5.2: (command line):1: module 'mpack' not found: no field package.preload['mpack'] no file '/usr/share/lua/5.2/mpack.lua' no file '/usr/share/lua/5.2/mpack/init.lua' no file '/usr/lib/lua/5.2/mpack.lua' no file '/usr/lib/lua/5.2/mpack/init.lua' no file './mpack.lua' no file '/usr/lib/lua/5.2/mpack.so' no file '/usr/lib/lua/5.2/loadall.so' no file './mpack.so' stack traceback: [C]: in function 'require' (command line):1: in main chunk [C]: in ? -- [/usr/bin/lua5.2] The 'mpack' lua package is required for building Neovim -- Checking Lua interpreter /usr/bin/lua /usr/bin/lua: (command line):1: module 'mpack' not found: no field package.preload['mpack'] no file '/usr/share/lua/5.3/mpack.lua' no file '/usr/share/lua/5.3/mpack/init.lua' no file '/usr/lib/lua/5.3/mpack.lua' no file '/usr/lib/lua/5.3/mpack/init.lua' no file './mpack.lua' no file './mpack/init.lua' no file '/usr/lib/lua/5.3/mpack.so' no file '/usr/lib/lua/5.3/loadall.so' no file './mpack.so' stack traceback: [C]: in function 'require' (command line):1: in main chunk [C]: in ? -- [/usr/bin/lua] The 'mpack' lua package is required for building Neovim CMake Error at CMakeLists.txt:459 (message): A suitable Lua interpreter was not found. While this makes it more verbose for the expected error case ("module 'mpack' not found"), the behavior before this patch hides too much. This is the old output: -- Checking Lua interpreter /usr/bin/luajit -- [/usr/bin/luajit] The 'mpack' lua package is required for building Neovim -- Checking Lua interpreter /usr/bin/lua5.1 -- [/usr/bin/lua5.1] The 'mpack' lua package is required for building Neovim -- Checking Lua interpreter /usr/bin/lua5.2 -- [/usr/bin/lua5.2] The 'mpack' lua package is required for building Neovim -- Checking Lua interpreter /usr/bin/lua -- [/usr/bin/lua] The 'mpack' lua package is required for building Neovim CMake Error at CMakeLists.txt:459 (message): A suitable Lua interpreter was not found. This is for when the whole configuration runs (i.e. after `make distclean`), afterwards only one Lua interpreter gets checked only.
2018-02-21 17:22:19 -07:00
RESULT_VARIABLE module_missing)
if(module_missing)
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
2018-10-06 09:45:34 -07:00
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)
message(STATUS
"[${LUA_PRG_PATH}] The '${module}' lua package is required for building Neovim")
set(${RESULT_VAR} False PARENT_SCOPE)
return()
endif()
endforeach()
set(${RESULT_VAR} True PARENT_SCOPE)
endfunction()