diff options
author | Michal Klocek <michal.klocek@qt.io> | 2021-05-28 19:59:48 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-06-15 10:53:32 +0000 |
commit | e0979612a57d0a71c2b4f5d646547b5a5f6ab99c (patch) | |
tree | 4f01307f92341fb6e978773aef0998b9839fad90 | |
parent | ad036413b1044c802253a5843568048d22523ebf (diff) |
Add spellchecker support and qwebengine_covert_dict to cmake
Add spellchecker dictionary conversion tool.
Change scope of gn object imported variables to function scope.
Change-Id: Ice579a89e20b80034b675e7f767a774100478472
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
(cherry picked from commit 9451ceee24e832d32a86ae6a2f37eea781acaa2f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | cmake/Functions.cmake | 34 | ||||
-rw-r--r-- | examples/webenginewidgets/spellchecker/CMakeLists.txt | 34 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 45 | ||||
-rw-r--r-- | src/core/api/configure.cmake | 1 | ||||
-rw-r--r-- | src/core/configure/BUILD.root.gn.in | 16 | ||||
-rw-r--r-- | src/core/tools/CMakeLists.txt | 21 | ||||
-rw-r--r-- | src/core/tools/main.cpp (renamed from src/tools/qwebengine_convert_dict/main.cpp) | 0 | ||||
-rw-r--r-- | tests/auto/widgets/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/auto/widgets/spellchecking/CMakeLists.txt | 49 | ||||
-rw-r--r-- | tests/auto/widgets/spellchecking/tst_spellchecking.cpp | 4 |
11 files changed, 178 insertions, 29 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 63d227fc4..ecea7f0fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build) endif() add_subdirectory(src/core/api) +add_subdirectory(src/core/tools) add_subdirectory(src/process) add_subdirectory(src/webenginewidgets) add_subdirectory(src/webenginequick) diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 2cd81554e..c61e403be 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -294,3 +294,37 @@ function(get_darwin_sdk_version result) endif() endfunction() +function(extend_target_with_gn_objects target config cmakeFile stampFile) + + include(${buildDir}/${config}/${cmakeFile}) + + string(TOUPPER ${config} cfg) + add_library(GnObjects_${target}_${config} OBJECT IMPORTED GLOBAL) + target_link_libraries(${target} PRIVATE $<$<CONFIG:${config}>:GnObjects_${target}_${config}>) + add_custom_target(ninja_${target}_${config} DEPENDS ${buildDir}/${config}/${stampFile}) + add_dependencies(GnObjects_${target}_${config} ninja_${target}_${config}) + #TODO: remove GnObjects_${target}_${config} with CMAKE 3.20 + set_property(TARGET GnObjects_${target}_${config} + PROPERTY IMPORTED_OBJECTS_${cfg} ${${cfg}_NINJA_OBJECTS} + ) + set_source_files_properties(${${cfg}_NINJA_OBJECTS} PROPERTIES GENERATED TRUE) + + if(LINUX) + target_link_libraries(${target} + PRIVATE "-Wl,--start-group" "$<$<CONFIG:${config}>:${${cfg}_NINJA_ARCHIVES}>" "-Wl,--end-group") + else() + target_link_libraries(${target} PRIVATE "$<$<CONFIG:${config}>:${${cfg}_NINJA_ARCHIVES}>") + endif() + + target_link_libraries(${target} PUBLIC "$<$<CONFIG:${config}>:${${cfg}_NINJA_LIBS}>") + + # we depend on stampFile, but ninja backend generator needs more (create once) + if(stampFile) + add_custom_command(OUTPUT ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES} + DEPENDS ${buildDir}/${config}/${stampFile} + ) + add_custom_target(generate_${target}_${cfg} + DEPENDS ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES} + ) + endif() +endfunction() diff --git a/examples/webenginewidgets/spellchecker/CMakeLists.txt b/examples/webenginewidgets/spellchecker/CMakeLists.txt index b8e17b1ac..f05cd74fe 100644 --- a/examples/webenginewidgets/spellchecker/CMakeLists.txt +++ b/examples/webenginewidgets/spellchecker/CMakeLists.txt @@ -53,3 +53,37 @@ install(TARGETS spellchecker BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +file(GLOB_RECURSE dicts + RELATIVE ${CMAKE_CURRENT_LIST_DIR}/dict + */*.dic +) + +if(QT_GENERATOR_IS_MULTI_CONFIG) + set(spellcheckerDir ${CMAKE_CURRENT_BINARY_DIR}/dict/qtwebengine_dictionaries) +else() + set(spellcheckerDir ${CMAKE_CURRENT_BINARY_DIR}/qtwebengine_dictionaries) +endif() + +foreach(dictFile ${dicts}) + get_filename_component(dictName ${dictFile} NAME_WE) + add_custom_command(TARGET spellchecker + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${spellcheckerDir} + COMMAND $<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::qwebengine_convert_dict> + ${CMAKE_CURRENT_SOURCE_DIR}/dict/${dictFile} + ${spellcheckerDir}/${dictName}.bdic + COMMENT "Running qwebengine_convert_dict" + ) +endforeach() + +# copy dictionaries to $<CONFIG> build dir +if(QT_GENERATOR_IS_MULTI_CONFIG) + add_custom_command(TARGET spellchecker + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo Copying dictionares + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/dict + ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> + ) +endif() + diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 8dc6a8e9d..b5c30d3b9 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -14,6 +14,7 @@ include(${WEBENGINE_ROOT_SOURCE_DIR}/cmake/Functions.cmake) assertRunAsTopLevelBuild(TRUE) add_subdirectory(api) +add_subdirectory(tools) find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core) find_package(Gn ${QT_REPO_MODULE_VERSION} EXACT REQUIRED) @@ -528,7 +529,6 @@ foreach(config ${configs}) string(REGEX REPLACE "\n$" "" gnOutput "${gnOutput}") message("-- GN ${gnOutput}") endif() - include(${buildDir}/${config}/QtWebEngineCore.cmake) ## @@ -577,30 +577,10 @@ endif() foreach(config ${configs}) - string(TOUPPER ${config} cfg) - - add_library(GnObjects_${config} OBJECT IMPORTED GLOBAL) - target_link_libraries(WebEngineCore PRIVATE $<$<CONFIG:${config}>:GnObjects_${config}>) - add_dependencies(GnObjects_${config} ninja_${config}) - #TODO: remove GnObjects_${config} with CMAKE 3.20 - set_property(TARGET GnObjects_${config} PROPERTY IMPORTED_OBJECTS_${cfg} ${${cfg}_NINJA_OBJECTS}) - set_source_files_properties(${${cfg}_NINJA_OBJECTS} PROPERTIES GENERATED TRUE) - - if(LINUX) - target_link_libraries(WebEngineCore - PRIVATE "-Wl,--start-group" "$<$<CONFIG:${config}>:${${cfg}_NINJA_ARCHIVES}>" "-Wl,--end-group") - else() - target_link_libraries(WebEngineCore PRIVATE "$<$<CONFIG:${config}>:${${cfg}_NINJA_ARCHIVES}>") - endif() - - target_link_libraries(WebEngineCore PUBLIC "$<$<CONFIG:${config}>:${${cfg}_NINJA_LIBS}>") - - # we depend on WebEnigneCore stamp, but ninja backend generator needs more - add_custom_command(OUTPUT ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES} - DEPENDS ${buildDir}/${config}/QtWebEngineCore.stamp) - add_custom_target(generate_${cfg} DEPENDS ${${cfg}_NINJA_OBJECTS} ${${cfg}_NINJA_ARCHIVES}) + extend_target_with_gn_objects(WebEngineCore ${config} QtWebEngineCore.cmake QtWebEngineCore.stamp) if(WIN32) + string(TOUPPER ${config} cfg) set(sandboxLibraryPath ${buildDir}/${config}/QtWebEngineCoreSandbox.lib) set_property(TARGET WebEngineCoreSandbox PROPERTY IMPORTED_LOCATION_${cfg} ${sandboxLibraryPath}) @@ -612,7 +592,7 @@ foreach(config ${configs}) endforeach() ## -# RESOURCES +# WEBENGINECORE RESOURCES ## #TODO: use simply filter / globbing-expressions @@ -712,3 +692,20 @@ else() ${CMAKE_INSTALL_PREFIX}/translations/qtwebengine_locales) endif() endif() + +## +# WEBENGINECORE DICT TOOL SETUP +## + +if(QT_FEATURE_webengine_spellchecker) + qt_get_tool_target_name(dict_target_name qwebengine_convert_dict) + target_include_directories(${dict_target_name} PRIVATE + ../3rdparty/chromium + ../3rdparty/chromium/third_party/boringssl/src/include + ${buildDir}/${config}/gen + ) + foreach(config ${configs}) + extend_target_with_gn_objects(${dict_target_name} ${config} convert_dict.cmake "") + endforeach() +endif() + diff --git a/src/core/api/configure.cmake b/src/core/api/configure.cmake index 8e8b6044e..35d28e87f 100644 --- a/src/core/api/configure.cmake +++ b/src/core/api/configure.cmake @@ -81,7 +81,6 @@ qt_feature("webengine-kerberos" PRIVATE qt_feature("webengine-spellchecker" PUBLIC LABEL "Spellchecker" PURPOSE "Provides a spellchecker." - AUTODETECT OFF ) qt_feature("webengine-native-spellchecker" PUBLIC LABEL "Native Spellchecker" diff --git a/src/core/configure/BUILD.root.gn.in b/src/core/configure/BUILD.root.gn.in index 28882050f..b0e52511c 100644 --- a/src/core/configure/BUILD.root.gn.in +++ b/src/core/configure/BUILD.root.gn.in @@ -258,7 +258,8 @@ source_set("qtwebengine_sources") { if (enable_spellcheck) { deps += [ ":qtwebengine_spellcheck_sources", - "//chrome/tools/convert_dict", + "//chrome/tools/convert_dict:lib", + "//third_party/hunspell", ] } if (enable_plugins) { @@ -530,3 +531,16 @@ if (enable_extensions) { ] } } + +if (enable_spellcheck) { + shared_library("convert_dict") { + cmake_config = "@GN_CONFIG@" + configs += [ "//build/config/compiler:wexit_time_destructors" ] + deps = [ + "//chrome/tools/convert_dict:lib", + "//base", + "//base:i18n", + "//third_party/hunspell", + ] + } +} diff --git a/src/core/tools/CMakeLists.txt b/src/core/tools/CMakeLists.txt new file mode 100644 index 000000000..d191f57b9 --- /dev/null +++ b/src/core/tools/CMakeLists.txt @@ -0,0 +1,21 @@ + +## +# WEBENGINECORE DICT CONVERT TOOL +## + +if(QT_FEATURE_webengine_spellchecker) + qt_get_tool_target_name(dict_target_name qwebengine_convert_dict) + qt_internal_add_tool(${dict_target_name} + TARGET_DESCRIPTION "QtWebEngine Dictionary Conversion Tool" + INSTALL_DIR ${INSTALL_LIBEXECDIR} + TOOLS_TARGET WebEngineCore + SOURCES main.cpp + ) + qt_skip_warnings_are_errors(${dict_target_name}) + make_install_only(${dict_target_name}) + add_dependencies(${dict_target_name} WebEngineCore) + qt_internal_extend_target(${dict_target_name} CONDITION WIN32 + DEFINES WIN32_LEAN_AND_MEAN NOMINMAX + ) +endif() + diff --git a/src/tools/qwebengine_convert_dict/main.cpp b/src/core/tools/main.cpp index d79132510..d79132510 100644 --- a/src/tools/qwebengine_convert_dict/main.cpp +++ b/src/core/tools/main.cpp diff --git a/tests/auto/widgets/CMakeLists.txt b/tests/auto/widgets/CMakeLists.txt index f7955b1f8..a6e8d7c35 100644 --- a/tests/auto/widgets/CMakeLists.txt +++ b/tests/auto/widgets/CMakeLists.txt @@ -32,5 +32,5 @@ if(QT_FEATURE_ssl) add_subdirectory(certificateerror) endif() if(QT_FEATURE_webengine_spellchecker AND NOT CMAKE_CROSSCOMPILING AND NOT QT_FEATURE_webengine_native_spellchecker) -# add_subdirectory(spellchecking) + add_subdirectory(spellchecking) endif() diff --git a/tests/auto/widgets/spellchecking/CMakeLists.txt b/tests/auto/widgets/spellchecking/CMakeLists.txt new file mode 100644 index 000000000..afed7e28b --- /dev/null +++ b/tests/auto/widgets/spellchecking/CMakeLists.txt @@ -0,0 +1,49 @@ +include(../../util/util.cmake) + +qt_internal_add_test(tst_spellchecking + SOURCES + tst_spellchecking.cpp + LIBRARIES + Qt::WebEngineWidgets + Test::Util +) + +qt_internal_add_resource(tst_spellchecking "tst_spellchecking" + PREFIX + "/" + FILES + "resources/index.html" +) + +file(GLOB_RECURSE dicts + RELATIVE ${CMAKE_CURRENT_LIST_DIR}/dict + *.dic +) + +if(QT_GENERATOR_IS_MULTI_CONFIG) + set(spellcheckerDir ${CMAKE_CURRENT_BINARY_DIR}/dict/qtwebengine_dictionaries) +else() + set(spellcheckerDir ${CMAKE_CURRENT_BINARY_DIR}/qtwebengine_dictionaries) +endif() + +foreach(dictFile ${dicts}) + get_filename_component(dictName ${dictFile} NAME_WE) + add_custom_command(TARGET tst_spellchecking + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${spellcheckerDir} + COMMAND $<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::qwebengine_convert_dict> + ${CMAKE_CURRENT_SOURCE_DIR}/dict/${dictFile} + ${spellcheckerDir}/${dictName}.bdic + COMMENT "Running qwebengine_convert_dict" + ) +endforeach() + +# copy dictionaries to $<CONFIG> build dir +if(QT_GENERATOR_IS_MULTI_CONFIG) + add_custom_command(TARGET tst_spellchecking + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E echo Copying dictionares + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/dict + ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> + ) +endif() diff --git a/tests/auto/widgets/spellchecking/tst_spellchecking.cpp b/tests/auto/widgets/spellchecking/tst_spellchecking.cpp index 258071559..ab79ff6cb 100644 --- a/tests/auto/widgets/spellchecking/tst_spellchecking.cpp +++ b/tests/auto/widgets/spellchecking/tst_spellchecking.cpp @@ -26,12 +26,12 @@ ** ****************************************************************************/ -#include "util.h" +#include <util.h> #include <QtTest/QtTest> #include <QtWebEngineCore/qwebengineprofile.h> #include <QtWebEngineCore/qwebenginepage.h> +#include <QtWebEngineCore/qwebenginesettings.h> #include <QtWebEngineWidgets/qwebengineview.h> -#include <qwebenginesettings.h> class WebView : public QWebEngineView { |