diff options
Diffstat (limited to 'src/qml/CMakeLists.txt')
-rw-r--r-- | src/qml/CMakeLists.txt | 91 |
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) |