diff --git a/CMakeLists.txt b/CMakeLists.txt index dc59d86..ad614e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,9 @@ ENABLE_TESTING() OPTION (ENABLE_COROUTINE "Enable Iris Coroutine support" ON) OPTION (ENABLE_LUA "Enable Lua Binding support" ON) +SET (FIND_LUA_VERSION "BUILTIN" CACHE STRING "Lua version") +SET_PROPERTY (CACHE FIND_LUA_VERSION PROPERTY STRINGS "BUILTIN" "5.1" "5.2" "5.3" "5.4") + IF (ENABLE_COROUTINE) SET (CMAKE_CXX_STANDARD 20) ELSE (ENABLE_COROUTINE) @@ -21,7 +24,7 @@ ELSE (ENABLE_COROUTINE) ENDIF (ENABLE_COROUTINE) INCLUDE_DIRECTORIES ("${PROJECT_BINARY_DIR}") -STRING (REPLACE "/" "\\" LOCAL_SOURCE_DIR "${PROJECT_SOURCE_DIR}") +STRING (REPLACE "/" "\\" BUILTIN_SOURCE_DIR "${PROJECT_SOURCE_DIR}") FILE (GLOB_RECURSE IRIS_DISPATCHER_DEMO_SRC "${PROJECT_SOURCE_DIR}/src/iris_common.h" @@ -114,24 +117,56 @@ ENDIF (ENABLE_COROUTINE) IF (ENABLE_LUA) FILE (GLOB_RECURSE IRIS_LUA_DEMO_SRC "${PROJECT_SOURCE_DIR}/src/optional/iris_lua.h" - "${PROJECT_SOURCE_DIR}/src/optional/lua/src/*.h" - "${PROJECT_SOURCE_DIR}/src/optional/lua/src/*.hpp" - "${PROJECT_SOURCE_DIR}/src/optional/lua/src/*.c" "${PROJECT_SOURCE_DIR}/test/iris_lua_demo.cpp" ) - LIST (REMOVE_ITEM IRIS_LUA_DEMO_SRC "${PROJECT_SOURCE_DIR}/src/optional/lua/src/lua.c") - LIST (REMOVE_ITEM IRIS_LUA_DEMO_SRC "${PROJECT_SOURCE_DIR}/src/optional/lua/src/luac.c") + IF (${FIND_LUA_VERSION} STREQUAL "BUILTIN") + SET (ENABLE_LUA_BUILTIN ON) + ELSE (${FIND_LUA_VERSION} STREQUAL "BUILTIN") + SET (ENABLE_LUA_BUILTIN OFF) + ENDIF (${FIND_LUA_VERSION} STREQUAL "BUILTIN") + + IF (ENABLE_LUA_BUILTIN) + MESSAGE (STATUS "Use built-in lua version.") + # default to lua 5.4 + FILE (GLOB_RECURSE IRIS_LUA_CORE_SRC + "${PROJECT_SOURCE_DIR}/src/optional/lua/src/*.h" + "${PROJECT_SOURCE_DIR}/src/optional/lua/src/*.hpp" + "${PROJECT_SOURCE_DIR}/src/optional/lua/src/*.c" + ) + + LIST (REMOVE_ITEM IRIS_LUA_CORE_SRC "${PROJECT_SOURCE_DIR}/src/optional/lua/src/lua.c") + LIST (REMOVE_ITEM IRIS_LUA_CORE_SRC "${PROJECT_SOURCE_DIR}/src/optional/lua/src/luac.c") + SET (LUALIB) + ELSE (ENABLE_LUA_BUILTIN) + FIND_PACKAGE (Lua ${FIND_LUA_VERSION} REQUIRED) + IF (LUA_FOUND) + MESSAGE (STATUS "Find lua version " ${FIND_LUA_VERSION}) + FILE (GLOB_RECURSE IRIS_LUA_CORE_SRC + "${LUA_INCLUDE_DIR}/*.h" + "${LUA_INCLUDE_DIR}/*.hpp" + ) + + SET (LUALIB ${LUA_LIBRARIES}) + ELSE (LUA_FOUND) + MESSAGE (FATAL_ERROR "Enable to find lua with version " ${FIND_LUA_VERSION}) + ENDIF (LUA_FOUND) + ENDIF (ENABLE_LUA_BUILTIN) - ADD_EXECUTABLE (iris_lua_demo ${IRIS_LUA_DEMO_SRC}) + ADD_EXECUTABLE (iris_lua_demo ${IRIS_LUA_DEMO_SRC} ${IRIS_LUA_CORE_SRC}) IF (ENABLE_COROUTINE) - TARGET_COMPILE_DEFINITIONS(iris_lua_demo PRIVATE USE_LUA_COROUTINE) + TARGET_COMPILE_DEFINITIONS (iris_lua_demo PRIVATE USE_LUA_COROUTINE) ENDIF (ENABLE_COROUTINE) + + IF (NOT ENABLE_LUA_BUILTIN) + TARGET_INCLUDE_DIRECTORIES (iris_lua_demo PUBLIC ${LUA_INCLUDE_DIR}) + TARGET_COMPILE_DEFINITIONS (iris_lua_demo PUBLIC USE_LUA_LIBRARY) + ENDIF (NOT ENABLE_LUA_BUILTIN) ADD_TEST (test_lua iris_lua_demo) IF (NOT MSVC) - TARGET_LINK_LIBRARIES(iris_lua_demo m ${STDLIB}) + TARGET_LINK_LIBRARIES(iris_lua_demo m ${STDLIB} ${LUALIB}) ENDIF (NOT MSVC) ENDIF (ENABLE_LUA) diff --git a/src/optional/iris_lua.h b/src/optional/iris_lua.h index 2ce758e..999a75c 100644 --- a/src/optional/iris_lua.h +++ b/src/optional/iris_lua.h @@ -33,9 +33,15 @@ SOFTWARE. #include extern "C" { +#if !USE_LUA_LIBRARY #include "lua/src/lua.h" #include "lua/src/lualib.h" #include "lua/src/lauxlib.h" +#else + #include "lua.h" + #include "lualib.h" + #include "lauxlib.h" +#endif } // compatible with old lua versions diff --git a/test/iris_lua_demo.cpp b/test/iris_lua_demo.cpp index c52ffab..4ca20e0 100644 --- a/test/iris_lua_demo.cpp +++ b/test/iris_lua_demo.cpp @@ -187,6 +187,7 @@ int main(void) { #endif bool ret = lua.run("\ + print(_VERSION)\n\ local a = example_t.create()\n\ local b = example_t.create()\n\ b:join_value_required(a)\n\