summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorLeander Beernaert <leander.beernaert@qt.io>2020-01-27 14:56:40 +0100
committerLeander Beernaert <leander.beernaert@qt.io>2020-01-29 14:20:54 +0000
commita6ccef651ddc075cf205bbd2693a26c08de6817a (patch)
tree5f0fc413ee109bd792cdafdf4051db3b9e5ac268 /cmake
parent34a112e383d4ce3f6fe7417c1873fd3b33176032 (diff)
Generate metatypes dependency file
Due to generator expression it is impossible to recursively evaluate the link dependencies of a target. This is required by QtDeclarative's qmltyperegistrar. To overcome this we generate a ${target}_metatypes_dep.txt file which contain lines with the following pattern: ${PATH_TO_METATYPES.json}=${PATH_TO_METATYPES_DEP.txt} This can be used to recursively evaluate the dependencies at run time. Change-Id: Ia4cee0632c16ba9631e0289db906fe9d320844a3 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Qt CMake Build Bot
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtBuild.cmake35
-rw-r--r--cmake/QtModuleConfig.cmake.in22
2 files changed, 37 insertions, 20 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index d223ac0617..e9fcd38d0d 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -1827,6 +1827,21 @@ function(qt_add_module target)
set(QT_CMAKE_EXPORT_NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE})")
endif()
+ # Generate metatypes
+ set(QT_MODULE_HAS_META_TYPES_FILE FALSE)
+ if (${arg_GENERATE_METATYPES})
+ set(QT_MODULE_HAS_META_TYPES_FILE TRUE)
+ set(metatypes_install_dir ${INSTALL_LIBDIR}/metatypes)
+ set(args)
+ if (NOT QT_WILL_INSTALL)
+ set(args COPY_OVER_INSTALL INSTALL_DIR "${QT_BUILD_DIR}/${metatypes_install_dir}")
+ else()
+ set(args INSTALL_DIR "${metatypes_install_dir}")
+ endif()
+ qt6_generate_meta_types_json_file(${target} ${args})
+ get_target_property(QT_MODULE_META_TYPES_FILE ${target} INTERFACE_QT_META_TYPES_INSTALL_FILE)
+ get_target_property(QT_MODULE_META_TYPES_DEP_FILE ${target} INTERFACE_QT_META_TYPES_INSTALL_DEP_FILE)
+ endif()
configure_package_config_file(
"${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
"${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
@@ -1933,26 +1948,6 @@ set(QT_CMAKE_EXPORT_NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE})")
qt_describe_module(${target})
- # Generate metatypes
- if (${arg_GENERATE_METATYPES})
- qt6_generate_meta_types_json_file(${target})
- get_target_property(target_metatypes_file ${target} QT_MODULE_META_TYPES_FILE)
- if (target_metatypes_file)
- set(metatypes_install_dir ${INSTALL_LIBDIR}/metatypes)
- qt_install(FILES ${target_metatypes_file}
- DESTINATION ${metatypes_install_dir}
- )
- # For non prefix builds
- if(NOT QT_WILL_INSTALL)
- get_filename_component(file_name ${target_metatypes_file} NAME)
- set(copy_destination ${QT_BUILD_DIR}/${metatypes_install_dir}/${file_name})
- add_custom_command(TARGET ${target} POST_BUILD
- COMMAND ${CMAKE_COMMAND}
- -E copy_if_different ${target_metatypes_file} ${copy_destination}
- )
- endif()
- endif()
- endif()
endfunction()
function(qt_export_tools module_name)
diff --git a/cmake/QtModuleConfig.cmake.in b/cmake/QtModuleConfig.cmake.in
index 8e24362502..58a84fb5d5 100644
--- a/cmake/QtModuleConfig.cmake.in
+++ b/cmake/QtModuleConfig.cmake.in
@@ -44,3 +44,25 @@ if(NOT _qt_module_target_type STREQUAL "INTERFACE_LIBRARY")
list(APPEND QT_ALL_PLUGIN_TYPES_FOUND_VIA_FIND_PACKAGE "${_qt_module_plugin_types}")
endif()
endif()
+
+# Apply meta types properties
+if (@QT_MODULE_HAS_META_TYPES_FILE@)
+ if (NOT QT_NO_CREATE_TARGETS)
+ set_target_properties("@INSTALL_CMAKE_NAMESPACE@::@target@" PROPERTIES
+ INTERFACE_QT_MODULE_HAS_META_TYPES TRUE
+ INTERFACE_QT_META_TYPES_INSTALL_FILE "@QT_MODULE_META_TYPES_FILE@"
+ INTERFACE_QT_META_TYPES_INSTALL_DEP_FILE "@QT_MODULE_META_TYPES_DEP_FILE@"
+ )
+ endif()
+
+ if (NOT QT_NO_CREATE_VERSIONLESS_TARGETS)
+ get_target_property(is_alias_target "Qt::@target@" ALIASED_TARGET)
+ if (NOT is_alias_target)
+ set_target_properties("Qt::@target@" PROPERTIES
+ INTERFACE_QT_MODULE_HAS_META_TYPES TRUE
+ INTERFACE_QT_META_TYPES_INSTALL_FILE "@QT_MODULE_META_TYPES_FILE@"
+ INTERFACE_QT_META_TYPES_INSTALL_DEP_FILE "@QT_MODULE_META_TYPES_DEP_FILE@"
+ )
+ endif()
+ endif()
+endif()