diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b4ea12..d09da47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ enable_testing() option(LUA_SUPPORT_DL "Support dynamic loading of compiled modules" OFF) option(LUA_BUILD_AS_CXX "Build lua as C++" OFF) +option(LUA_ENABLE_SHARED "Build dynamic liblua" ON) enable_language(CXX) if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME}) diff --git a/lua-5.4.4/CMakeLists.txt b/lua-5.4.4/CMakeLists.txt index 2170be0..dd36dbe 100644 --- a/lua-5.4.4/CMakeLists.txt +++ b/lua-5.4.4/CMakeLists.txt @@ -33,42 +33,77 @@ set(LUA_LIB_SRCS "src/linit.c" ) +set(TARGETS_TO_INSTALL lua_internal lua_include) + if(LUA_BUILD_AS_CXX) set_source_files_properties(${LUA_LIB_SRCS} "src/lua.c" "src/luac.c" PROPERTIES LANGUAGE CXX ) endif() -add_library(lua_static STATIC ${LUA_LIB_SRCS}) -set_target_properties(lua_static PROPERTIES - OUTPUT_NAME "lua" - VERSION "${PACKAGE_VERSION}" -) -target_include_directories(lua_static PUBLIC +add_library(lua_internal INTERFACE) + +add_library(lua_include INTERFACE) + +target_include_directories(lua_include INTERFACE $ $ ) + +target_link_libraries(lua_internal INTERFACE lua_include) + +if(LUA_ENABLE_SHARED) + add_library(lua_shared SHARED ${LUA_LIB_SRCS}) + target_link_libraries(lua_shared PRIVATE lua_internal PUBLIC lua_include) + set_target_properties(lua_shared PROPERTIES + VERSION "${PACKAGE_VERSION}" + ) + if(WIN32) + target_compile_definitions(lua_shared PRIVATE LUA_BUILD_AS_DLL) + endif() + list(APPEND TARGETS_TO_INSTALL lua_shared) + if(BUILD_SHARED_LIBS) + add_library(Lua::Library ALIAS lua_shared) + elseif(NOT TOP_LEVEL) + set_target_properties(lua_shared PROPERTIES + EXCLUDE_FROM_ALL ON + ) + endif() +endif() + +add_library(lua_static STATIC ${LUA_LIB_SRCS}) +target_link_libraries(lua_static PRIVATE lua_internal PUBLIC lua_include) +set_target_properties(lua_static PROPERTIES + VERSION "${PACKAGE_VERSION}" +) +list(APPEND TARGETS_TO_INSTALL lua_static) +if(NOT BUILD_SHARED_LIBS OR NOT LUA_ENABLE_SHARED) + add_library(Lua::Library ALIAS lua_static) +endif() + + if(UNIX) - set(LUA_DEFINITIONS) - if(NOT EMSCRIPTEN) find_library(LIBM m) #TODO: Redo this with find_package if(NOT LIBM) message(FATAL_ERROR "libm not found and is required by lua") endif() - target_link_libraries(lua_static INTERFACE m) + target_link_libraries(lua_internal INTERFACE m) - list(APPEND LUA_DEFINITIONS LUA_USE_POSIX) + target_compile_definitions(lua_internal + INTERFACE LUA_USE_POSIX + ) if(LUA_SUPPORT_DL) - target_compile_definitions(lua_static PRIVATE "LUA_USE_DLOPEN") - target_link_libraries(lua_static INTERFACE dl) + target_compile_definitions(lua_internal INTERFACE "LUA_USE_DLOPEN") + target_link_libraries(lua_internal INTERFACE dl) endif() endif() - target_compile_definitions(lua_static - PUBLIC ${LUA_DEFINITIONS} + target_compile_options(lua_internal + INTERFACE "-Wall" "-Wextra" ) - target_compile_options(lua_static - PRIVATE "-Wall" "-Wextra" +elseif(Win32) + target_compile_options(lua_internal + INTERFACE "/Wall" ) endif() @@ -76,36 +111,37 @@ if(LUA_BUILD_BINARY) include(CheckIncludeFile) CHECK_INCLUDE_FILE("readline/readline.h" HAVE_READLINE_READLINE_H) - add_executable(lua "src/lua.c") - target_link_libraries(lua PUBLIC lua_static) + # Can not use lua_shared because some symbols are not exported + target_link_libraries(lua PRIVATE lua_static) set_target_properties(lua PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} ) if (HAVE_READLINE_READLINE_H) - target_compile_definitions(lua PUBLIC "LUA_USE_READLINE") + target_compile_definitions(lua PRIVATE "LUA_USE_READLINE") target_link_libraries(lua PUBLIC readline) endif() + list(APPEND TARGETS_TO_INSTALL lua) endif() if(LUA_BUILD_COMPILER) add_executable(luac "src/luac.c") - target_link_libraries(luac PUBLIC lua_static) + target_link_libraries(luac PRIVATE lua_static) set_target_properties(luac PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} ) + list(APPEND TARGETS_TO_INSTALL luac) endif() -install(TARGETS lua_static +install(TARGETS ${TARGETS_TO_INSTALL} EXPORT LuaTargets - ARCHIVE DESTINATION lib - PUBLIC_HEADER DESTINATION include ) install(DIRECTORY include/ TYPE INCLUDE) include(CMakePackageConfigHelpers) +get_target_property(LUA_EXPORT_LIBRARY Lua::Library ALIASED_TARGET) write_basic_package_version_file( LuaConfigVersion.cmake VERSION ${PACKAGE_VERSION} @@ -115,6 +151,7 @@ write_basic_package_version_file( install(EXPORT LuaTargets FILE LuaTargets.cmake DESTINATION "lib/cmake" + NAMESPACE Lua:: ) configure_package_config_file( diff --git a/lua-5.4.4/LuaConfig.cmake.in b/lua-5.4.4/LuaConfig.cmake.in index d5f7ce5..8f32b2c 100644 --- a/lua-5.4.4/LuaConfig.cmake.in +++ b/lua-5.4.4/LuaConfig.cmake.in @@ -3,8 +3,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/LuaTargets.cmake") set_and_check(LUA_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include") -set_and_check(LUA_LIBRARY "${PACKAGE_PREFIX_DIR}/lib/liblua.a") -set(LUA_LIBRARIES "${LUA_LIBRARY}") -add_library(Lua::Library ALIAS lua_static) +add_library(Lua::Library ALIAS "Lua::@LUA_EXPORT_LIBRARY@") +set(LUA_LIBRARIES "Lua::Library") check_required_components(Lua)