aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake')
-rw-r--r--vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake71
1 files changed, 71 insertions, 0 deletions
diff --git a/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake b/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
new file mode 100644
index 0000000..a13f8fa
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
@@ -0,0 +1,71 @@
+function(vcpkg_execute_required_process_repeat)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ALLOW_IN_DOWNLOAD_MODE"
+ "COUNT;WORKING_DIRECTORY;LOGNAME"
+ "COMMAND"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ foreach(required_arg IN ITEMS COUNT WORKING_DIRECTORY LOGNAME COMMAND)
+ if(NOT DEFINED arg_${required_arg})
+ message(FATAL_ERROR "${required_arg} must be specified.")
+ endif()
+ endforeach()
+
+ # also checks for COUNT being an integer
+ if(NOT arg_COUNT GREATER_EQUAL "1")
+ message(FATAL_ERROR "COUNT (${arg_COUNT}) must be greater than or equal to 1.")
+ endif()
+
+ if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE)
+ message(FATAL_ERROR
+[[
+This command cannot be executed in Download Mode.
+Halting portfile execution.
+]])
+ endif()
+
+ if(X_PORT_PROFILE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE)
+ vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time")
+ endif()
+
+ set(all_logs "")
+ foreach(loop_count RANGE 1 ${arg_COUNT})
+ set(out_log "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out-${loop_count}.log")
+ set(err_log "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out-${loop_count}.log")
+ list(APPEND all_logs "${out_log}" "${err_log}")
+
+ vcpkg_execute_in_download_mode(
+ COMMAND ${arg_COMMAND}
+ OUTPUT_FILE "${out_log}"
+ ERROR_FILE "${err_log}"
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ )
+ if(error_code EQUAL "0")
+ return()
+ endif()
+ endforeach()
+
+ set(stringified_logs "")
+ foreach(log IN LISTS all_logs)
+ if(NOT EXISTS "${log}")
+ continue()
+ endif()
+ file(SIZE "${log}" log_size)
+ if(NOT log_size EQUAL "0")
+ file(TO_NATIVE_PATH "${log}" native_log)
+ string(APPEND stringified_logs " ${native_log}\n")
+ endif()
+ endforeach()
+
+ z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND})
+ message(FATAL_ERROR
+ " Command failed: ${pretty_command}\n"
+ " Working Directory: ${arg_WORKING_DIRECTORY}\n"
+ " See logs for more information:\n"
+ "${stringified_logs}"
+ )
+endfunction()