aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeander Beernaert <leander.beernaert@qt.io>2020-02-07 14:13:33 +0100
committerLeander Beernaert <leander.beernaert@qt.io>2020-02-10 15:08:14 +0000
commit3e0edc61cf4d2e0a613ed971f42a96120b094ecc (patch)
tree30480d3af5c5cd117608a9cb87c189cbaf4ec991
parent2f7cd5457c5bc7e3e3a1cc94ae89680ab66f0bd8 (diff)
Update metatypes dependency calculation
Retrieve the list of dependent metatypes.json using the new source interfaces. Change-Id: I6ab57f370864031f2dbd097f14c3ebe6e7601d61 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-rw-r--r--cmake/QtDeclarativeSetup.cmake10
-rw-r--r--src/qml/Qt6QmlMacros.cmake63
-rw-r--r--src/qml/Qt6QmlResolveMetatypesDependencies.cmake85
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()