#SPDLOG日志库

message(STATUS "***** Find spdlog Library *****")

#寻找头文件
# find_path(spdlog_INCLUDE_DIR
#     NAMES spdlog/logger.h
#     PATHS ${CMAKE_CURRENT_LIST_DIR}
#     NO_DEFAULT_PATH
# )
unset(spdlog_INCLUDE_DIR CACHE)
list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include)
list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/spdlog)
#包含fmt头文件,使用fmt的时候包含fmt/bundled/format.h这样的完整目录
list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/spdlog/fmt)



unset(spdlog_LIBRARY CACHE)
unset(spdlog_STATIC_LIBRARY CACHE)
#查找库文件,需要判断操作系统,位数
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
            if(CMAKE_BUILD_TYPE MATCHES "Debug")
                list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlogd.dll)
            else()
                list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlog.dll)
            endif()
            if(ENABLE_SPDLOG_STATIC_LIB)
                if(CMAKE_BUILD_TYPE MATCHES "Debug")
                    list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlog.a)
                else()
                    list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlog.a)
                endif()
            endif()
            
        elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
            # if(CMAKE_BUILD_TYPE MATCHES "Debug")
            #     list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlog.dll)
            # else()
            #     list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlog.dll)
            # endif()
        endif()
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
        if(CMAKE_BUILD_TYPE MATCHES "Debug")
            list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlogd.lib)
        else()
            list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlog.lib)
        endif()
    endif()
#添加Linux版本
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
    if(CMAKE_BUILD_TYPE MATCHES "Debug")
        list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
    else()
        list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
    endif()
    list(APPEND spdlog_LIBRARY pthread)
    if(ENABLE_SPDLOG_STATIC_LIB)
        if(CMAKE_BUILD_TYPE MATCHES "Debug")
            list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlogd.a)
        else()
            list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlog.a)
        endif()
        #这里需要显式的链接依赖库,或者使用target_link_options(appname PRIVATE "-Wl,--copy-dt-needed-entries")来让gcc递归搜索依赖库
        list(APPEND spdlog_STATIC_LIBRARY pthread)
    endif()
endif()

#设置查找到后的变量
# if(ENABLE_SPDLOG_STATIC_LIB)
#     set(spdlog_LIBRARY ${spdlog_STATIC_LIBRARY})
# endif()

# message(STATUS "spdlog_INCLUDE_DIR: ${spdlog_INCLUDE_DIR}")

if(spdlog_INCLUDE_DIR AND spdlog_LIBRARY)
    set(spdlog_FOUND TRUE)
    set(spdlog_VERSION 1.14.1)
else()
    set(spdlog_FOUND FALSE)
endif()

message(STATUS "如果需要使用静态库,定义“ ENABLE_SPDLOG_STATIC_LIB ”变量")
if(ENABLE_SPDLOG_STATIC_LIB)
    message(STATUS "include : spdlog_INCLUDE_DIR")
    message(STATUS "Library : spdlog_LIBRARY")
    message(STATUS "Static Library : spdlog_STATIC_LIBRARY")
else()
    message(STATUS "include : spdlog_INCLUDE_DIR")
    message(STATUS "Library : spdlog_LIBRARY")
endif()

message(STATUS "---------------------------------")