cmake_minimum_required(VERSION 3.16)
project(bianbu-about-qt VERSION 1.0.0 LANGUAGES CXX C)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find Dependencies
find_package(Qt6 REQUIRED COMPONENTS Widgets DBus Core Concurrent LinguistTools)
find_package(PkgConfig REQUIRED)
pkg_check_modules(EPOXY REQUIRED epoxy)

# SDK include path: prefer installed package, fall back to local source tree
find_path(BCC_SDK_INCLUDE_DIR
    NAMES lib-bianbu-control-center/interface/interface.h
    PATHS
        /usr/include
        ${CMAKE_CURRENT_SOURCE_DIR}/../bianbu-control-center-sdk/include
    REQUIRED
)

# Translations
set(TS_FILES
    translations/bianbu-about-qt_zh_CN.ts
    translations/bianbu-about-qt_en_US.ts
)

# Plugin shared library
add_library(bianbu-about SHARED
    src/plugin/bianbu-about-plugin.cpp
    src/mainwindow.cpp
    src/systeminfo.cpp
)
set_target_properties(bianbu-about PROPERTIES
    AUTOMOC ON
    PREFIX ""
)
target_include_directories(bianbu-about PRIVATE src ${BCC_SDK_INCLUDE_DIR})
target_link_libraries(bianbu-about PRIVATE Qt6::Widgets Qt6::DBus Qt6::Core Qt6::Concurrent)

# Standalone application
add_executable(bianbu-about-qt
    src/main.cpp
    src/mainwindow.cpp
    src/systeminfo.cpp
)
target_include_directories(bianbu-about-qt PRIVATE src)
target_link_libraries(bianbu-about-qt PRIVATE Qt6::Widgets Qt6::DBus Qt6::Core Qt6::Concurrent)

qt_add_translations(bianbu-about-qt
    TS_FILES ${TS_FILES}
    QM_FILES_OUTPUT_VARIABLE QM_FILES
)

qt_add_resources(bianbu-about "translations"
    PREFIX "/translations"
    BASE "${CMAKE_CURRENT_BINARY_DIR}"
    FILES ${QM_FILES}
)

qt_add_resources(bianbu-about-qt "translations"
    PREFIX "/translations"
    BASE "${CMAKE_CURRENT_BINARY_DIR}"
    FILES ${QM_FILES}
)

# GPU Renderer Helper (C implementation)
add_executable(gpu-renderer-helper src/gpu-renderer-helper.c)
target_link_libraries(gpu-renderer-helper PRIVATE ${EPOXY_LIBRARIES})
target_include_directories(gpu-renderer-helper PRIVATE ${EPOXY_INCLUDE_DIRS})

# Install rules
install(TARGETS bianbu-about-qt RUNTIME DESTINATION bin)
install(TARGETS bianbu-about LIBRARY DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE}/bianbu-control-center)
install(TARGETS gpu-renderer-helper RUNTIME DESTINATION libexec/bianbu-about-qt)
