summaryrefslogtreecommitdiffstats
path: root/tests/auto/cmake/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/cmake/CMakeLists.txt')
-rw-r--r--tests/auto/cmake/CMakeLists.txt83
1 files changed, 57 insertions, 26 deletions
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index d8103d37f0..b270ab4eda 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -1,10 +1,13 @@
+# special case skip regeneration
# 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) 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_wrap_cpp_options # Run single test
#
# The expected output is something like:
#
@@ -37,15 +40,46 @@
# needs to be set to the installation prefix or build prefix of Qt
# before running these tests.
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.14)
-project(qmake_cmake_files)
+project(cmake_usage_tests)
enable_testing()
-find_package(Qt5Core REQUIRED)
+# Most of the tests fail to build on Boot2qt / qemu with undefined references to QtDBus because
+# it's a private dependency of QtGui, and CMake for some reason doesn't generate an -rpath-link
+# flag. Notably -rpath is specified which should implicitly enable -rpath-link, but that
+# doesn't seem to be the case.
+# Until this is figured out, disable the tests when cross-compiling to Linux.
+if(UNIX AND NOT APPLE AND NOT WIN32 AND CMAKE_CROSSCOMPILING AND NOT QT_ENABLE_CMAKE_BOOT2QT_TESTS)
+ message(STATUS "Running CMake tests is disabled when cross-compiling to Linux / Boot2Qt.")
+ return()
+endif()
+
+set(required_packages Core Network Xml Sql Test)
+set(optional_packages DBus Gui Widgets PrintSupport OpenGL Concurrent)
+
+# Setup the test when called as a completely standalone project.
+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("${_Qt5CTestMacros}")
+
+include("${_Qt6CTestMacros}")
expect_pass(test_umbrella_config)
expect_pass(test_wrap_cpp_and_resources)
@@ -58,7 +92,7 @@ expect_fail(test_wrap_cpp_options)
expect_pass(test_platform_defs_include)
expect_pass(test_qtmainwin_library)
-if (HAVE_NINJA)
+if (CMAKE_GENERATOR STREQUAL Ninja AND UNIX AND NOT WIN32)
make_directory("${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA/build")
add_test(test_QFINDTESTDATA ${CMAKE_CTEST_COMMAND}
--build-and-test
@@ -66,10 +100,12 @@ if (HAVE_NINJA)
# Build in a subdir of the source dir.
# This causes Ninja to use relative paths.
"${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA/build"
- --build-generator Ninja
- --build-options "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
+ --build-config "${CMAKE_BUILD_TYPE}"
+ --build-generator "${CMAKE_GENERATOR}"
+ --build-makeprogram "${CMAKE_MAKE_PROGRAM}"
+ --build-options "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" ${BUILD_OPTIONS_LIST}
)
- add_test(NAME run_test_QFINDTESTDATA COMMAND sh -c "cd \"${CMAKE_SOURCE_DIR}/test_QFINDTESTDATA/build/tests\" && ./test_QFINDTESTDATA -v2")
+ add_test(NAME run_test_QFINDTESTDATA COMMAND sh -c "cd \"${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA/build/tests\" && ./test_QFINDTESTDATA -v2")
set_property(TEST run_test_QFINDTESTDATA
PROPERTY DEPENDS test_QFINDTESTDATA
@@ -118,7 +154,7 @@ endif()
if (NOT NO_WIDGETS)
list(APPEND qt_module_includes
Widgets QWidget
- OpenGL QGLBuffer
+ OpenGL QOpenGLBuffer
PrintSupport QPrinter
)
endif()
@@ -133,9 +169,6 @@ test_module_includes(
${qt_module_includes}
)
expect_pass(test_concurrent_module)
-if (QT_WITH_ANGLE OR (NOT WIN32 AND NOT APPLE AND NOT NO_EGL))
- expect_pass(test_egl_lib)
-endif()
expect_pass(test_opengl_lib)
if (NOT NO_WIDGETS)
@@ -145,19 +178,17 @@ endif()
expect_pass(test_interface_link_libraries)
expect_pass(test_moc_macro_target)
-if (NOT CMAKE_VERSION VERSION_LESS 3.9)
- # The modification of TARGET_OBJECTS needs the following change in cmake
- # https://gitlab.kitware.com/cmake/cmake/commit/93c89bc75ceee599ba7c08b8fe1ac5104942054f
- expect_pass(test_add_big_resource)
-endif()
+# The modification of TARGET_OBJECTS needs the following change in cmake
+# https://gitlab.kitware.com/cmake/cmake/commit/93c89bc75ceee599ba7c08b8fe1ac5104942054f
+# FIXME: Doesn't currently work with namespaced Qt builds QTBUG-85620
+# expect_pass(test_add_big_resource)
-if (NOT CMAKE_VERSION VERSION_LESS 3.8)
- # With earlier CMake versions, this test would simply run moc multiple times and lead to:
- # /usr/bin/ld: error: CMakeFiles/mywidget.dir/mywidget_automoc.cpp.o: multiple definition of 'MyWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)'
- # /usr/bin/ld: CMakeFiles/mywidget.dir/moc_mywidget.cpp.o: previous definition here
- # Reason: SKIP_* properties were added in CMake 3.8 only
- expect_pass(test_QTBUG-63422)
-endif()
+# With earlier CMake versions, this test would simply run moc multiple times and lead to:
+# /usr/bin/ld: error: CMakeFiles/mywidget.dir/mywidget_automoc.cpp.o: multiple definition of 'MyWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)'
+# /usr/bin/ld: CMakeFiles/mywidget.dir/moc_mywidget.cpp.o: previous definition here
+# Reason: SKIP_* properties were added in CMake 3.8 only
+expect_pass(test_QTBUG-63422)
-expect_pass(test_import_plugins BINARY ${CMAKE_CTEST_COMMAND})
+# FIXME: Needs porting of the qmake .pro files to create the modules and plugins in Qt6 CMake land.
+# expect_pass(test_import_plugins BINARY ${CMAKE_CTEST_COMMAND})
expect_pass(test_versionless_targets)