find_package(PkgConfig REQUIRED)
find_package(Gettext REQUIRED)
find_package(ECM REQUIRED 1.0.0)
find_package(Boost 1.61 REQUIRED COMPONENTS iostreams)
find_package(LibIMEPinyin 1.0.11 REQUIRED)
find_package(LibIMETable 1.0.3 REQUIRED)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/cmake" ${CMAKE_MODULE_PATH})
find_package(Pthread REQUIRED)

find_package(fmt REQUIRED)
if (TARGET fmt::fmt-header-only)
  set(FMT_TARGET fmt::fmt-header-only)
else()
  set(FMT_TARGET fmt::fmt)
endif ()

find_package(Fcitx5Core 5.0.11 REQUIRED)
find_package(Fcitx5Module REQUIRED COMPONENTS DBus Notifications QuickPhrase Spell Clipboard
            TestFrontend TestIM Punctuation QuickPhrase PinyinHelper CloudPinyin)

include("${FCITX_INSTALL_CMAKECONFIG_DIR}/Fcitx5Utils/Fcitx5CompilerSettings.cmake")

include(FeatureSummary)
include(GNUInstallDirs)
include(ECMSetupVersion)
include(ECMUninstallTarget)

add_definitions(-DQT_NO_KEYWORDS)
fcitx5_add_i18n_definition()

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR})

add_library(inputmethodaddon SHARED
            ${CMAKE_CURRENT_SOURCE_DIR}/inputmethodaddon.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/okinputmethodengine.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/okpinyin/okpinyin.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/enginemanager.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/uiproxy.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/inputwindowproxy.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/statusbarproxy.cpp
)

target_link_libraries(inputmethodaddon
                      Fcitx5::Core Fcitx5::Module::DBus Fcitx5::Config 
                      Fcitx5::Module::Punctuation 
                      Fcitx5::Module::QuickPhrase Fcitx5::Module::Notifications 
                      Fcitx5::Module::Spell Fcitx5::Module::PinyinHelper 
                      Fcitx5::Module::CloudPinyin LibIME::Pinyin Boost::iostreams ${FMT_TARGET})

install(TARGETS inputmethodaddon DESTINATION "${CMAKE_INSTALL_LIBDIR}/fcitx5")

configure_file(ok-input-method.conf.in.in ok-input-method.conf.in)
fcitx5_translate_desktop_file("${CMAKE_CURRENT_BINARY_DIR}/ok-input-method.conf.in" ok-input-method.conf)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ok-input-method.conf" DESTINATION "${FCITX_INSTALL_PKGDATADIR}/inputmethod")

configure_file(ok-input-method-addon.conf.in.in ok-input-method-addon.conf.in)
fcitx5_translate_desktop_file("${CMAKE_CURRENT_BINARY_DIR}/ok-input-method-addon.conf.in" ok-input-method-addon.conf)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ok-input-method-addon.conf" RENAME ok-input-method.conf DESTINATION "${FCITX_INSTALL_PKGDATADIR}/addon")

if (TARGET Fcitx5::Module::LuaAddonLoader)
    target_compile_definitions(${PROJECT_NAME}  PRIVATE -DFCITX_HAS_LUA)
    target_link_libraries(${PROJECT_NAME}  Fcitx5::Module::LuaAddonLoader)
    install(FILES okpinyin.lua DESTINATION "${FCITX_INSTALL_PKGDATADIR}/lua/imeapi/extensions")
endif()

add_custom_command(
  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/emoji.dict"
  DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/okpinyin/emoji.txt" LibIME::pinyindict
  COMMAND LibIME::pinyindict "${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/okpinyin/emoji.txt" "${CMAKE_CURRENT_BINARY_DIR}/emoji.dict")
add_custom_target(emoji-dict ALL DEPENDS "emoji.dict")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/emoji.dict" DESTINATION "${FCITX_INSTALL_PKGDATADIR}/okpinyin")

add_custom_command(
  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/chaizi.dict"
  DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/okpinyin/chaizi.txt" LibIME::pinyindict
  COMMAND LibIME::pinyindict "${CMAKE_CURRENT_SOURCE_DIR}/okinputmethodengine/okpinyin/chaizi.txt" "${CMAKE_CURRENT_BINARY_DIR}/chaizi.dict")
add_custom_target(chaizi-dict ALL DEPENDS "chaizi.dict")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/chaizi.dict" DESTINATION "${FCITX_INSTALL_PKGDATADIR}/okpinyin")