summaryrefslogtreecommitdiffstats
path: root/cmake/QtFrameworkHelpers.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtFrameworkHelpers.cmake')
-rw-r--r--cmake/QtFrameworkHelpers.cmake93
1 files changed, 80 insertions, 13 deletions
diff --git a/cmake/QtFrameworkHelpers.cmake b/cmake/QtFrameworkHelpers.cmake
index 6d67bc4a11..0a37573ff6 100644
--- a/cmake/QtFrameworkHelpers.cmake
+++ b/cmake/QtFrameworkHelpers.cmake
@@ -37,6 +37,7 @@ macro(qt_find_apple_system_frameworks)
qt_internal_find_apple_system_framework(FWContacts Contacts)
qt_internal_find_apple_system_framework(FWEventKit EventKit)
qt_internal_find_apple_system_framework(FWHealthKit HealthKit)
+ qt_internal_find_apple_system_framework(FWUniformTypeIdentifiers UniformTypeIdentifiers)
endif()
endmacro()
@@ -72,7 +73,7 @@ function(qt_copy_framework_headers target)
set(options)
set(oneValueArgs)
- set(multiValueArgs PUBLIC PRIVATE QPA RHI)
+ set(multiValueArgs PUBLIC PRIVATE QPA RHI SSG)
cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
qt_internal_get_framework_info(fw ${target})
@@ -81,27 +82,81 @@ function(qt_copy_framework_headers target)
set(output_dir_PRIVATE "${output_dir}/${fw_private_module_header_dir}/private")
set(output_dir_QPA "${output_dir}/${fw_private_module_header_dir}/qpa")
set(output_dir_RHI "${output_dir}/${fw_private_module_header_dir}/rhi")
+ set(output_dir_SSG "${output_dir}/${fw_private_module_header_dir}/ssg")
+ qt_internal_module_info(module "${target}")
- set(out_files)
- foreach(type IN ITEMS PUBLIC PRIVATE QPA RHI)
+ set(out_files "")
+ set(in_files "")
+ set(out_dirs "")
+ set(copy_commands "")
+ foreach(type IN ITEMS PUBLIC PRIVATE QPA RHI SSG)
+ set(in_files_${type} "")
set(fw_output_header_dir "${output_dir_${type}}")
+ list(APPEND out_dirs "${fw_output_header_dir}")
foreach(hdr IN LISTS arg_${type})
get_filename_component(in_file_path ${hdr} ABSOLUTE)
get_filename_component(in_file_name ${hdr} NAME)
set(out_file_path "${fw_output_header_dir}/${in_file_name}")
- add_custom_command(
- OUTPUT ${out_file_path}
- DEPENDS ${in_file_path}
- COMMAND ${CMAKE_COMMAND} -E make_directory "${fw_output_header_dir}"
- COMMAND ${CMAKE_COMMAND} -E copy "${in_file_path}" "${fw_output_header_dir}"
- VERBATIM)
list(APPEND out_files ${out_file_path})
+ list(APPEND in_files_${type} "${in_file_path}")
endforeach()
+ if(in_files_${type})
+ list(APPEND copy_commands
+ COMMAND ${CMAKE_COMMAND} -E copy ${in_files_${type}} "${fw_output_header_dir}")
+ list(APPEND in_files ${in_files_${type}})
+ endif()
endforeach()
- set_property(TARGET ${target} APPEND PROPERTY
- QT_COPIED_FRAMEWORK_HEADERS "${out_files}")
+ list(REMOVE_DUPLICATES out_files)
+ list(REMOVE_DUPLICATES in_files)
+
+ set(copy_fw_sync_headers_command
+ "${CMAKE_COMMAND}" -E copy_directory
+ "${module_build_interface_include_dir}/.syncqt_staging"
+ "${output_dir}/${fw_versioned_header_dir}"
+ )
+
+ set(copy_fw_sync_headers_marker_file
+ "${CMAKE_CURRENT_BINARY_DIR}/${target}_fw_sync_headers_marker_file"
+ )
+
+ set(copy_fw_sync_headers_marker_file_command
+ "${CMAKE_COMMAND}" -E touch "${copy_fw_sync_headers_marker_file}"
+ )
+
+ if(CMAKE_GENERATOR MATCHES "^Ninja")
+ add_custom_command(
+ OUTPUT
+ "${output_dir}/${fw_versioned_header_dir}"
+ "${copy_fw_sync_headers_marker_file}"
+ DEPENDS ${target}_sync_headers
+ COMMAND ${copy_fw_sync_headers_command}
+ COMMAND ${copy_fw_sync_headers_marker_file_command}
+ VERBATIM
+ )
+ add_custom_target(${target}_copy_fw_sync_headers
+ DEPENDS "${output_dir}/${fw_versioned_header_dir}")
+ else()
+ add_custom_target(${target}_copy_fw_sync_headers
+ COMMAND ${copy_fw_sync_headers_command}
+ COMMAND ${copy_fw_sync_headers_marker_file_command}
+ )
+ endif()
+
+ if(out_files)
+ add_custom_command(
+ OUTPUT ${out_files}
+ DEPENDS ${target}_copy_fw_sync_headers ${in_files}
+ COMMAND
+ ${CMAKE_COMMAND} -E make_directory ${out_dirs}
+ ${copy_commands}
+ VERBATIM
+ COMMENT "Copy the ${target} header files to the framework directory"
+ )
+ set_property(TARGET ${target} APPEND PROPERTY
+ QT_COPIED_FRAMEWORK_HEADERS "${out_files}")
+ endif()
endfunction()
function(qt_internal_generate_fake_framework_header target)
@@ -143,6 +198,8 @@ endfunction()
# <out_var>_version framework version, e.g. 'A', 'B' etc.
# <out_var>_bundle_version framework bundle version, same as the PROJECT_VERSION, e.g. '6.0.0'.
# <out_var>_header_dir top-level header directory, e.g. 'QtCore.framework/Headers'.
+# <out_var>_versioned_binary_dir versioned directory that contains the framework binary,
+# e.g. 'QtCore.framework/Versions/A'
# <out_var>_versioned_header_dir header directory for specific framework version,
# e.g. 'QtCore.framework/Versions/A/Headers'
# <out_var>_private_header_dir header directory for the specific framework version and
@@ -151,6 +208,12 @@ endfunction()
# version, framework bundle version and tailing module name, e.g.
# 'QtCore.framework/Versions/A/Headers/6.0.0/Core'
function(qt_internal_get_framework_info out_var target)
+ # Avoid "INTERFACE_LIBRARY targets may only have whitelisted properties" error on CMake < 3.17.
+ get_target_property(target_type ${target} TYPE)
+ if("${target_type}" STREQUAL "INTERFACE_LIBRARY")
+ return()
+ endif()
+
get_target_property(${out_var}_version ${target} FRAMEWORK_VERSION)
get_target_property(${out_var}_bundle_version ${target} MACOSX_FRAMEWORK_BUNDLE_VERSION)
@@ -166,11 +229,14 @@ function(qt_internal_get_framework_info out_var target)
set(${out_var}_name "${module}")
set(${out_var}_dir "${${out_var}_name}.framework")
set(${out_var}_header_dir "${${out_var}_dir}/Headers")
+
if(UIKIT)
- # iOS frameworks do not version their headers
+ # iOS frameworks do not have a Versions sub-directory
+ set(${out_var}_versioned_binary_dir "${${out_var}_dir}")
set(${out_var}_versioned_header_dir "${${out_var}_header_dir}")
else()
- set(${out_var}_versioned_header_dir "${${out_var}_dir}/Versions/${${out_var}_version}/Headers")
+ set(${out_var}_versioned_binary_dir "${${out_var}_dir}/Versions/${${out_var}_version}")
+ set(${out_var}_versioned_header_dir "${${out_var}_versioned_binary_dir}/Headers")
endif()
set(${out_var}_private_header_dir "${${out_var}_versioned_header_dir}/${${out_var}_bundle_version}")
set(${out_var}_private_module_header_dir "${${out_var}_private_header_dir}/${module}")
@@ -180,6 +246,7 @@ function(qt_internal_get_framework_info out_var target)
set(${out_var}_header_dir "${${out_var}_header_dir}" PARENT_SCOPE)
set(${out_var}_version "${${out_var}_version}" PARENT_SCOPE)
set(${out_var}_bundle_version "${${out_var}_bundle_version}" PARENT_SCOPE)
+ set(${out_var}_versioned_binary_dir "${${out_var}_versioned_binary_dir}" PARENT_SCOPE)
set(${out_var}_versioned_header_dir "${${out_var}_versioned_header_dir}" PARENT_SCOPE)
set(${out_var}_private_header_dir "${${out_var}_private_header_dir}" PARENT_SCOPE)
set(${out_var}_private_module_header_dir "${${out_var}_private_module_header_dir}" PARENT_SCOPE)