# qwfassoc: shared library exporting reusable Qt widgets that wrap wfassoc.

# Qt 6 requires C++17 at minimum.
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(QWFASSOC_SOURCES
    "${CMAKE_CURRENT_SOURCE_DIR}/src/application_widget.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/association_widget.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/icon_utils.cpp"
)

set(QWFASSOC_HEADERS
    "${CMAKE_CURRENT_SOURCE_DIR}/src/qwfassoc_global.h"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/scope.h"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/manifest.h"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/application_widget.h"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/association_widget.h"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/icon_utils.h"
)

set(QWFASSOC_UI
    "${CMAKE_CURRENT_SOURCE_DIR}/src/application_widget.ui"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/association_widget.ui"
)

add_library(qwfassoc SHARED
    ${QWFASSOC_SOURCES}
    ${QWFASSOC_HEADERS}
    ${QWFASSOC_UI}
)

# QWFASSOC_LIBRARY switches QWFASSOC_EXPORT from import to export mode.
target_compile_definitions(qwfassoc PRIVATE QWFASSOC_LIBRARY)

# Consumers (and the library itself) need to find the public headers under
# src/. PUBLIC propagates the include path to anyone linking against qwfassoc.
target_include_directories(qwfassoc PUBLIC
    "${CMAKE_CURRENT_SOURCE_DIR}/src"
)

target_link_libraries(qwfassoc PUBLIC
    Qt6::Widgets
    wfassoc::wfassoc
)

# Translation pipeline for the library. qt6_add_translations() runs lupdate
# against the target's sources and embeds the lrelease output under the
# ":/i18n" resource prefix, where installTranslators() in the executable
# looks it up at runtime.
set(QWFASSOC_TS_FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/i18n/qwfassoc_zh_CN.ts"
)

qt6_add_translations(qwfassoc
    TS_FILES ${QWFASSOC_TS_FILES}
)
