63d9cd17d0
This commit adds transitive dependencies to the plugins, so that a sane set of default plugins get auto-imported when linking against a module. It also provides a new function, qt5_import_plugins(), which allows you to override the set of plugins that get imported. The decision of whether or not to import a specific plugin is based on several custom target properties and a very clever generator expression. Note that this change only imports plugins on static Qt builds. It does nothing on shared Qt builds, as the shared libraries already have their own plugin import mechanism. [ChangeLog][CMake] Added ability to auto-import non-qml plugins on CMake builds Task-number: QTBUG-38913 Task-number: QTBUG-76562 Change-Id: I2d6c8908b521cf6ba1ebbbc33a87cb7ddd9935cf Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
165 lines
5.5 KiB
CMake
165 lines
5.5 KiB
CMake
|
|
# 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.
|
|
# 4) ctest # Run ctest
|
|
#
|
|
# The expected output is something like:
|
|
#
|
|
# Start 1: test_use_modules_function
|
|
# 1/11 Test #1: test_use_modules_function ........ Passed 3.36 sec
|
|
# Start 2: test_wrap_cpp_and_resources
|
|
# 2/11 Test #2: test_wrap_cpp_and_resources ...... Passed 1.41 sec
|
|
# Start 3: test_dependent_modules
|
|
# 3/11 Test #3: test_dependent_modules ........... Passed 2.22 sec
|
|
# Start 4: test_add_resource_options
|
|
# 4/11 Test #4: test_add_resource_options ........ Passed 0.16 sec
|
|
# Start 5: test_wrap_cpp_options
|
|
# 5/11 Test #5: test_wrap_cpp_options ............ Passed 0.36 sec
|
|
# Start 6: test_needsquoting_dirname
|
|
# 6/11 Test #6: test_needsquoting_dirname ........ Passed 2.20 sec
|
|
# Start 7: test_platform_defs_include
|
|
# 7/11 Test #7: test_platform_defs_include ....... Passed 0.28 sec
|
|
# Start 8: test_qtmainwin_library
|
|
# 8/11 Test #8: test_qtmainwin_library ........... Passed 1.27 sec
|
|
# Start 9: test_dbus_module
|
|
# 9/11 Test #9: test_dbus_module ................. Passed 3.46 sec
|
|
# Start 10: test_multiple_find_package
|
|
# 10/11 Test #10: test_multiple_find_package ....... Passed 0.07 sec
|
|
# Start 11: test_add_resources_delayed_file
|
|
# 11/11 Test #11: test_add_resources_delayed_file .. Passed 0.38 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 2.8)
|
|
|
|
project(qmake_cmake_files)
|
|
|
|
enable_testing()
|
|
|
|
find_package(Qt5Core REQUIRED)
|
|
|
|
include("${_Qt5CTestMacros}")
|
|
|
|
expect_pass(test_use_modules_function)
|
|
expect_pass(test_umbrella_config)
|
|
expect_pass(test_wrap_cpp_and_resources)
|
|
if (NOT NO_WIDGETS)
|
|
expect_pass(test_dependent_modules)
|
|
expect_pass("test(needsquoting)dirname")
|
|
endif()
|
|
expect_fail(test_add_resource_options)
|
|
expect_fail(test_wrap_cpp_options)
|
|
expect_pass(test_platform_defs_include)
|
|
expect_pass(test_qtmainwin_library)
|
|
|
|
if (HAVE_NINJA)
|
|
make_directory("${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA/build")
|
|
add_test(test_QFINDTESTDATA ${CMAKE_CTEST_COMMAND}
|
|
--build-and-test
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA"
|
|
# 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}"
|
|
)
|
|
add_test(NAME run_test_QFINDTESTDATA COMMAND sh -c "cd \"${CMAKE_SOURCE_DIR}/test_QFINDTESTDATA/build/tests\" && ./test_QFINDTESTDATA -v2")
|
|
|
|
set_property(TEST run_test_QFINDTESTDATA
|
|
PROPERTY DEPENDS test_QFINDTESTDATA
|
|
)
|
|
endif()
|
|
|
|
if (NOT NO_DBUS)
|
|
expect_pass(test_dbus_module)
|
|
endif()
|
|
expect_pass(test_multiple_find_package)
|
|
expect_pass(test_add_resources_delayed_file)
|
|
expect_pass(test_add_binary_resources_delayed_file BINARY test_add_binary_resources_delayed_file)
|
|
expect_pass(test_private_includes)
|
|
expect_pass(test_private_targets)
|
|
expect_pass(test_testlib_definitions)
|
|
expect_pass(test_json_plugin_includes)
|
|
|
|
expect_fail(test_testlib_no_link_gui)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_testlib_definitions/main.cpp"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/failbuild/test_testlib_no_link_gui/test_testlib_no_link_gui/"
|
|
)
|
|
|
|
if (NOT NO_WIDGETS)
|
|
expect_fail(test_testlib_no_link_widgets)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_testlib_definitions/main.cpp"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/failbuild/test_testlib_no_link_widgets/test_testlib_no_link_widgets/"
|
|
)
|
|
endif()
|
|
|
|
set(qt_module_includes
|
|
Core QObject
|
|
Network QHostInfo
|
|
Sql QSqlError
|
|
Test QTestEventList
|
|
Xml QDomDocument
|
|
)
|
|
|
|
if (NOT NO_GUI)
|
|
list(APPEND qt_module_includes
|
|
Gui QImage
|
|
)
|
|
endif()
|
|
|
|
if (NOT NO_WIDGETS)
|
|
list(APPEND qt_module_includes
|
|
Widgets QWidget
|
|
OpenGL QGLBuffer
|
|
PrintSupport QPrinter
|
|
)
|
|
endif()
|
|
|
|
if (NOT NO_DBUS)
|
|
list(APPEND qt_module_includes
|
|
DBus QDBusMessage
|
|
)
|
|
endif()
|
|
|
|
test_module_includes(
|
|
${qt_module_includes}
|
|
)
|
|
expect_pass(test_concurrent_module)
|
|
expect_pass(test_openglextensions_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)
|
|
expect_pass(test_interface)
|
|
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()
|
|
|
|
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()
|
|
|
|
expect_pass(test_import_plugins BINARY ${CMAKE_CTEST_COMMAND})
|