cmake_minimum_required(VERSION 3.16)

# 显式允许旧版 FindBoost 模块正常运行而不在新版 CMake 下弹警告 (CMP0167)
if(POLICY CMP0167)
    cmake_policy(SET CMP0167 OLD)
endif()

# 定义目标名称变量
set(TARGET_NAME dsearch)

project(${TARGET_NAME})

# 核心对齐一：深度官方底层使用了 C++20 标准
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 开启 Qt 专属的元对象编译器
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

# 1. 寻找 Qt 依赖
find_package(Qt5 CONFIG REQUIRED COMPONENTS Widgets Core Network)
set(QT_VERSION_MAJOR 5)
message(STATUS "Using Locked Qt Version: ${QT_VERSION_MAJOR}")

# 2. 寻找其他原生底层包
find_package(PkgConfig REQUIRED)

# 🛠️ 核心修正：拆分 PkgConfig 检查，确保 glib 和 gio 的头文件及链接库都能被 100% 正确抓取
pkg_check_modules(GLIB   REQUIRED glib-2.0)
pkg_check_modules(GIO    REQUIRED gio-2.0)
pkg_check_modules(LUCENE REQUIRED liblucene++)
pkg_check_modules(LUCENE_CONTRIB REQUIRED liblucene++-contrib)

find_package(Threads REQUIRED)
find_package(Boost REQUIRED COMPONENTS system)

# 3. 生成目标二进制
add_executable(${TARGET_NAME}
    main.cpp
    mainwindow.cpp
    searchworker.cpp
    searcher.cpp
	filetablemodel.cpp
	filesortproxymodel.cpp
	configmanager.cpp
)

# 4. 头文件包含
target_include_directories(${TARGET_NAME} PRIVATE
    ${GLIB_INCLUDE_DIRS}
    ${GIO_INCLUDE_DIRS}            # <-- 引入 GIO 专属头文件路径
    ${LUCENE_INCLUDE_DIRS}
    ${LUCENE_CONTRIB_INCLUDE_DIRS}  # <-- 自动引入 /usr/include/lucene++/contrib
    ${CMAKE_CURRENT_SOURCE_DIR}/../daemon/include
)

# 5. 链接所有依赖库
target_link_libraries(${TARGET_NAME} PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Network  # 🔍 核心注入：显式链接 Qt 的网络模块，解决单实例编译报错
    ${GLIB_LIBRARIES}
    ${GIO_LIBRARIES}               # 🔍 核心注入：显式链接 gio-2.0，彻底解决 undefined reference 报错
    ${LUCENE_LIBRARIES}
    ${LUCENE_CONTRIB_LIBRARIES}     # <-- 补充链接扩展库
    Threads::Threads
    ${Boost_LIBRARIES}
    stdc++fs
)

target_link_options(${TARGET_NAME} PRIVATE -pie)