# Copyright (c) 2025 Dominic Masters # # This software is released under the MIT License. # https://opensource.org/licenses/MIT if(NOT TARGET lua) message(STATUS "Looking for Lua...") set(LUA_FOUND FALSE CACHE INTERNAL "Lua found") set(LUA_DOWNLOAD_DIR "${CMAKE_BINARY_DIR}/_lua") set(LUA_SEARCH_ROOTS "${LUA_ROOT}" "$ENV{LUADEV}" "$ENV{HOME}/luadev" "/usr/local/luadev" "/opt/luadev" "/usr/luadev" "${LUA_DOWNLOAD_DIR}/luadev" ) foreach(root IN LISTS LUA_SEARCH_ROOTS) list(APPEND LUA_BIN_HINTS "${root}/bin") list(APPEND LUA_INCLUDE_HINTS "${root}/include") list(APPEND LUA_LIB_HINTS "${root}/lib") endforeach() # Find Lua interpreter find_program(LUA_EXECUTABLE NAMES lua HINTS ${LUA_BIN_HINTS}) # Find Lua headers and library find_path(LUA_INCLUDE_DIR lua.h HINTS ${LUA_INCLUDE_HINTS}) find_library(LUA_LIBRARY NAMES lua HINTS ${LUA_LIB_HINTS}) # If not found, use FetchContent to download and build Lua if(NOT LUA_EXECUTABLE OR NOT LUA_INCLUDE_DIR OR NOT LUA_LIBRARY) message(STATUS "Lua not found in system paths. Using FetchContent to download and build Lua.") include(FetchContent) FetchContent_Declare( lua GIT_REPOSITORY https://github.com/lua/lua.git GIT_TAG v5.4.6 # Change to desired version ) FetchContent_MakeAvailable(lua) # Try to locate built Lua set(LUA_INCLUDE_DIR "${lua_SOURCE_DIR}") set(LUA_LIBRARY "${lua_BINARY_DIR}/liblua.a") set(LUA_EXECUTABLE "${lua_BINARY_DIR}/lua") endif() if(LUA_EXECUTABLE AND LUA_INCLUDE_DIR AND LUA_LIBRARY) set(LUA_FOUND TRUE CACHE INTERNAL "Lua found") add_library(lua INTERFACE IMPORTED) set_target_properties(lua PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LUA_INCLUDE_DIR}" INTERFACE_LINK_LIBRARIES "${LUA_LIBRARY}" ) message(STATUS "Lua found: ${LUA_EXECUTABLE}") endif() endif()