From 81705fb6095ec3aa74ef900a1a181c0d586447d8 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Wed, 23 Nov 2022 07:16:00 +0400 Subject: [PATCH] Add external_sonnet library --- external/CMakeLists.txt | 9 +- external/hunspell/CMakeLists.txt | 1 + external/sonnet/CMakeLists.txt | 110 ++++++++++++++++++ external/sonnet/generate_trigrams.cmake | 23 ++++ .../sonnet/headers/private/config-hunspell.h | 0 external/sonnet/headers/private/core_debug.h | 3 + .../sonnet/headers/private/hunspelldebug.h | 3 + .../headers/private/nsspellcheckerdebug.h | 3 + .../sonnet/headers/public/sonnetcore_export.h | 0 variables.cmake | 22 +++- 10 files changed, 169 insertions(+), 5 deletions(-) create mode 100644 external/sonnet/CMakeLists.txt create mode 100644 external/sonnet/generate_trigrams.cmake create mode 100644 external/sonnet/headers/private/config-hunspell.h create mode 100644 external/sonnet/headers/private/core_debug.h create mode 100644 external/sonnet/headers/private/hunspelldebug.h create mode 100644 external/sonnet/headers/private/nsspellcheckerdebug.h create mode 100644 external/sonnet/headers/public/sonnetcore_export.h diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 30282f0..3e680ad 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -13,6 +13,9 @@ endmacro() add_checked_subdirectory(angle) add_checked_subdirectory(auto_updates) +if (add_cld3_library) + add_checked_subdirectory(cld3) +endif() add_checked_subdirectory(crash_reports) if (LINUX) add_checked_subdirectory(dispatch) @@ -36,9 +39,6 @@ endif() if (add_hunspell_library) add_checked_subdirectory(hunspell) endif() -if (add_cld3_library) - add_checked_subdirectory(cld3) -endif() add_checked_subdirectory(iconv) if (LINUX AND NOT DESKTOP_APP_DISABLE_JEMALLOC) add_checked_subdirectory(jemalloc) @@ -59,6 +59,9 @@ add_checked_subdirectory(qr_code_generator) add_checked_subdirectory(ranges) add_checked_subdirectory(rlottie) add_checked_subdirectory(rnnoise) +if (add_sonnet_library) + add_checked_subdirectory(sonnet) +endif() add_checked_subdirectory(ton) add_checked_subdirectory(variant) add_checked_subdirectory(vpx) diff --git a/external/hunspell/CMakeLists.txt b/external/hunspell/CMakeLists.txt index eac7373..aad7dbc 100644 --- a/external/hunspell/CMakeLists.txt +++ b/external/hunspell/CMakeLists.txt @@ -56,6 +56,7 @@ PRIVATE target_include_directories(external_hunspell_bundled PUBLIC ${hunspell_src} + ${hunspell_src}/hunspell ) target_compile_definitions(external_hunspell_bundled diff --git a/external/sonnet/CMakeLists.txt b/external/sonnet/CMakeLists.txt new file mode 100644 index 0000000..e9dfbc5 --- /dev/null +++ b/external/sonnet/CMakeLists.txt @@ -0,0 +1,110 @@ +# This file is part of Desktop App Toolkit, +# a set of libraries for developing nice desktop applications. +# +# For license and copyright information please follow this link: +# https://github.com/desktop-app/legal/blob/master/LEGAL + +if (DESKTOP_APP_USE_PACKAGED AND QT_VERSION_MAJOR EQUAL 5) + add_library(external_sonnet INTERFACE IMPORTED GLOBAL) + add_library(desktop-app::external_sonnet ALIAS external_sonnet) + + find_package(KF5Sonnet) + if (KF5Sonnet_FOUND) + target_link_libraries(external_sonnet INTERFACE KF5::SonnetCore) + return() + endif() +endif() + +add_library(external_sonnet STATIC) +add_library(desktop-app::external_sonnet ALIAS external_sonnet) +init_target(external_sonnet "(external)") + +set(sonnet_loc ${third_party_loc}/sonnet) +set(sonnet_data_loc ${sonnet_loc}/data) +set(sonnet_core_src ${sonnet_loc}/src/core) +set(sonnet_plugins_src ${sonnet_loc}/src/plugins) + +set_target_properties(external_sonnet PROPERTIES AUTOMOC ON) + +configure_file(${sonnet_data_loc}/trigrams.qrc.in ${CMAKE_CURRENT_BINARY_DIR}/trigrams.qrc @ONLY) +target_sources(external_sonnet PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/trigrams.qrc) + +nice_target_sources(external_sonnet ${sonnet_core_src} +PRIVATE + client.cpp + client_p.h + guesslanguage.cpp + guesslanguage.h + loader.cpp + loader_p.h + settings.cpp + settings.h + settingsimpl.cpp + settingsimpl_p.h + speller.cpp + speller.h + spellerplugin.cpp + spellerplugin_p.h + textbreaks.cpp + textbreaks_p.h + tokenizer.cpp + tokenizer_p.h +) + +nice_target_sources(external_sonnet ${sonnet_plugins_src}/hunspell +PRIVATE + hunspellclient.cpp + hunspellclient.h + hunspelldict.cpp + hunspelldict.h +) + +if (APPLE) + nice_target_sources(external_sonnet ${sonnet_plugins_src}/nsspellchecker + PRIVATE + nsspellcheckerclient.cpp + nsspellcheckerclient.h + nsspellcheckerdict.cpp + nsspellcheckerdict.h + ) +endif() + +target_compile_definitions(external_sonnet +PUBLIC + SONNETCORE_EXPORT= + SONNET_STATIC +PRIVATE + QT_USE_QSTRINGBUILDER +) + +target_include_directories(external_sonnet SYSTEM +PUBLIC + ${sonnet_core_src} + ${CMAKE_CURRENT_SOURCE_DIR}/headers/public +PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/headers/private +) + +target_link_libraries(external_sonnet +PRIVATE + desktop-app::external_qt + desktop-app::external_hunspell +) + +target_prepare_qrc(external_sonnet) + +add_executable(external_sonnet_parsetrigrams) +init_target(external_sonnet_parsetrigrams "(external)") + +nice_target_sources(external_sonnet_parsetrigrams ${sonnet_data_loc} +PRIVATE + parsetrigrams.cpp +) + +target_link_libraries(external_sonnet_parsetrigrams +PRIVATE + desktop-app::external_qt +) + +include(generate_trigrams.cmake) +generate_trigrams(external_sonnet ${sonnet_data_loc}/trigrams) diff --git a/external/sonnet/generate_trigrams.cmake b/external/sonnet/generate_trigrams.cmake new file mode 100644 index 0000000..f6fe28d --- /dev/null +++ b/external/sonnet/generate_trigrams.cmake @@ -0,0 +1,23 @@ +function(generate_trigrams target_name trigrams_file) + set(gen_dst ${CMAKE_BINARY_DIR}/data) + file(MAKE_DIRECTORY ${gen_dst}) + + set(gen_timestamp ${gen_dst}/${target_name}_trigrams.timestamp) + set(gen_files ${gen_dst}/trigrams.map) + + add_custom_command( + OUTPUT + ${gen_timestamp} + BYPRODUCTS + ${gen_files} + COMMAND + external_sonnet_parsetrigrams "${trigrams_file}" > "${gen_files}" + COMMAND + echo 1> ${gen_timestamp} + COMMENT "Generating trigrams (${target_name})" + DEPENDS + external_sonnet_parsetrigrams + ${trigrams_file} + ) + generate_target(${target_name} trigrams ${gen_timestamp} "${gen_files}" ${gen_dst}) +endfunction() diff --git a/external/sonnet/headers/private/config-hunspell.h b/external/sonnet/headers/private/config-hunspell.h new file mode 100644 index 0000000..e69de29 diff --git a/external/sonnet/headers/private/core_debug.h b/external/sonnet/headers/private/core_debug.h new file mode 100644 index 0000000..74005ee --- /dev/null +++ b/external/sonnet/headers/private/core_debug.h @@ -0,0 +1,3 @@ +#pragma once +#include +static const QLoggingCategory SONNET_LOG_CORE("kf.sonnet.core", QtInfoMsg); diff --git a/external/sonnet/headers/private/hunspelldebug.h b/external/sonnet/headers/private/hunspelldebug.h new file mode 100644 index 0000000..a28d1c5 --- /dev/null +++ b/external/sonnet/headers/private/hunspelldebug.h @@ -0,0 +1,3 @@ +#pragma once +#include +static const QLoggingCategory SONNET_HUNSPELL("kf.sonnet.clients.hunspell", QtInfoMsg); diff --git a/external/sonnet/headers/private/nsspellcheckerdebug.h b/external/sonnet/headers/private/nsspellcheckerdebug.h new file mode 100644 index 0000000..0d0ad12 --- /dev/null +++ b/external/sonnet/headers/private/nsspellcheckerdebug.h @@ -0,0 +1,3 @@ +#pragma once +#include +static const QLoggingCategory SONNET_NSSPELLCHECKER("kf.sonnet.clients.nsspellchecker", QtInfoMsg); diff --git a/external/sonnet/headers/public/sonnetcore_export.h b/external/sonnet/headers/public/sonnetcore_export.h new file mode 100644 index 0000000..e69de29 diff --git a/variables.cmake b/variables.cmake index 91b7027..ce8e310 100644 --- a/variables.cmake +++ b/variables.cmake @@ -31,10 +31,22 @@ option(DESKTOP_APP_DISABLE_CRASH_REPORTS "Disable crash report generation." ${no option(DESKTOP_APP_DISABLE_AUTOUPDATE "Disable autoupdate." ${disable_autoupdate}) option(DESKTOP_APP_USE_HUNSPELL_ONLY "Disable system spellchecker and use bundled Hunspell only. (For debugging purposes)" OFF) cmake_dependent_option(DESKTOP_APP_USE_ENCHANT "Use Enchant instead of bundled Hunspell." OFF LINUX OFF) -cmake_dependent_option(DESKTOP_APP_USE_CLD3 "Disable system text language recognition and use bundled cld3 only." OFF APPLE ON) cmake_dependent_option(DESKTOP_APP_NO_PDB "Disable PDB file generation." OFF WIN32 OFF) cmake_dependent_option(DESKTOP_APP_DISABLE_JEMALLOC "Disable jemalloc, use system malloc." OFF LINUX OFF) +if (APPLE) + set(language_recognition_default SYSTEM) +elseif (WIN32) + set(language_recognition_default CLD3) +else() + set(language_recognition_default SONNET) +endif() +set(DESKTOP_APP_LANGUAGE_RECOGNITION_BACKEND "${language_recognition_default}" CACHE STRING "Text language recognition backend.") +set_property(CACHE DESKTOP_APP_LANGUAGE_RECOGNITION_BACKEND PROPERTY STRINGS SYSTEM CLD3 SONNET) +if (LINUX AND DESKTOP_APP_LANGUAGE_RECOGNITION_BACKEND STREQUAL SYSTEM) + set(DESKTOP_APP_LANGUAGE_RECOGNITION_BACKEND "${language_recognition_default}") +endif() + if (APPLE AND NOT DEFINED DESKTOP_APP_MAC_ARCH) if (DEFINED CMAKE_OSX_ARCHITECTURES) set(DESKTOP_APP_MAC_ARCH "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING "Target macOS arch.") @@ -52,10 +64,16 @@ if ((WIN32 endif() set(add_cld3_library 0) -if (LINUX OR DESKTOP_APP_USE_CLD3) +if (DESKTOP_APP_LANGUAGE_RECOGNITION_BACKEND STREQUAL CLD3) set(add_cld3_library 1) endif() +set(add_sonnet_library 0) +if (DESKTOP_APP_LANGUAGE_RECOGNITION_BACKEND STREQUAL SONNET) + set(add_sonnet_library 1) + set(add_hunspell_library 1) +endif() + set(build_macstore 0) set(build_winstore 0) # 32 or 64 bit set(build_win64 0) # normal or uwp