summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtPublicPluginHelpers.cmake26
-rw-r--r--src/corelib/Qt6CoreMacros.cmake10
2 files changed, 33 insertions, 3 deletions
diff --git a/cmake/QtPublicPluginHelpers.cmake b/cmake/QtPublicPluginHelpers.cmake
index 0c4eebec0b..8c98852c49 100644
--- a/cmake/QtPublicPluginHelpers.cmake
+++ b/cmake/QtPublicPluginHelpers.cmake
@@ -150,8 +150,30 @@ endfunction()
# Generates C++ import macro source code for given plugin
function(__qt_internal_get_plugin_import_macro plugin_target out_var)
- set(plugin_target_versioned "${QT_CMAKE_EXPORT_NAMESPACE}::${plugin_target}")
- get_target_property(class_name "${plugin_target_versioned}" QT_PLUGIN_CLASS_NAME)
+ set(plugin_target_prefixed "${QT_CMAKE_EXPORT_NAMESPACE}::${plugin_target}")
+
+ # Query the class name of plugin targets prefixed with a Qt namespace and without, this is
+ # needed to support plugin object initializers created by user projects.
+ set(class_name"")
+ set(class_name_prefixed "")
+
+ if(TARGET ${plugin_target})
+ get_target_property(class_name "${plugin_target}" QT_PLUGIN_CLASS_NAME)
+ endif()
+
+ if(TARGET ${plugin_target_prefixed})
+ get_target_property(class_name_prefixed "${plugin_target_prefixed}" QT_PLUGIN_CLASS_NAME)
+ endif()
+
+ if(NOT class_name AND NOT class_name_prefixed)
+ message(FATAL_ERROR "No QT_PLUGIN_CLASS_NAME value on target: '${plugin_target}'")
+ endif()
+
+ # Qt prefixed target takes priority.
+ if(class_name_prefixed)
+ set(class_name "${class_name_prefixed}")
+ endif()
+
set(${out_var} "Q_IMPORT_PLUGIN(${class_name})" PARENT_SCOPE)
endfunction()
diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake
index ce09f83ca5..3636ddecd9 100644
--- a/src/corelib/Qt6CoreMacros.cmake
+++ b/src/corelib/Qt6CoreMacros.cmake
@@ -1807,7 +1807,6 @@ function(qt6_add_plugin target)
endif()
# Derive the class name from the target name if it's not explicitly specified.
- # Don't set it for qml plugins though.
set(plugin_class_name "")
if (NOT "${arg_TYPE}" STREQUAL "qml_plugin")
if (NOT arg_CLASS_NAME)
@@ -1815,7 +1814,16 @@ function(qt6_add_plugin target)
else()
set(plugin_class_name "${arg_CLASS_NAME}")
endif()
+ else()
+ # Make sure to set any passed-in class name for qml plugins as well, because it's used for
+ # building the qml plugin foo_init object libraries.
+ if(arg_CLASS_NAME)
+ set(plugin_class_name "${arg_CLASS_NAME}")
+ else()
+ message(FATAL_ERROR "Qml plugin target has no CLASS_NAME specified: '${target}'")
+ endif()
endif()
+
set_target_properties(${target} PROPERTIES QT_PLUGIN_CLASS_NAME "${plugin_class_name}")
target_compile_definitions(${target} PRIVATE