cmake_minimum_required(VERSION 3.16)
project(relayterm C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# JSON 解析用 cJSON（轻量单文件库，MIT 协议）
# 如果系统没装，用 FetchContent 自动拉取
find_package(cJSON QUIET)
if(NOT cJSON_FOUND)
    include(FetchContent)
    FetchContent_Declare(cjson
        GIT_REPOSITORY https://github.com/DaveGamble/cJSON.git
        GIT_TAG v1.7.18
    )
    set(ENABLE_CJSON_TEST OFF CACHE BOOL "" FORCE)
    set(BUILD_SHARED_AND_STATIC_LIBS OFF CACHE BOOL "" FORCE)
    FetchContent_MakeAvailable(cjson)
endif()

# 平台相关的 PTY 源文件
if(WIN32)
    set(PTY_SRC src/pty_win.c)
else()
    set(PTY_SRC src/pty_unix.c)
endif()

# 库源文件
set(LIB_SOURCES
    src/agent.c
    src/protocol.c
    src/dirservice.c
    src/machine_id.c
    src/base64.c
    ${PTY_SRC}
)

# 静态库 + 动态库
add_library(relayterm_static STATIC ${LIB_SOURCES})
add_library(relayterm SHARED ${LIB_SOURCES})

foreach(target relayterm_static relayterm)
    target_include_directories(${target} PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>
    )
    target_link_libraries(${target} PRIVATE cjson)
    target_include_directories(${target} PRIVATE ${cjson_SOURCE_DIR})

    if(UNIX AND NOT APPLE)
        target_link_libraries(${target} PRIVATE util)  # libutil for forkpty on Linux
    endif()
endforeach()

set_target_properties(relayterm_static PROPERTIES OUTPUT_NAME relayterm)

# 安装
install(TARGETS relayterm relayterm_static
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)
install(DIRECTORY include/relayterm DESTINATION include)
