diff options
author | Kai Koehne <kai.koehne@qt.io> | 2020-10-28 10:06:54 +0100 |
---|---|---|
committer | Kai Koehne <kai.koehne@qt.io> | 2020-11-04 14:25:00 +0100 |
commit | 97ece9f5186490688353a5fa6431be9ee14d7a22 (patch) | |
tree | 78c470b0ea124b37f14a8e9e1882a4c268d1365f /tests/auto | |
parent | 3101eae233f1f5031c5c814d70dedbc7986e7db8 (diff) |
CMake: Port linguist macros to Qt 6
Fixes: QTBUG-87870
Change-Id: I554b0ededd59dc60fec6a18759e2a400ce594f4d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'tests/auto')
15 files changed, 171 insertions, 118 deletions
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt index aaa32a437..63435e9eb 100644 --- a/tests/auto/CMakeLists.txt +++ b/tests/auto/CMakeLists.txt @@ -16,8 +16,10 @@ if(TARGET Qt::Help AND NOT CMAKE_CROSSCOMPILING) add_subdirectory(qhelpprojectdata) endif() # special case begin -#add_subdirectory(cmake) -#add_subdirectory(installed_cmake) +add_subdirectory(cmake) +if (TARGET Qt::Linguist) + add_subdirectory(cmake/linguist) +endif() # special case end if(QT_FEATURE_process AND WIN32 AND NOT CMAKE_CROSSCOMPILING) add_subdirectory(windeployqt) diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index bf69829fb..d7e981e71 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -1,48 +1,63 @@ +# special case skip regeneration # This is an automatic test for the CMake configuration files. -# To run it, +# To run it manually, # 1) mkdir build # Create a build directory # 2) cd build -# 3) cmake .. # Run cmake on this directory. +# 3) # Run cmake on this directory +# `$qt_prefix/bin/qt-cmake ..` or `cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..` # 4) ctest # Run ctest +# 5) ctest -V -R test_add_translation_macro # Run single test # # The expected output is something like: # -# Start 1: test_translation_macros -# 1/2 Test #1: test_translation_macros .......... Passed 0.98 sec -# Start 2: test_modules -# 2/2 Test #2: test_modules ..................... Passed 1.41 sec +# 1/2 Test #1: test_uiplugin_module ............. Passed 6.33 sec +# Start 4: test_uiplugin_via_designer +# 2/2 Test #2: test_uiplugin_via_designer ....... Passed 9.32 sec +# # # Note that if Qt is not installed, or if it is installed to a # non-standard prefix, the environment variable CMAKE_PREFIX_PATH # needs to be set to the installation prefix or build prefix of Qt # before running these tests. +cmake_minimum_required(VERSION 3.14) -cmake_minimum_required(VERSION 2.8) - -project(qmake_cmake_files) +project(qttools_cmake_tests) enable_testing() -find_package(Qt5Core REQUIRED) - -include("${_Qt5CTestMacros}") +set(required_packages Core) +set(optional_packages Widgets) -if(NOT CMAKE_CROSSCOMPILING) - expect_pass(test_create_translation_macro) - expect_pass(test_add_translation_macro) +# Setup the test when called as a completely standalone project. +if(TARGET Qt6::Core) + # Tests are built as part of the qtbase build tree. + # Setup paths so that the Qt packages are found, similar to examples. + qt_internal_set_up_build_dir_package_paths() endif() -if (NOT NO_WIDGETS) - test_module_includes( - Designer QFormBuilder - Help QHelpSearchQuery - UiTools QUiLoader - ) - - expect_pass(test_uiplugin_via_designer) - if (NOT CMAKE_VERSION VERSION_LESS 3.0) - expect_pass(test_uiplugin_module) +find_package(Qt6 REQUIRED COMPONENTS ${required_packages}) +find_package(Qt6 OPTIONAL_COMPONENTS ${optional_packages}) + +# Setup common test variables which were previously set by ctest_testcase_common.prf. +set(CMAKE_MODULES_UNDER_TEST "${required_packages}") +foreach(qt_package ${optional_packages}) + set(package_name "${QT_CMAKE_EXPORT_NAMESPACE}${qt_package}") + list(APPEND CMAKE_MODULES_UNDER_TEST "${qt_package}") +endforeach() + +foreach(qt_package ${CMAKE_MODULES_UNDER_TEST}) + if(${package_name}_FOUND) + set(CMAKE_${qt_package}_MODULE_MAJOR_VERSION "${${package_name}_VERSION_MAJOR}") + set(CMAKE_${qt_package}_MODULE_MINOR_VERSION "${${package_name}_VERSION_MINOR}") + set(CMAKE_${qt_package}_MODULE_PATCH_VERSION "${${package_name}_VERSION_PATCH}") endif() +endforeach() + +include("${_Qt6CTestMacros}") + +if (TARGET Qt6::Widgets) + _qt_internal_test_expect_pass(test_uiplugin_module) + _qt_internal_test_expect_pass(test_uiplugin_via_designer) endif() diff --git a/tests/auto/cmake/linguist/CMakeLists.txt b/tests/auto/cmake/linguist/CMakeLists.txt new file mode 100644 index 000000000..354c80e3b --- /dev/null +++ b/tests/auto/cmake/linguist/CMakeLists.txt @@ -0,0 +1,60 @@ +# This is an automatic test for the CMake configuration files. +# To run it manually, +# 1) mkdir build # Create a build directory +# 2) cd build +# 3) # Run cmake on this directory +# `$qt_prefix/bin/qt-cmake ..` or `cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..` +# 4) ctest # Run ctest +# 5) ctest -V -R test_add_translation_macro # Run single test +# +# The expected output is something like: +# +# Start 1: test_add_translation_macro +# 1/2 Test #1: test_add_translation_macro ....... Passed 3.13 sec +# Start 2: test_create_translation_macro +# 2/2 Test #2: test_create_translation_macro .... Passed 3.64 sec +# +# +# Note that if Qt is not installed, or if it is installed to a +# non-standard prefix, the environment variable CMAKE_PREFIX_PATH +# needs to be set to the installation prefix or build prefix of Qt +# before running these tests. + +cmake_minimum_required(VERSION 3.14) + +project(qttools_cmake_tests_linguist) + +enable_testing() + +set(required_packages Core LinguistTools) + +# Setup the test when called as a completely standalone project. +if(TARGET Qt6::Core) + # Tests are built as part of the qtbase build tree. + # Setup paths so that the Qt packages are found, similar to examples. + qt_internal_set_up_build_dir_package_paths() +endif() + +find_package(Qt6 REQUIRED COMPONENTS ${required_packages}) + +# Setup common test variables which were previously set by ctest_testcase_common.prf. +set(CMAKE_MODULES_UNDER_TEST "${required_packages}") +foreach(qt_package ${optional_packages}) + set(package_name "${QT_CMAKE_EXPORT_NAMESPACE}${qt_package}") + list(APPEND CMAKE_MODULES_UNDER_TEST "${qt_package}") +endforeach() + +foreach(qt_package ${CMAKE_MODULES_UNDER_TEST}) + if(${package_name}_FOUND) + set(CMAKE_${qt_package}_MODULE_MAJOR_VERSION "${${package_name}_VERSION_MAJOR}") + set(CMAKE_${qt_package}_MODULE_MINOR_VERSION "${${package_name}_VERSION_MINOR}") + set(CMAKE_${qt_package}_MODULE_PATCH_VERSION "${${package_name}_VERSION_PATCH}") + endif() +endforeach() + +include("${_Qt6CTestMacros}") + +_qt_internal_test_expect_pass(test_add_translation_macro) +if (TARGET Qt6::lupdate) + _qt_internal_test_expect_pass(test_create_translation_macro) +endif() diff --git a/tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt b/tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt new file mode 100644 index 000000000..becfecaea --- /dev/null +++ b/tests/auto/cmake/linguist/test_add_translation_macro/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.15) + +project(test_add_translation_macro) + +find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED) + +set(my_srcs myi18nobject.cpp) + +include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir") + +qt_add_translation(qm_files myobject_de.ts OPTIONS -compress) # play around with OPTIONS + +add_executable(test_add_translation ${my_srcs} ${qm_files}) +target_link_libraries(test_add_translation Qt::Core) diff --git a/tests/auto/cmake/test_create_translation_macro/myi18nobject.cpp b/tests/auto/cmake/linguist/test_add_translation_macro/myi18nobject.cpp index ed51b9288..d5e4aba9d 100644 --- a/tests/auto/cmake/test_create_translation_macro/myi18nobject.cpp +++ b/tests/auto/cmake/linguist/test_add_translation_macro/myi18nobject.cpp @@ -26,8 +26,8 @@ ** ****************************************************************************/ -#include <QDebug> #include <QCoreApplication> +#include <QLocale> #include <QTranslator> #include "some_include.h" @@ -36,11 +36,18 @@ int main(int argc, char **argv) { QCoreApplication app(argc, argv); QTranslator *myappTranslator = new QTranslator; - QString localeName = QLocale::system().name(); - myappTranslator->load("myobject_" + localeName + ".qm", qApp->applicationDirPath()); - myappTranslator->setObjectName("myobject_" + localeName); + + QLocale::setDefault(QLocale("de")); + + if (!myappTranslator->load(QLocale(), "myobject", "_", qApp->applicationDirPath())) + qFatal("Could not load translation file!"); + app.installTranslator(myappTranslator); - qDebug() << QObject::tr("Hello, world!"); + QString text = QCoreApplication::translate("main", "Hello, world!"); + if (text != QLatin1String("Hallo, Welt!")) + qFatal("Translation not found!"); + + std::fprintf(stdout, "%s\n", qPrintable(text)); return 0; } diff --git a/tests/auto/cmake/test_create_translation_macro/myobject_de.ts b/tests/auto/cmake/linguist/test_add_translation_macro/myobject_de.ts index 240ffb389..18811c2e3 100644 --- a/tests/auto/cmake/test_create_translation_macro/myobject_de.ts +++ b/tests/auto/cmake/linguist/test_add_translation_macro/myobject_de.ts @@ -2,11 +2,11 @@ <!DOCTYPE TS> <TS version="2.1" language="de_DE"> <context> - <name>QObject</name> + <name>main</name> <message> <location filename="myi18nobject.cpp" line="49"/> <source>Hello, world!</source> - <translation type="unfinished"></translation> + <translation>Hallo, Welt!</translation> </message> </context> </TS> diff --git a/tests/auto/cmake/test_create_translation_macro/some_dir/some_include.h b/tests/auto/cmake/linguist/test_add_translation_macro/some_dir/some_include.h index 62accdf86..2f8411b45 100644 --- a/tests/auto/cmake/test_create_translation_macro/some_dir/some_include.h +++ b/tests/auto/cmake/linguist/test_add_translation_macro/some_dir/some_include.h @@ -29,8 +29,6 @@ #ifndef SOME_INCLUDE_H #define SOME_INCLUDE_H -enum { - Non_Empty_File -}; +enum { Non_Empty_File }; #endif diff --git a/tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt b/tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt new file mode 100644 index 000000000..0dff13711 --- /dev/null +++ b/tests/auto/cmake/linguist/test_create_translation_macro/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.15) + +project(test_create_translation_macros) + +find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED) + +set(my_srcs myi18nobject.cpp) + +include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir") + +qt_create_translation(qm_files ${my_srcs} myobject_de.ts OPTIONS -pro-debug) # play around with OPTIONS + +add_executable(myobject ${my_srcs} ${qm_files}) +target_link_libraries(myobject Qt::Core) diff --git a/tests/auto/cmake/test_add_translation_macro/myi18nobject.cpp b/tests/auto/cmake/linguist/test_create_translation_macro/myi18nobject.cpp index ed51b9288..c990d2f66 100644 --- a/tests/auto/cmake/test_add_translation_macro/myi18nobject.cpp +++ b/tests/auto/cmake/linguist/test_create_translation_macro/myi18nobject.cpp @@ -26,21 +26,26 @@ ** ****************************************************************************/ -#include <QDebug> #include <QCoreApplication> #include <QTranslator> - -#include "some_include.h" +#include <QLocale> int main(int argc, char **argv) { QCoreApplication app(argc, argv); QTranslator *myappTranslator = new QTranslator; - QString localeName = QLocale::system().name(); - myappTranslator->load("myobject_" + localeName + ".qm", qApp->applicationDirPath()); - myappTranslator->setObjectName("myobject_" + localeName); + + QLocale::setDefault(QLocale("de")); + + if (!myappTranslator->load(QLocale(), "myobject", "_", qApp->applicationDirPath())) + qFatal("Could not load translation file!"); + app.installTranslator(myappTranslator); - qDebug() << QObject::tr("Hello, world!"); + QString text = QCoreApplication::translate("main", "Hello, world!"); + if (text != QLatin1String("Hallo, Welt!")) + qFatal("Translation not found!"); + + std::fprintf(stdout, "%s\n", qPrintable(text)); return 0; } diff --git a/tests/auto/cmake/test_add_translation_macro/myobject_de.ts b/tests/auto/cmake/linguist/test_create_translation_macro/myobject_de.ts index 240ffb389..f4f9f4b7b 100644 --- a/tests/auto/cmake/test_add_translation_macro/myobject_de.ts +++ b/tests/auto/cmake/linguist/test_create_translation_macro/myobject_de.ts @@ -2,11 +2,11 @@ <!DOCTYPE TS> <TS version="2.1" language="de_DE"> <context> - <name>QObject</name> + <name>main</name> <message> - <location filename="myi18nobject.cpp" line="49"/> + <location filename="myi18nobject.cpp" line="45"/> <source>Hello, world!</source> - <translation type="unfinished"></translation> + <translation>Hallo, Welt!</translation> </message> </context> </TS> diff --git a/tests/auto/cmake/test_add_translation_macro/some_dir/some_include.h b/tests/auto/cmake/linguist/test_create_translation_macro/some_dir/some_include.h index 62accdf86..2f8411b45 100644 --- a/tests/auto/cmake/test_add_translation_macro/some_dir/some_include.h +++ b/tests/auto/cmake/linguist/test_create_translation_macro/some_dir/some_include.h @@ -29,8 +29,6 @@ #ifndef SOME_INCLUDE_H #define SOME_INCLUDE_H -enum { - Non_Empty_File -}; +enum { Non_Empty_File }; #endif diff --git a/tests/auto/cmake/test_add_translation_macro/CMakeLists.txt b/tests/auto/cmake/test_add_translation_macro/CMakeLists.txt deleted file mode 100644 index a9fd32cea..000000000 --- a/tests/auto/cmake/test_add_translation_macro/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -project(test_add_translation_macro) - -find_package(Qt5Core 5.0.0 REQUIRED) -find_package(Qt5LinguistTools 5.0.0 REQUIRED) - -include_directories( - ${Qt5Core_INCLUDE_DIRS} -) - -add_definitions(${Qt5Core_DEFINITIONS}) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}") - -set(my_srcs myi18nobject.cpp) - -include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir") - -qt5_add_translation(qm_files myobject_de.ts OPTIONS -compress) # play around with OPTIONS - -add_executable(test_add_translation ${my_srcs} ${qm_files}) -target_link_libraries(test_add_translation ${Qt5Core_LIBRARIES}) diff --git a/tests/auto/cmake/test_create_translation_macro/CMakeLists.txt b/tests/auto/cmake/test_create_translation_macro/CMakeLists.txt deleted file mode 100644 index 100d689c7..000000000 --- a/tests/auto/cmake/test_create_translation_macro/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -project(test_create_translation_macros) - -find_package(Qt5Core 5.0.0 REQUIRED) -find_package(Qt5LinguistTools 5.0.0 REQUIRED) - -include_directories( - ${Qt5Core_INCLUDE_DIRS} -) - -add_definitions(${Qt5Core_DEFINITIONS}) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}") - -set(my_srcs myi18nobject.cpp) - -include_directories("${CMAKE_CURRENT_SOURCE_DIR}/some_dir") - -qt5_create_translation(qm_files ${my_srcs} myobject_de.ts OPTIONS -pro-debug) # play around with OPTIONS - -add_executable(myobject ${my_srcs} ${qm_files}) -target_link_libraries(myobject ${Qt5Core_LIBRARIES}) diff --git a/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt b/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt index 062a94960..2c1998840 100644 --- a/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt +++ b/tests/auto/cmake/test_uiplugin_module/CMakeLists.txt @@ -1,11 +1,10 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.15) project(test_uiplugin_module) -find_package(Qt5Widgets REQUIRED) -find_package(Qt5UiPlugin REQUIRED) +find_package(Qt6 COMPONENTS Widgets UiPlugin REQUIRED) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) add_library(my_designer_plugin my_designer_plugin.cpp) -target_link_libraries(my_designer_plugin Qt5::UiPlugin) +target_link_libraries(my_designer_plugin Qt::UiPlugin) diff --git a/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt b/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt index b8edeaa8e..fc1fe6c61 100644 --- a/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt +++ b/tests/auto/cmake/test_uiplugin_via_designer/CMakeLists.txt @@ -1,25 +1,12 @@ - -# Backward compatibility test that code prior to Qt 5.5 linking to -# Qt5::Designer gets the required include directories for using -# the QDesignerCustomWidgetInterface. - -cmake_minimum_required(VERSION 2.8.11) +cmake_minimum_required(VERSION 3.15) project(test_uiplugin_via_designer) -find_package(Qt5Widgets REQUIRED) -find_package(Qt5Xml REQUIRED) -find_package(Qt5Designer REQUIRED) +find_package(Qt6 COMPONENTS Widgets Xml Designer REQUIRED) set(CMAKE_AUTOMOC ON) -set(CMAKE_INCLUDE_CURRENT_DIR ON) -if (NOT CMAKE_VERSION VERSION_LESS 3.0) - set(CMAKE_HAS_INTERFACE 1) -else() - set(CMAKE_HAS_INTERFACE 0) -endif() -add_definitions(-DTEST_UIPLUGIN_USAGE_REQUIREMENTS=${CMAKE_HAS_INTERFACE}) +add_definitions(-DTEST_UIPLUGIN_USAGE_REQUIREMENTS=1) -add_library(my_designer_plugin my_designer_plugin.cpp) -target_link_libraries(my_designer_plugin Qt5::Designer) +add_library(my_uiplugin_via_designer my_designer_plugin.cpp) +target_link_libraries(my_uiplugin_via_designer Qt::Designer) |