aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/cmake/test_link_qml_module_without_target/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/cmake/test_link_qml_module_without_target/CMakeLists.txt')
-rw-r--r--tests/auto/cmake/test_link_qml_module_without_target/CMakeLists.txt59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/auto/cmake/test_link_qml_module_without_target/CMakeLists.txt b/tests/auto/cmake/test_link_qml_module_without_target/CMakeLists.txt
new file mode 100644
index 0000000000..86c43aa605
--- /dev/null
+++ b/tests/auto/cmake/test_link_qml_module_without_target/CMakeLists.txt
@@ -0,0 +1,59 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_link_qml_module_without_target)
+
+find_package(Qt6 COMPONENTS REQUIRED
+ Core
+ Test
+ Quick
+ QuickLayouts
+ QuickTestUtilsPrivate
+)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+add_subdirectory(Base)
+add_subdirectory(Derived)
+
+qt6_add_executable(test_link_qml_module_without_target main.cpp)
+
+target_link_libraries(test_link_qml_module_without_target PRIVATE
+ Qt6::Core
+ Qt6::Test
+ Qt6::QuickPrivate
+ Qt6::QuickTestUtilsPrivate
+)
+
+# Suppress running qmlimportscanner and auto linking of static qml plugins, to ensure we don't
+# automatically link to the project-created qml module object library initializers.
+# Doing that would be at odds with what the test is trying to test.
+set_target_properties(test_link_qml_module_without_target PROPERTIES _QT_QML_PLUGINS_IMPORTED TRUE)
+
+# Because we disable qmlimportscanner auto-linking above, we need to manually link to the Qt
+# provided qml plugins used by the project. Note that we link to the plugins, and not the
+# backing libraries, to ensure we link to the initializer object libraries as well
+# (which are dependencies of the plugin targets).
+if(NOT QT6_IS_SHARED_LIBS_BUILD)
+ target_link_libraries(test_link_qml_module_without_target PRIVATE
+ Qt6::qtquick2plugin
+ Qt6::qquicklayoutsplugin
+ )
+endif()
+
+# Make sure we build the libraries before we link to them.
+add_dependencies(test_link_qml_module_without_target Base Baseplugin Derived Derivedplugin)
+
+# Link against the library files and not the targets, so that we can confirm
+# the ability to manually initialize the qml modules and their resources from inside main.cpp
+# using Q_IMPORT_QML_PLUGIN calls.
+# The order of libraries is important, the plugins need to come before the backing libraries
+# so that linkers like 'Linux ld' don't discard symbols that haven't yet been marked as required.
+target_link_libraries(test_link_qml_module_without_target PRIVATE
+ $<TARGET_FILE:Baseplugin>
+ $<TARGET_FILE:Base>
+ $<TARGET_FILE:Derivedplugin>
+ $<TARGET_FILE:Derived>
+)