diff options
-rw-r--r-- | cmake/QtDeclarativeSetup.cmake | 10 | ||||
-rw-r--r-- | src/qml/Qt6QmlMacros.cmake | 63 | ||||
-rw-r--r-- | src/qml/Qt6QmlResolveMetatypesDependencies.cmake | 85 |
3 files changed, 11 insertions, 147 deletions
diff --git a/cmake/QtDeclarativeSetup.cmake b/cmake/QtDeclarativeSetup.cmake index 116b6013a0..2cd6f56127 100644 --- a/cmake/QtDeclarativeSetup.cmake +++ b/cmake/QtDeclarativeSetup.cmake @@ -46,13 +46,3 @@ function(qt_declarative_generate_reg_exp_jit_tables consuming_target) target_sources(${consuming_target} PRIVATE ${output_file}) target_include_directories(${consuming_target} PRIVATE $<BUILD_INTERFACE:${generate_dir}>) endfunction() - -# special case to set the qmltype resolve dependencies script at build time -set(QT_QMTYPES_RESOLVE_DEPENDENCIES_SCRIPT - "${CMAKE_CURRENT_SOURCE_DIR}/src/qml/Qt6QmlResolveMetatypesDependencies.cmake" -) - -# install QmlResolveDependency script -qt_copy_or_install(FILES "src/qml/Qt6QmlResolveMetatypesDependencies.cmake" - DESTINATION "${QT_CONFIG_INSTALL_DIR}/${INSTALL_CMAKE_NAMESPACE}Qml" -) diff --git a/src/qml/Qt6QmlMacros.cmake b/src/qml/Qt6QmlMacros.cmake index ca13b012a1..a6e2e52bdb 100644 --- a/src/qml/Qt6QmlMacros.cmake +++ b/src/qml/Qt6QmlMacros.cmake @@ -456,10 +456,9 @@ function(qt6_qml_type_registration target) get_target_property(import_version ${target} QT_QML_MODULE_VERSION) get_target_property(target_source_dir ${target} SOURCE_DIR) get_target_property(target_binary_dir ${target} BINARY_DIR) - get_target_property(target_metatypes_dep_file ${target} INTERFACE_QT_META_TYPES_BUILD_DEP_FILE) get_target_property(target_metatypes_file ${target} INTERFACE_QT_META_TYPES_BUILD_FILE) - if (NOT target_metatypes_dep_file) - message(FATAL_ERROR "Target ${target} does not have a meta types dependency file") + if (NOT target_metatypes_file) + message(FATAL_ERROR "Target ${target} does not have a meta types file") endif() # Extract major and minor version @@ -495,65 +494,22 @@ function(qt6_qml_type_registration target) set(foreign_types_file "${target_binary_dir}/qmltypes/foreign_types.txt") set(type_registration_cpp_file "${target_binary_dir}/${type_registration_cpp_file_name}") - if (NOT QT_QMTYPES_RESOLVE_DEPENDENCIES_SCRIPT) - set("${Qt6Qml_DIR}/Qt6QmlResolveMetatypesDependencies.cmake") - endif() - - set(dependency_file_foreign_types "${target_binary_dir}/qmltypes/foreign_types.txt.d") set(dependency_file_cpp "${target_binary_dir}/qmltypes/${type_registration_cpp_file_name}.d") - - file(RELATIVE_PATH dep_file_name "${${CMAKE_PROJECT_NAME}_BINARY_DIR}" "${foreign_types_file}") file(RELATIVE_PATH cpp_file_name "${${CMAKE_PROJECT_NAME}_BINARY_DIR}" "${type_registration_cpp_file}") - set(foreign_types_dependency_args - -DFOREIGN_TYPES_DEP_FILE="${dependency_file_foreign_types}" - -DFOREIGN_TYPES_FILE_NAME="${dep_file_name}" - -DCPP_DEP_FILE="${dependency_file_cpp}" - -DCPP_FILE_NAME="${cpp_file_name}" - ) - set (use_dep_files FALSE) if (CMAKE_GENERATOR STREQUAL "Ninja" OR CMAKE_GENERATOR STREQUAL "Ninja Multi-Config") set(use_dep_files TRUE) endif() - set(foreign_types_common_args - -DMAIN_DEP_FILE:PATH="${target_metatypes_dep_file}" - -DQT_INSTALL_DIR:PATH="${Qt6_DIR}/../../.." + # Enable evaluation of metatypes.json source interfaces + set_target_properties(${target} PROPERTIES QT_CONSUMES_METATYPES TRUE) + set(genex_list "$<REMOVE_DUPLICATES:$<FILTER:$<TARGET_PROPERTY:${target},SOURCES>,INCLUDE,metatypes.json$>>") + set(genex_main "$<JOIN:${genex_list},$<COMMA>>") + file(GENERATE OUTPUT "${foreign_types_file}" + CONTENT "$<IF:$<BOOL:${genex_list}>,--foreign-types=${genex_main},\n>" ) - if (NOT use_dep_files) - set(foreign_types_file_tmp "${foreign_types_file}.tmp") - add_custom_target(${target}_resolve_foreign_types - BYPRODUCTS "${foreign_types_file}" - DEPENDS "${QT_QMTYPES_RESOLVE_DEPENDENCIES_SCRIPT}" - COMMAND ${CMAKE_COMMAND} - -DOUTPUT_FILE:PATH="${foreign_types_file_tmp}" - ${foreign_types_common_args} - -P "${QT_QMTYPES_RESOLVE_DEPENDENCIES_SCRIPT}" - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${foreign_types_file_tmp}" - "${foreign_types_file}" - COMMAND_EXPAND_LISTS - COMMENT "Resolving foreign type dependencies for target ${target}" - ) - add_dependencies(${target}_resolve_foreign_types ${target}_autogen) - else() - add_custom_command( - OUTPUT "${foreign_types_file}" - DEPENDS "${QT_QMTYPES_RESOLVE_DEPENDENCIES_SCRIPT}" - COMMAND ${CMAKE_COMMAND} - - -DOUTPUT_FILE:PATH="${foreign_types_file}" - ${foreign_types_common_args} - ${foreign_types_dependency_args} - -P "${QT_QMTYPES_RESOLVE_DEPENDENCIES_SCRIPT}" - COMMAND_EXPAND_LISTS - DEPFILE "${dependency_file_foreign_types}" - COMMENT "Resolving foreign type dependencies for target ${target}" - ) - endif() - list(APPEND cmd_args "@${foreign_types_file}" ) @@ -575,6 +531,9 @@ function(qt6_qml_type_registration target) set(registration_cpp_file_dep_args) if (use_dep_files) set(registration_cpp_file_dep_args DEPFILE ${dependency_file_cpp}) + file(GENERATE OUTPUT "${dependency_file_cpp}" + CONTENT "${cpp_file_name}: $<IF:$<BOOL:${genex_list}>,\\\n$<JOIN:${genex_list}, \\\n>, \\\n>" + ) endif() set(extra_env_command) diff --git a/src/qml/Qt6QmlResolveMetatypesDependencies.cmake b/src/qml/Qt6QmlResolveMetatypesDependencies.cmake deleted file mode 100644 index dfd213f094..0000000000 --- a/src/qml/Qt6QmlResolveMetatypesDependencies.cmake +++ /dev/null @@ -1,85 +0,0 @@ -# -# Resolve dependencies -# - -if (NOT MAIN_DEP_FILE) - message(FATAL_ERROR "MAIN_DEP_FILE file not specified") -endif() - -if (NOT QT_INSTALL_DIR) - message(FATAL_ERROR "QT_INSTALL_DIR was not specified") -endif() - -if (NOT OUTPUT_FILE) - message(FATAL_ERROR "OUTPUT_FILE not specified") -endif() - -# Read main dep file -if (NOT EXISTS "${MAIN_DEP_FILE}") - message(FATAL_ERROR "${MAIN_DEP_FILE} does not exist") -endif() - -file(STRINGS "${MAIN_DEP_FILE}" remaining) -set(metatypes_list) -set(dep_list) -while(remaining) - - # Pop element off the list - list(POP_FRONT remaining current) - - string(REPLACE "=" ";" file_list "${current}") - list(GET file_list 0 metatypes_file) - list(GET file_list 1 metatypes_dep_file) - - if (NOT IS_ABSOLUTE "${metatypes_file}") - set(metatypes_file "${QT_INSTALL_DIR}/${metatypes_file}") - set(metatypes_dep_file "${QT_INSTALL_DIR}/${metatypes_dep_file}") - endif() - - if (NOT EXISTS "${metatypes_file}") - message(FATAL_ERROR "${metatypes_file} does not exist") - endif() - if (NOT EXISTS "${metatypes_dep_file}") - message(FATAL_ERROR "${metatypes_dep_file} does not exist") - endif() - - list(APPEND metatypes_list "${metatypes_file}") - - file(STRINGS ${metatypes_dep_file} dep_string) - if (dep_string) - list(APPEND remaining "${dep_string}") - endif() - list(APPEND dep_list ${metatypes_dep_file}) -endwhile() - -list(REMOVE_DUPLICATES metatypes_list) -list(REMOVE_DUPLICATES dep_list) -list(JOIN metatypes_list "," metatypes) - -if (metatypes) - file(WRITE ${OUTPUT_FILE} "--foreign-types=${metatypes}\n") -else() - file(WRITE ${OUTPUT_FILE} "\n") -endif() - - -function(gen_dep_file output_file dep_file list) - file(TO_NATIVE_PATH "${dep_file}" dep_file_native) - set(contents "${dep_file_native}: ") - set(native_list) - foreach(file IN LISTS ${list}) - file(TO_NATIVE_PATH "${file}" file_native) - list(APPEND native_list " ${file_native} ") - endforeach() - list(APPEND contents ${native_list}) - list(JOIN contents "\\\n" contents_str) - file(WRITE "${output_file}" "${contents_str}") -endfunction() - -if(FOREIGN_TYPES_DEP_FILE AND FOREIGN_TYPES_FILE_NAME) - gen_dep_file(${FOREIGN_TYPES_DEP_FILE} ${FOREIGN_TYPES_FILE_NAME} dep_list) -endif() - -if(CPP_DEP_FILE AND CPP_FILE_NAME) - gen_dep_file(${CPP_DEP_FILE} ${CPP_FILE_NAME} metatypes_list) -endif() |