From 9c0df02fa4bb0cda8f9d055418b6e7df9edfeffd Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Tue, 13 Feb 2024 13:33:46 +0100 Subject: [PATCH] Change the mechanism that copies framework header files Split the header copy custom commands into two blocks and add _sync_headers_fw_copy target that is responsible for the copy of CaMeL-case header aliases. For the Ninja generator we leave the file-level dependencies between the _sync_headers_fw_copy target and header copy commands. For the Unix Makefiles generator we put the command directly to the target to make sure it's executed by make. Also add the explicit commands for creating the output header directories. Fixes: QTBUG-122200 Change-Id: I71ba716d17a879f20ae0869cf2257d246ac17eff Reviewed-by: Alexandru Croitor (cherry picked from commit 103eca1070a75bfa97d0b72b94e0c759ef0bcd1c) (cherry picked from commit f6c2e909c9e34314342426a71bd4d3a123dcd35c) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 347f94a8dd13d9a2c15c2ea05a0c29ee52022240) --- cmake/QtFrameworkHelpers.cmake | 47 +++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/cmake/QtFrameworkHelpers.cmake b/cmake/QtFrameworkHelpers.cmake index 84ef93b9b01..df80c4c3a7a 100644 --- a/cmake/QtFrameworkHelpers.cmake +++ b/cmake/QtFrameworkHelpers.cmake @@ -84,10 +84,12 @@ function(qt_copy_framework_headers target) set(out_files "") set(in_files "") + set(out_dirs "") set(copy_commands "") foreach(type IN ITEMS PUBLIC PRIVATE QPA) 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) @@ -104,19 +106,40 @@ function(qt_copy_framework_headers target) list(REMOVE_DUPLICATES out_files) list(REMOVE_DUPLICATES in_files) - add_custom_command( - OUTPUT "${output_dir}/${fw_versioned_header_dir}" ${out_files} - DEPENDS ${in_files} ${target}_sync_headers - COMMAND - ${CMAKE_COMMAND} -E copy_directory - "${module_build_interface_include_dir}/.syncqt_staging" - "${output_dir}/${fw_versioned_header_dir}" - ${copy_commands} - VERBATIM - COMMENT "Copy the ${target} header files to the framework directory" + + 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_property(TARGET ${target} APPEND PROPERTY - QT_COPIED_FRAMEWORK_HEADERS "${out_files}") + + if(CMAKE_GENERATOR MATCHES "^Ninja") + add_custom_command( + OUTPUT "${output_dir}/${fw_versioned_header_dir}" + DEPENDS ${target}_sync_headers + COMMAND ${copy_fw_sync_headers_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}) + 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)