# 在这里直接包含所有的库,工程可以根据所需的库进行链接

#在外面使用时,只需要包含这个文件即可

message(STATUS "==================================================")
message(STATUS "系统: ${CMAKE_SYSTEM_NAME}")
message(STATUS "编译器: ${CMAKE_CXX_COMPILER_ID} 版本: ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "编译类型: ${CMAKE_BUILD_TYPE}")
if(CMAKE_SIZEOF_VOID_P MATCHES 8)
    message(STATUS "系统位数: 64-bit")
elseif(CMAKE_SIZEOF_VOID_P MATCHES 4)
    message(STATUS "系统位数: 32-bit")
endif()

#区分是Qt5还是Qt6
if(Qt5_FOUND)
    message(STATUS "Qt 版本: ${Qt5_VERSION}")
elseif(Qt6_FOUND)
    message(STATUS "Qt 版本: ${Qt6_VERSION}")
endif()


message(STATUS "==================================================")

#=========================================================
#*********************  搜索所有的库 *********************
#=========================================================

# 这一段主要是搜索生成的标准开源库
# fmt、spdlog等
# fmt和spdlog的64位支持动态库和静态库,32位只支持静态库
# spdlog设置 ENABLE_SPDLOG_STATIC_LIB = TRUE,使用静态库,否则使用动态库,默认使用动态库
# CURL只支持动态库,debug版本的.cmake文件也经过修改,全部指向release版本的动态库,方便和LHHTTPAPI一起调用

if(CMAKE_SYSTEM_NAME MATCHES "Windows")
    
    #spdlog和fmt区分位置,分为64位和32位,静态库和动态库,debug和release
    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
        #64位的spdlog有两个版本,一个是静态库,一个是动态库
        if(CMAKE_SIZEOF_VOID_P MATCHES 8)
            #添加Curl库
            set(CURL_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3/lib/cmake/CURL)
            #判断有没有设置静态库标志,64位默认使用动态库
            if(ENABLE_SPDLOG_STATIC_LIB)
                set(fmt_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3_static/lib/cmake/fmt)
                set(spdlog_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3_static/lib/cmake/spdlog)
            else()
                set(fmt_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3/lib/cmake/fmt)
                set(spdlog_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3/lib/cmake/spdlog)
            endif()
        #32位
        elseif(CMAKE_SIZEOF_VOID_P MATCHES 4)
            set(CURL_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3_32/lib/cmake/CURL)
            #fmt和spdlog的32位只有静态库
            set(fmt_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3_static_32/lib/cmake/fmt)
            set(spdlog_DIR ${CMAKE_CURRENT_LIST_DIR}/gcc7.3_static_32/lib/cmake/spdlog)
        endif()
    #MSVC只有动态库,且不支持32位
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
        set(fmt_DIR ${CMAKE_CURRENT_LIST_DIR}/msvc2022/lib/cmake/fmt)
        set(spdlog_DIR ${CMAKE_CURRENT_LIST_DIR}/msvc2022/lib/cmake/spdlog)
    endif()
#Linux只有64位,动态库和静态库都可以选择
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
    # message(STATUS "Using ${CMAKE_SYSTEM_NAME} System")
    #添加Curl库
    # set(CURL_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3/lib/cmake/CURL)
    set(hiredis_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3/lib/cmake/hiredis)
    if(ENABLE_SPDLOG_STATIC_LIB)
        set(fmt_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3_static/lib/cmake/fmt)
        set(spdlog_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3_static/lib/cmake/spdlog)
    else()
        set(fmt_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3/lib/cmake/fmt)
        set(spdlog_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3/lib/cmake/spdlog)
    endif()
    set(freetype_DIR ${CMAKE_CURRENT_LIST_DIR}/linux_gcc8.3/lib/cmake/freetype)
endif()


#=========================================================
#添加MODULE模式搜索其他库的路径,不是标准的开源库
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/sm_dll)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/qmqtt)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/LHQLog)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/LHHTTPAPI)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/OpenSSL-1.1.1)
#添加CURL的路径,目前Linux 使用单独编译的,使用上面的OpenSSL库
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/CURL)

#搜索所有的库
find_package(fmt REQUIRED)
find_package(spdlog REQUIRED)
#链接OpenSSL-1.1.1库
find_package(OpenSSL-1.1.1 REQUIRED)
#链接curl库,使用的是CURL::libcurl
find_package(CURL REQUIRED)
#在Windows中可能有冲突的地方,直接指明路径
# find_package(Freetype REQUIRED PATHS ${freetype_DIR})
find_package(qmqtt REQUIRED)
find_package(SM REQUIRED)

#LHLog和LHHTTP使用动态加载的方式调用,在工程中不需要连接库,只需要包含头文件即可
find_package(LHQLog REQUIRED)
find_package(LHHTTPAPI REQUIRED)

#有些库缺少某些平台、编译器的库,所以这里也根据平台、编译器进行搜索
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
        
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")

    endif()
#Linux只有64位,动态库和静态库都可以选择
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
    #hiredis库
    find_package(hiredis REQUIRED)
endif()




#=========================================================
#*******************  打印搜索到的信息 *******************
#=========================================================
#打印搜索到的信息
message(STATUS "==================================================")
message(STATUS "fmt Found: ${fmt_FOUND}")
message(STATUS "fmt Version: ${fmt_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS  "spdlog FOUND: ${spdlog_FOUND}")
message(STATUS "spdlog Version: ${spdlog_VERSION}")
message(STATUS "--------------------------------------------------")
# message(STATUS "FreeType Found : ${Freetype_FOUND}")
# message(STATUS "FreeType Version : ${Freetype_VERSION}")
# message(STATUS "--------------------------------------------------")
message(STATUS "qmqtt Found : ${qmqtt_FOUND}")
message(STATUS "qmqtt Version : ${qmqtt_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS "SM_LIBRARY FOUND: ${SM_FOUND}")
message(STATUS "SM_LIBRARY Version: ${SM_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS "LHQLog Found : ${LHQLog_FOUND}")
message(STATUS "LHQLog Version : ${LHQLog_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS "LHHTTPAPI Found : ${LHHTTPAPI_FOUND}")
message(STATUS "LHHTTPAPI Version : ${LHHTTPAPI_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS "OpenSSL Found : ${OpenSSL-1.1.1_FOUND}")
message(STATUS "OpenSSL Version : ${OpenSSL-1.1.1_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS "CURL Found : ${CURL_FOUND}")
message(STATUS "CURL Version : ${CURL_VERSION}")
message(STATUS "--------------------------------------------------")
message(STATUS "hiredis Found : ${hiredis_FOUND}")
message(STATUS "hiredis Version : ${hiredis_VERSION}")
message(STATUS "--------------------------------------------------")