Instead of including the `luabind.hpp` header that transitively includes basically everything else, we now only include the appropriate header for luabind's open function. It is important that this function is declared in the header but the definition comes from the luabind shared object (library), such that we can detect linker errors, too. By only including this header, we also no longer transitively include the header for the `luaL_newstate` function, with we have to add manually. With these changes, detecting, compiling, linking and checking for lua/luabind with cmake now works instantly, instead of the 3-4 seconds as it was before! Yay, progress!
41 lines
1.6 KiB
CMake
41 lines
1.6 KiB
CMake
INCLUDE (CheckCXXSourceCompiles)
|
|
unset(LUABIND_WORKS CACHE)
|
|
unset(LUABIND51_WORKS CACHE)
|
|
set (LUABIND_CHECK_SRC "extern \"C\" {\n#include \"lua.h\"\n#include \"lauxlib.h\"\n}\n#include <luabind/open.hpp>\nint main() { lua_State *x = luaL_newstate(); luabind::open(x); }")
|
|
set (CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
|
|
set (CMAKE_REQUIRED_INCLUDES "${Boost_INCLUDE_DIR};${LUABIND_INCLUDE_DIR};${LUA_INCLUDE_DIR}")
|
|
set (CMAKE_REQUIRED_LIBRARIES "${LUABIND_LIBRARY};${LUA_LIBRARY}")
|
|
|
|
find_package(Lua52)
|
|
if(NOT APPLE)
|
|
find_package(LuaJIT 5.2)
|
|
endif()
|
|
if(LUA52_FOUND)
|
|
set (CMAKE_REQUIRED_INCLUDES "${Boost_INCLUDE_DIR};${LUABIND_INCLUDE_DIR};${LUA_INCLUDE_DIR}")
|
|
set (CMAKE_REQUIRED_LIBRARIES "${LUABIND_LIBRARY};${LUA_LIBRARY}")
|
|
CHECK_CXX_SOURCE_COMPILES("${LUABIND_CHECK_SRC}" LUABIND_WORKS)
|
|
endif()
|
|
|
|
if(LUABIND_WORKS)
|
|
message(STATUS "Luabind/Lua5.2 combination working with ${LUA_LIBRARY}")
|
|
else()
|
|
message(STATUS "Luabind/Lua5.2 not feasible, falling back to Lua 5.1.")
|
|
unset(LUA_FOUND CACHE)
|
|
unset(LUA_INCLUDE_DIR CACHE)
|
|
unset(LUA_LIBRARY CACHE)
|
|
find_package(Lua51 REQUIRED)
|
|
if(NOT APPLE)
|
|
find_package(LuaJIT 5.1)
|
|
endif()
|
|
set (CMAKE_REQUIRED_INCLUDES "${Boost_INCLUDE_DIR};${LUABIND_INCLUDE_DIR};${LUA_INCLUDE_DIR}")
|
|
set (CMAKE_REQUIRED_LIBRARIES "${LUABIND_LIBRARY};${LUA_LIBRARY}")
|
|
|
|
CHECK_CXX_SOURCE_COMPILES("${LUABIND_CHECK_SRC}" LUABIND51_WORKS)
|
|
|
|
if(LUABIND51_WORKS)
|
|
message(STATUS "Luabind works with Lua 5.1 at ${LUA_LIBRARY}")
|
|
else()
|
|
message(FATAL_ERROR "Luabind does not work with Lua 5.1 at ${LUA_LIBRARY}, no working Luabind found")
|
|
endif()
|
|
endif()
|