cmake_minimum_required(VERSION 3.14)
project(pggps 
    VERSION 1.1.1
    LANGUAGES CXX
)

set(CMAKE_CXX_STANDARD 17)  # 强制使用 C++17
set(CMAKE_CXX_STANDARD_REQUIRED ON)  # 必须支持该标准

set(BUILD_SHARED_LIBS OFF CACHE BOOL "Force build static libraries globally")

# 在CMakeLists.txt开头添加调试信息
message(STATUS "Current source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
#message(STATUS "paho.mqtt path: ${CMAKE_CURRENT_SOURCE_DIR}/third_party/paho.mqtt.c")
message(STATUS "paho.mqtt path: ${CMAKE_CURRENT_SOURCE_DIR}/third_party/paho.mqtt.cpp")
message(STATUS "paho.mqtt path: ${CMAKE_CURRENT_SOURCE_DIR}/third_party/json")
message(STATUS "paho.mqtt path: ${CMAKE_CURRENT_SOURCE_DIR}/third_party/spdlog")

# 验证目录是否存在0
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/paho.mqtt.cpp")
    message(STATUS " paho.mqtt.cpp 存在")
else()
    message(FATAL_ERROR "paho.mqtt.cpp 目录")
endif()

# 设置 paho.mqtt.c和 paho.mqtt.cpp 静态编译选项
set(WITH_STATIC_LIBRARIES ON CACHE BOOL "Build static library" FORCE)
set(WITH_SHARED_LIBRARIES OFF CACHE BOOL "Disable shared library" FORCE)
set(WITH_DOCS OFF CACHE BOOL "Disable documentation" FORCE)
set(PAHO_WITH_SSL ON CACHE BOOL "Enable SSL support" FORCE)

# 添加 子项目
#add_subdirectory(third_party/paho.mqtt.c)
add_subdirectory(third_party/paho.mqtt.cpp)

add_subdirectory(third_party/spdlog)
# 系统依赖
find_package(CURL REQUIRED)
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)

# 版本文件配置
#configure_file(
#    ${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in
#    ${CMAKE_CURRENT_BINARY_DIR}/include/version.h
#)

# 包含目录
include_directories(
    ${CMAKE_CURRENT_BINARY_DIR}/include
    include
    third_party/json/include
    third_party/paho.mqtt.cpp/include 
    third_party/spdlog/include
)

# 源文件收集
file(GLOB_RECURSE SOURCES
    src/*
    third_party/paho.mqtt.cpp/src/*
    #third_party/spdlog/src/*
)

# 创建可执行文件
add_executable(main ${SOURCES})

# 正确链接静态库
target_link_libraries(main PRIVATE
        CURL::libcurl
        #paho-mqttpp3-static
        spdlog
        paho-mqtt3as   # 只选一个 C 库
        Threads::Threads
        OpenSSL::SSL
        OpenSSL::Crypto
)

# 安装规则
install(TARGETS main DESTINATION bin)
enable_testing()

# 可选：添加调试和警告信息
target_compile_options(main PRIVATE -g -Wall -Wextra)