aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/CMakeLists.txt')
-rw-r--r--src/qml/CMakeLists.txt91
1 files changed, 90 insertions, 1 deletions
diff --git a/src/qml/CMakeLists.txt b/src/qml/CMakeLists.txt
index 531fb95701..54aa328fb1 100644
--- a/src/qml/CMakeLists.txt
+++ b/src/qml/CMakeLists.txt
@@ -31,6 +31,49 @@ if(ANDROID)
"${INSTALL_CMAKE_NAMESPACE}AndroidQmlMacros.cmake")
endif()
+set_source_files_properties(
+ qml/qqmlcomponent.h qml/qqmlcomponent.cpp qml/qqmlcomponent_p.h
+ qml/qqmlcomponentattached_p.h
+ PROPERTIES
+ SKIP_AUTOMOC TRUE
+)
+
+# We want QQmlComponent and QQmlComponentAttached to be available as metatypes in the builtins,
+# but without depending on QtQml and without duplicating the metaobjects.
+qt_manual_moc(qqmlcomponent_moc_files
+ OUTPUT_MOC_JSON_FILES qqmlcomponent_json_list
+ qml/qqmlcomponent.h
+ qml/qqmlcomponentattached_p.h
+ INCLUDE_DIRECTORY_TARGETS Qt::Qml
+)
+
+# The moc files are included directly by qqmlcomponent.cpp
+set_source_files_properties(${qqmlcomponent_moc_files} PROPERTIES HEADER_FILE_ONLY ON)
+
+qt_internal_add_module(QmlBuiltins
+ STATIC
+ NO_GENERATE_METATYPES # we do that manually below
+ SOURCES
+ qqmlbuiltins_p.h
+)
+
+add_custom_target(QQmlComponentJson DEPENDS ${qqmlcomponent_json_list})
+add_custom_target(QQmlComponentMocs DEPENDS ${qqmlcomponent_moc_files})
+
+target_link_libraries(QmlBuiltins PRIVATE Qt::Core Qt::QmlIntegration)
+
+# We generally need to copy the files into the build directory,
+# so that they are located together with the QML modules
+qt_path_join(qml_build_dir "${QT_BUILD_DIR}" "${INSTALL_QMLDIR}")
+
+# Simulate conditions that qt6_add_qml_module() would normally set up for us
+set_target_properties(QmlBuiltins PROPERTIES
+ QT_QML_MODULE_VERSION 1.0
+ QT_QML_MODULE_URI QML
+ QT_QML_MODULE_TYPEINFO builtins.qmltypes
+ QT_QML_MODULE_OUTPUT_DIRECTORY ${qml_build_dir}
+)
+
qt_internal_add_qml_module(Qml
URI "QtQml.Base"
VERSION "${PROJECT_VERSION}"
@@ -412,6 +455,7 @@ qt_internal_add_qml_module(Qml
${CMAKE_CURRENT_BINARY_DIR}/compiler
${CMAKE_CURRENT_BINARY_DIR}/jsruntime
${CMAKE_CURRENT_BINARY_DIR}/memory
+ ${CMAKE_CURRENT_BINARY_DIR}/qml
${CMAKE_CURRENT_BINARY_DIR}/qmldirparser
../3rdparty/masm
../3rdparty/masm/assembler
@@ -427,6 +471,7 @@ qt_internal_add_qml_module(Qml
debugger
jsruntime
memory
+ qml
qmldirparser
LIBRARIES
Qt::CorePrivate
@@ -434,8 +479,10 @@ qt_internal_add_qml_module(Qml
PUBLIC_LIBRARIES
Qt::Core
Qt::QmlIntegration
+ Qt::QmlBuiltins
PRIVATE_MODULE_INTERFACE
Qt::CorePrivate
+ Qt::QmlBuiltinsPrivate
EXTRA_CMAKE_FILES
"${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}qmldirTemplate.cmake.in"
"${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}QmlPluginTemplate.cpp.in"
@@ -453,12 +500,52 @@ qt_internal_add_qml_module(Qml
QTP0001
)
+target_include_directories(QmlBuiltins PRIVATE
+ $<TARGET_PROPERTY:${QT_CMAKE_EXPORT_NAMESPACE}::QmlPrivate,INTERFACE_INCLUDE_DIRECTORIES>
+)
+
+set(builtins_typeregistration_args
+ MANUAL_MOC_JSON_FILES ${qqmlcomponent_json_list}
+ REGISTRATIONS_TARGET Qml
+)
+
+get_target_property(qt_namespace ${QT_CMAKE_EXPORT_NAMESPACE}::Core _qt_namespace)
+if(qt_namespace)
+ list(APPEND builtins_typeregistration_args NAMESPACE ${qt_namespace})
+endif()
+
+_qt_internal_qml_type_registration(QmlBuiltins ${builtins_typeregistration_args})
+add_dependencies(QmlBuiltins QQmlComponentJson)
+
+add_custom_command(
+ OUTPUT "${qml_build_dir}/jsroot.qmltypes"
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/jsroot.qmltypes"
+ COMMAND
+ "${CMAKE_COMMAND}" -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/jsroot.qmltypes" "${qml_build_dir}"
+)
+
+set(builtins_output_files "")
+list(APPEND builtins_output_files "${qml_build_dir}/builtins.qmltypes")
+list(APPEND builtins_output_files "${qml_build_dir}/jsroot.qmltypes")
+
+add_custom_target(BuiltinsOutput DEPENDS ${builtins_output_files})
+
+qt_install(
+ FILES ${builtins_output_files}
+ DESTINATION "${INSTALL_QMLDIR}"
+)
+
+add_dependencies(Qml QQmlComponentMocs)
+add_dependencies(Qml BuiltinsOutput)
+
qt_update_ignore_pch_source(Qml "compat/removed_api.cpp")
set_source_files_properties(compat/removed_api.cpp
jsruntime/qv4mathobject.cpp # math.h issues on Windows
PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
+
qt_internal_add_qml_module(QmlMeta
URI "QtQml"
VERSION "${PROJECT_VERSION}"
@@ -755,8 +842,10 @@ endif()
# "unknown IID" issue when moc processes plugin sources, because of missing header aliases.
# Qml_sync_headers target is created later by the finalizer in the directory scope so we add this
# dependency manually instead of relying on qt_internal_add_qml_module logic. Same is applicable
-# for QmlMeta target.
+# for the QmlMeta and the QmlBuiltins target.
set_property(TARGET qmlplugin APPEND PROPERTY AUTOGEN_TARGET_DEPENDS
Qml_sync_headers)
set_property(TARGET QmlMeta APPEND PROPERTY AUTOGEN_TARGET_DEPENDS
Qml_sync_headers)
+set_property(TARGET QmlBuiltins APPEND PROPERTY AUTOGEN_TARGET_DEPENDS
+ Qml_sync_headers)