فهرست منبع

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.
Timothy Flynn 3 سال پیش
والد
کامیت
e805fce46e
1فایلهای تغییر یافته به همراه16 افزوده شده و 0 حذف شده
  1. 16 0
      Meta/CMake/utils.cmake

+ 16 - 0
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()