From e805fce46e75113802e34144598327f9d73e7366 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 25 Jan 2022 18:36:40 -0500 Subject: Meta: Add a CMake function to download remote files during the build This function will handle download failures. It doesn't support hashing for integrity yet, but if the download times out or otherwise fails, the build itself will fail. But default, file(DOWNLOAD) in CMake doesn't fail the build; we must pass in and check a STATUS variable. --- Meta/CMake/utils.cmake | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'Meta/CMake') diff --git a/Meta/CMake/utils.cmake b/Meta/CMake/utils.cmake index caee954fcd..6cddf3cb5a 100644 --- a/Meta/CMake/utils.cmake +++ b/Meta/CMake/utils.cmake @@ -194,3 +194,19 @@ function(invoke_generator name generator version_file prefix header implementati add_custom_target("generate_${prefix}${name}" DEPENDS "${header}" "${implementation}") add_dependencies(all_generated "generate_${prefix}${name}") endfunction() + +function(download_file url path) + if (NOT EXISTS "${path}") + get_filename_component(file "${path}" NAME) + message(STATUS "Downloading file ${file} from ${url}") + + file(DOWNLOAD "${url}" "${path}" INACTIVITY_TIMEOUT 10 STATUS download_result) + list(GET download_result 0 status_code) + list(GET download_result 1 error_message) + + if (NOT status_code EQUAL 0) + file(REMOVE "${path}") + message(FATAL_ERROR "Failed to download ${url}: ${error_message}") + endif() + endif() +endfunction() -- cgit v1.2.3