#查找LHQLog库

message(STATUS "===== FindLHQLog.cmake =====")


#查找头文件
unset(INCLUDE_DIR CACHE)
unset(LHQLog_INCLUDE_DIRS CACHE)

find_path(INCLUDE_DIR 
    NAMES LHQLogAPI.h
    PATHS ${CMAKE_CURRENT_LIST_DIR}/src
    NO_DEFAULT_PATH
)
list(APPEND LHQLog_INCLUDE_DIRS ${INCLUDE_DIR})

unset(INCLUDE_DIR CACHE)
find_path(INCLUDE_DIR 
    NAMES LHLog_file_sink.h
    PATHS ${CMAKE_CURRENT_LIST_DIR}/inc
    NO_DEFAULT_PATH
)

list(APPEND LHQLog_INCLUDE_DIRS ${INCLUDE_DIR})

# message(STATUS "LHQLog include: ${LHQLog_INCLUDE_DIRS}")

#查找源文件
unset(SOURCE_DIR CACHE)
unset(LHQLog_SOURCE_DIRS CACHE)

find_path(SOURCE_DIR 
    NAMES LHQLogAPI.cpp
    PATHS ${CMAKE_CURRENT_LIST_DIR}/src
    NO_DEFAULT_PATH
)

list(APPEND LHQLog_SOURCE_DIRS ${SOURCE_DIR})

#查找库文件,在这里区分平台,Debug和Release,32位和64位
unset(LIBRARY_DIR CACHE)

if(CMAKE_SYSTEM_NAME MATCHES "Windows")
    #64位
    if(CMAKE_SIZEOF_VOID_P MATCHES 8)
        if(CMAKE_BUILD_TYPE MATCHES "Debug")
            find_library(LIBRARY_DIR 
                NAMES LHQLogd
                PATHS ${CMAKE_CURRENT_LIST_DIR}/lib/MinGW_64/debug
                NO_DEFAULT_PATH
            )
        else()
            find_library(LIBRARY_DIR 
                NAMES LHQLog
                PATHS ${CMAKE_CURRENT_LIST_DIR}/lib/MinGW_64/release
                NO_DEFAULT_PATH
            )
        endif()
    #32位
    elseif(CMAKE_SIZEOF_VOID_P MATCHES 4)
        if(CMAKE_BUILD_TYPE MATCHES "Debug")
            find_library(LIBRARY_DIR 
                NAMES LHQLogd
                PATHS ${CMAKE_CURRENT_LIST_DIR}/lib/MinGW_32/debug
                NO_DEFAULT_PATH
            )
        else()
            find_library(LIBRARY_DIR 
                NAMES LHQLog
                PATHS ${CMAKE_CURRENT_LIST_DIR}/lib/MinGW_32/release
                NO_DEFAULT_PATH
            )
        endif()
    endif()
#Linux,Linux直接指定库的名称,使用模糊搜索可能会把后缀版本号搜出来
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
        # find_library(LIBRARY_DIR 
        #     NAMES LHQLog
        #     PATHS ${CMAKE_CURRENT_LIST_DIR}/lib/uos_x64/release
        #     NO_DEFAULT_PATH
        # )
    unset(LHQLog_LIBRARY CACHE)
    list (APPEND LHQLog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/uos_x64/release/libLHQLog.so)
endif()

# list(APPEND LHQLog_LIBRARY ${LIBRARY_DIR})

# message(STATUS "LHQLog library: ${LHQLog_LIBRARY}")

#设置变量
if(LHQLog_INCLUDE_DIRS AND LHQLog_SOURCE_DIRS)
    set(LHQLog_FOUND TRUE)
    set(LHQLog_VERSION 6.0.9.0)
    # CACHE命令用于定义一个名为LHQLog_INCLUDE_DIRS的缓存变量。这个变量用于存储LHQLog的包含目录路径。
    # 通过将其定义为缓存变量,用户可以在CMake配置过程中通过命令行或图形界面设置该变量的值。CACHE INTERNAL部分
    # 指定了缓存变量的类型。在这种情况下,INTERNAL表示该变量只能在CMake脚本内部使用,而不能被外部访问或修改。
    # 通过使用缓存变量,可以使CMake配置更加灵活和可配置。用户可以根据其特定的需求设置缓存变量的值,而不需要修改
    # CMake脚本本身。这对于构建可定制的软件项目非常有用。
    set(LHQLog_INCLUDE_DIRS ${LHQLog_INCLUDE_DIRS} CACHE INTERNAL "LHQLog include directories")
    set(LHQLog_SOURCE_DIRS ${LHQLog_SOURCE_DIRS} CACHE INTERNAL "LHQLog source directories")
    set(LHQLog_LIBRARY ${LHQLog_LIBRARY} CACHE INTERNAL "LHQLog library")


    message(STATUS "LHQLog include: LHQLog_INCLUDE_DIRS")
    message(STATUS "LHQLog source: LHQLog_SOURCE_DIRS")
    # message(STATUS "LHQLog library: LHQLog_LIBRARY")
else()
    set(LHQLog_FOUND FALSE)
    
endif()


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