cmake_minimum_required(VERSION 3.14)
project(LuaCjApiTest)

set(CMAKE_CXX_STANDARD 17)

set(SCRIPT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/scripts" CACHE PATH "Path to Lua test scripts")
add_compile_definitions(SCRIPT_DIR="${SCRIPT_DIR}")

# ==================== 核心修改 ====================
# 1. 使用 add_subdirectory 直接包含 lib 源码目录
# 这会自动继承 lib 中定义的 luacjapi 目标及其依赖路径
# 无需手动检查文件是否存在，CMake 会处理整个依赖链
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lib ${CMAKE_BINARY_DIR}/lib_build)

# ==================== 引入 Google Test ====================
# 优先使用本地源(网络受限环境): 环境变量 GTEST_LOCAL_DIR 或 /tmp/deps/googletest-1.14.0
if(DEFINED ENV{GTEST_LOCAL_DIR} AND EXISTS $ENV{GTEST_LOCAL_DIR})
    set(FETCHCONTENT_SOURCE_DIR_GOOGLETEST $ENV{GTEST_LOCAL_DIR})
elseif(EXISTS /tmp/deps/googletest-1.14.0)
    set(FETCHCONTENT_SOURCE_DIR_GOOGLETEST /tmp/deps/googletest-1.14.0)
endif()
include(FetchContent)
FetchContent_Declare(
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG v1.14.0
  GIT_SHALLOW ON
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

# ==================== 配置测试目标 ====================
add_executable(test_lua_cj_api test_lua_cj_api.cpp)

# 2. 包含头文件路径
# 注意：由于 lib 项目使用的是旧式 include_directories，这里需要显式添加
# 或者更好的做法是修改 lib/CMakeLists.txt 使用 target_include_directories
target_include_directories(test_lua_cj_api PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/../lib
    ${CMAKE_CURRENT_SOURCE_DIR}/../lib/lua
)

# 3. 链接库
# 直接链接 lib 项目导出的 luacjapi 目标。
# CMake 会自动处理 RPATH、库搜索路径和传递依赖（如 lua、m 等）
target_link_libraries(test_lua_cj_api PRIVATE
    luacjapi        # 来自 lib 项目
    GTest::gtest_main
    pthread
    dl
    m
)

# ==================== 注册测试 ====================
enable_testing()
include(GoogleTest)
gtest_discover_tests(test_lua_cj_api)
