aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/qml/qmlextensionplugins/CMakeLists.txt2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt1
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt1
-rw-r--r--examples/qmltest/qmltest/CMakeLists.txt1
-rw-r--r--examples/quick/customitems/painteditem/CMakeLists.txt2
-rw-r--r--examples/quick/imageprovider/CMakeLists.txt2
-rw-r--r--examples/quick/imageresponseprovider/CMakeLists.txt2
-rw-r--r--src/qml/Qt6QmlBuildInternals.cmake3
-rw-r--r--src/qml/Qt6QmlMacros.cmake33
9 files changed, 40 insertions, 7 deletions
diff --git a/examples/qml/qmlextensionplugins/CMakeLists.txt b/examples/qml/qmlextensionplugins/CMakeLists.txt
index dcfde4a8ae..6ea73f83a4 100644
--- a/examples/qml/qmlextensionplugins/CMakeLists.txt
+++ b/examples/qml/qmlextensionplugins/CMakeLists.txt
@@ -14,6 +14,7 @@ if(NOT DEFINED INSTALL_EXAMPLESDIR)
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/qmlextensionplugins/imports/TimeExample")
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples/qml/qmlextensionplugins/imports)
find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
@@ -23,7 +24,6 @@ set_source_files_properties(imports/TimeExample/Clock.qml PROPERTIES
QT_RESOURCE_ALIAS Clock.qml
)
qt6_add_qml_module(qmlqtimeexample
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/imports/TimeExample"
VERSION 1.0
URI "TimeExample"
SOURCES timemodel.cpp timemodel.h
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
index 1c19c84caa..59ecdeae6b 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
@@ -14,6 +14,7 @@ if(NOT DEFINED INSTALL_EXAMPLESDIR)
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter6-plugins")
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt
index f75028aa69..93ec5c5169 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt
@@ -21,7 +21,6 @@ find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
qt6_add_qml_module(chartsplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../Charts"
VERSION 1.0
URI "Charts"
PLUGIN_TARGET chartsplugin
diff --git a/examples/qmltest/qmltest/CMakeLists.txt b/examples/qmltest/qmltest/CMakeLists.txt
index c8a8361578..369e31fe7d 100644
--- a/examples/qmltest/qmltest/CMakeLists.txt
+++ b/examples/qmltest/qmltest/CMakeLists.txt
@@ -14,6 +14,7 @@ if(NOT DEFINED INSTALL_EXAMPLESDIR)
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples)
find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
diff --git a/examples/quick/customitems/painteditem/CMakeLists.txt b/examples/quick/customitems/painteditem/CMakeLists.txt
index fa964778d0..09f3424f15 100644
--- a/examples/quick/customitems/painteditem/CMakeLists.txt
+++ b/examples/quick/customitems/painteditem/CMakeLists.txt
@@ -14,6 +14,7 @@ if(NOT DEFINED INSTALL_EXAMPLESDIR)
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/painteditem/TextBalloonPlugin")
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples/quick/customitems/painteditem)
find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
@@ -21,7 +22,6 @@ find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
qt6_add_qml_module(qmltextballoonplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/TextBalloonPlugin"
VERSION 1.0
URI "TextBalloonPlugin"
PLUGIN_TARGET qmltextballoonplugin
diff --git a/examples/quick/imageprovider/CMakeLists.txt b/examples/quick/imageprovider/CMakeLists.txt
index 5a25a45deb..82e1bd2a51 100644
--- a/examples/quick/imageprovider/CMakeLists.txt
+++ b/examples/quick/imageprovider/CMakeLists.txt
@@ -14,6 +14,7 @@ if(NOT DEFINED INSTALL_EXAMPLESDIR)
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageprovider/ImageProviderCore")
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples/quick/imageprovider)
find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
@@ -21,7 +22,6 @@ find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
qt6_add_qml_module(qmlimageproviderplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ImageProviderCore"
VERSION 1.0
URI "ImageProviderCore"
PLUGIN_TARGET qmlimageproviderplugin
diff --git a/examples/quick/imageresponseprovider/CMakeLists.txt b/examples/quick/imageresponseprovider/CMakeLists.txt
index 551ce01197..47dbab159d 100644
--- a/examples/quick/imageresponseprovider/CMakeLists.txt
+++ b/examples/quick/imageresponseprovider/CMakeLists.txt
@@ -14,6 +14,7 @@ if(NOT DEFINED INSTALL_EXAMPLESDIR)
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageresponseprovider/ImageResponseProviderCore")
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples/quick/imageresponseprovider)
find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
@@ -21,7 +22,6 @@ find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
qt6_add_qml_module(qmlimageresponseproviderplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ImageResponseProviderCore"
VERSION 1.0
URI "ImageResponseProviderCore"
PLUGIN_TARGET qmlimageresponseproviderplugin
diff --git a/src/qml/Qt6QmlBuildInternals.cmake b/src/qml/Qt6QmlBuildInternals.cmake
index 3c1ecab69a..191fa690f5 100644
--- a/src/qml/Qt6QmlBuildInternals.cmake
+++ b/src/qml/Qt6QmlBuildInternals.cmake
@@ -105,11 +105,12 @@ function(qt_internal_add_qml_module target)
${ARGN}
)
+ set(QT_QML_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_QMLDIR}")
if(NOT arg_TARGET_PATH)
string(REPLACE "." "/" arg_TARGET_PATH ${arg_URI})
endif()
if(NOT arg_OUTPUT_DIRECTORY)
- set(arg_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_QMLDIR}/${arg_TARGET_PATH}")
+ set(arg_OUTPUT_DIRECTORY "${QT_QML_OUTPUT_DIRECTORY}/${arg_TARGET_PATH}")
endif()
if(NOT arg_INSTALL_DIRECTORY)
set(arg_INSTALL_DIRECTORY "${INSTALL_QMLDIR}/${arg_TARGET_PATH}")
diff --git a/src/qml/Qt6QmlMacros.cmake b/src/qml/Qt6QmlMacros.cmake
index 24a88737ee..2ee1680993 100644
--- a/src/qml/Qt6QmlMacros.cmake
+++ b/src/qml/Qt6QmlMacros.cmake
@@ -281,7 +281,17 @@ function(qt6_add_qml_module target)
ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}"
)
else()
- set(arg_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ if("${QT_QML_OUTPUT_DIRECTORY}" STREQUAL "")
+ set(arg_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+ else()
+ if(NOT IS_ABSOLUTE "${QT_QML_OUTPUT_DIRECTORY}")
+ message(FATAL_ERROR
+ "QT_QML_OUTPUT_DIRECTORY must be an absolute path, but given: "
+ "${QT_QML_OUTPUT_DIRECTORY}"
+ )
+ endif()
+ set(arg_OUTPUT_DIRECTORY ${QT_QML_OUTPUT_DIRECTORY}/${arg_TARGET_PATH})
+ endif()
endif()
# TODO: Support for old keyword, remove once all repos no longer use CLASSNAME
@@ -595,6 +605,13 @@ function(_qt_internal_target_enable_qmllint target)
_qt_generated_qrc_files "--resource$<SEMICOLON>" "$<SEMICOLON>"
)
+ # Facilitate self-import so it can find the qmldir file
+ list(APPEND import_args -I "${CMAKE_CURRENT_BINARY_DIR}")
+
+ if(NOT "${QT_QML_OUTPUT_DIRECTORY}" STREQUAL "")
+ list(APPEND import_args -I "${QT_QML_OUTPUT_DIRECTORY}")
+ endif()
+
set(cmd
${QT_TOOL_COMMAND_WRAPPER_PATH}
${QT_CMAKE_EXPORT_NAMESPACE}::qmllint
@@ -929,6 +946,10 @@ function(qt6_add_qml_plugin target)
_qt_internal_get_escaped_uri("${arg_URI}" escaped_uri)
if(TARGET ${target})
+ get_target_property(target_type ${target} TYPE)
+ if(target_type STREQUAL "EXECUTABLE")
+ message(FATAL_ERROR "Plugins cannot be executables (target: ${target})")
+ endif()
foreach(arg IN ITEMS STATIC SHARED)
if(arg_${arg})
message(FATAL_ERROR
@@ -1018,6 +1039,8 @@ function(qt6_add_qml_plugin target)
endif()
if(arg_OUTPUT_DIRECTORY)
+ # Plugin target must be in the output directory. The backing target,
+ # if it is different to the plugin target, can be anywhere.
set_target_properties(${target} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${arg_OUTPUT_DIRECTORY}
LIBRARY_OUTPUT_DIRECTORY ${arg_OUTPUT_DIRECTORY}
@@ -1789,10 +1812,18 @@ but this file does not exist. Possible reasons include:
-importPath "${qml_path}"
)
get_target_property(qml_import_path ${target} QT_QML_IMPORT_PATH)
+
if (qml_import_path)
list(APPEND cmd_args ${qml_import_path})
endif()
+ # Facilitate self-import so we can find the qmldir file
+ list(APPEND cmd_args "${CMAKE_CURRENT_BINARY_DIR}")
+
+ if(NOT "${QT_QML_OUTPUT_DIRECTORY}" STREQUAL "" AND EXISTS "${QT_QML_OUTPUT_DIRECTORY}")
+ list(APPEND cmd_args "${QT_QML_OUTPUT_DIRECTORY}")
+ endif()
+
get_target_property(qml_files ${target} QT_QML_MODULE_FILES)
if (qml_files)
list(APPEND cmd_args "-qmlFiles" ${qml_files})