From d2aedc7850907dd576329eebc577929b42c301a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Decroy=C3=A8re?= Date: Thu, 10 Sep 2026 09:20:05 +0200 Subject: [PATCH] Make app packaging incremental --- cmake/AppPackaging.cmake | 46 +++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/cmake/AppPackaging.cmake b/cmake/AppPackaging.cmake index b5252290..797765f8 100644 --- a/cmake/AppPackaging.cmake +++ b/cmake/AppPackaging.cmake @@ -48,43 +48,65 @@ function(configure_xcode_resources target_name) endfunction() function(configure_framework_dependencies target_name) - add_custom_target(CopyFrameworkFolder${target_name} ALL) + if(NOT ARGN) + return() + endif() - foreach(dependency IN LISTS ARGN) - add_dependencies(CopyFrameworkFolder${target_name} ${dependency}) + set(copy_stamps "") + foreach(dependency IN LISTS ARGN) set(framework_path "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${dependency}.framework") get_filename_component(framework_name "${framework_path}" NAME) set(framework_destination "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target_name}.app/Contents/Frameworks/${framework_name}") + set(copy_stamp "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target_name}-${dependency}-framework-$.stamp") - add_custom_command(TARGET CopyFrameworkFolder${target_name} POST_BUILD + add_custom_command( + OUTPUT "${copy_stamp}" COMMAND ${CMAKE_COMMAND} -E make_directory "${framework_destination}" COMMAND cp -RP "${framework_path}/" "${framework_destination}/" COMMAND ${CMAKE_COMMAND} -E remove_directory "${framework_destination}/Headers" + COMMAND ${CMAKE_COMMAND} -E touch "${copy_stamp}" + DEPENDS ${dependency} COMMENT "Copying ${dependency} framework folder to destination" ) + + list(APPEND copy_stamps "${copy_stamp}") endforeach() + add_custom_target(CopyFrameworkFolder${target_name} DEPENDS ${copy_stamps}) add_dependencies(${target_name} CopyFrameworkFolder${target_name}) endfunction() function(configure_directory_dependencies target_name output_folder) - add_custom_target(CopyApplicationFolder${target_name} ALL) + if(NOT ARGN) + return() + endif() - add_custom_command(TARGET CopyApplicationFolder${target_name} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${output_folder}" - COMMENT "Creating package folder" - ) + set(copy_stamps "") + set(previous_copy_stamp "") foreach(dependency IN LISTS ARGN) - add_dependencies(CopyApplicationFolder${target_name} ${dependency}) + set(copy_stamp "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target_name}-${dependency}-directory-$.stamp") + set(copy_dependencies ${dependency}) - add_custom_command(TARGET CopyApplicationFolder${target_name} POST_BUILD + if(previous_copy_stamp) + list(APPEND copy_dependencies "${previous_copy_stamp}") + endif() + + add_custom_command( + OUTPUT "${copy_stamp}" + COMMAND ${CMAKE_COMMAND} -E make_directory "${output_folder}" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${dependency}" "${output_folder}" - COMMENT "Copy ${dependency}" + COMMAND ${CMAKE_COMMAND} -E touch "${copy_stamp}" + DEPENDS ${copy_dependencies} + COMMENT "Copying ${dependency} package dependency" ) + + list(APPEND copy_stamps "${copy_stamp}") + set(previous_copy_stamp "${copy_stamp}") endforeach() + add_custom_target(CopyApplicationFolder${target_name} DEPENDS ${copy_stamps}) add_dependencies(${target_name} CopyApplicationFolder${target_name}) endfunction()